Skip to content

Учебник: CI-пайплайн для Node.js

В этом учебнике вы создадите полноценный CI-пайплайн для Node.js-приложения: линтинг, тесты и сборка, запускаемые при каждом пуше в main и при pull request'ах.

Время: ~15 минут Цель экспорта: GitHub Actions


Что вы построите

Триггер: push в main / pull_request в main


[Стейдж «Качество»] ──────────────────────────────┐
  ├── lint (ubuntu-latest)                          │
  │     1. Checkout                                 │
  │     2. Установить Node.js 20                    │
  │     3. npm ci                                   │
  │     4. npm run lint                             │
  │                                                 │
  └── test (ubuntu-latest)            параллельно  │
        1. Checkout                                 │
        2. Установить Node.js 20                    │
        3. npm ci                                   │
        4. npm test -- --coverage                   │

    ▼ (только при успехе «Качества») ───────────────┘
[Стейдж «Сборка»]
  └── build (ubuntu-latest)
        1. Checkout
        2. Установить Node.js 20
        3. npm ci
        4. npm run build
        5. Загрузить артефакт

Шаг 1 — Создать проект и пайплайн

  1. На панели управления нажмите Новый проект
  2. Назовите его my-node-app, провайдер — github
  3. Внутри проекта нажмите Новый пайплайн, назовите его ci

Шаг 2 — Настроить триггер

Нажмите Триггер на панели инструментов. Настройте:

  • Push → ветки: main

TIP

Можно настроить несколько типов триггеров, сохранив пайплайн и обновив триггер снова. Или просто добавьте ветки pull_request в YAML после экспорта.

Шаг 3 — Добавить стейдж «Качество»

Кликните на холсте → Добавить стейдж → назовите Качество.

Дважды кликните по карточке Качество.

Добавить джоб lint

Нажмите Добавить джоб:

  • Название: lint
  • Runs on: ubuntu-latest

Дважды кликните по lint и добавьте шаги:

Шаг 1 — Checkout

  • Тип: git / Операция: checkout

Шаг 2 — Установить зависимости

  • Тип: shell_command / Скрипт: npm ci

Шаг 3 — Линтинг

  • Тип: shell_command / Скрипт: npm run lint

Вернитесь в вид стейджа через хлебные крошки.

Добавить джоб test

Нажмите Добавить джоб:

  • Название: test
  • Runs on: ubuntu-latest

Дважды кликните по test и добавьте шаги:

Шаг 1 — Checkout

  • Тип: git / Операция: checkout

Шаг 2 — Установить зависимости

  • Тип: shell_command / Скрипт: npm ci

Шаг 3 — Запустить тесты с покрытием

  • Тип: test / Фреймворк: jest (или vitest) / Команда: npm test -- --coverage

Джобы lint и test не соединены ребром — они выполняются параллельно. ✓

Шаг 4 — Добавить стейдж «Сборка»

Вернитесь в вид пайплайна через хлебные крошки.

Кликните на холсте → Добавить стейдж → назовите Сборка.

Соедините стейджи: наведите на Качество, захватите маркер правого края, перетащите к Сборке. Появится стрелка.

Дважды кликните Сборка. Добавьте джоб:

  • Название: build
  • Runs on: ubuntu-latest

Добавьте шаги:

Шаг 1 — Checkout

  • Тип: git / Операция: checkout

Шаг 2 — Установить зависимости

  • Тип: shell_command / Скрипт: npm ci

Шаг 3 — Сборка

  • Тип: build / Инструмент: npm / Команда: npm run build

Шаг 5 — Сохранить и экспортировать

  1. Нажмите Сохранить (Ctrl+S)
  2. Нажмите Экспорт → выберите GitHub ActionsСкачать

Вы получите файл ci.yml.

Шаг 6 — Добавить в репозиторий

bash
mkdir -p .github/workflows
cp ~/Downloads/ci.yml .github/workflows/ci.yml
git add .github/workflows/ci.yml
git commit -m "ci: добавить CI-пайплайн"
git push origin main

GitHub автоматически подхватит воркфлоу и запустит его при следующем пуше.


Результат: сгенерированный YAML GitHub Actions

yaml
name: ci
on:
  push:
    branches:
      - main

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm run lint

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm test -- --coverage

  build:
    runs-on: ubuntu-latest
    needs: [lint, test]
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm run build

Released under the MIT License.