Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

Создание и тестирование для Node.js

Вы можете создать рабочий процесс непрерывной интеграции для сборки и тестирования проекта Node.js.

Введение

В этом руководстве показано, как получить рабочий процесс непрерывной интеграции (CI), который создает и тестирует код Node.js. Если тесты CI проходят правильно, может потребоваться развернуть код или опубликовать пакет.

Предварительные требования

Рекомендуется иметь базовое представление о Node.js, YAML, параметрах конфигурации рабочих процессов, а также о том, как создавать файл рабочего процесса. Дополнительные сведения можно найти в разделе

Использование начального рабочего процесса Node.js

GitHub предоставляет начальный рабочий процесс Node.js, который будет работать для большинства проектов Node.js. В этом руководстве приведены примеры npm и Yarn, которые можно использовать для настройки начального рабочего процесса. Дополнительные сведения см. в разделе Начальный рабочий процесс Node.js.

Чтобы быстро приступить к работе, добавьте начальный рабочий процесс в каталог .github/workflows своего репозитория. В показанном ниже рабочем процессе предполагается, что ветвью по умолчанию для вашего репозитория является main.

YAML
name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x, 15.x]

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

Выполнение заданий в другой операционной системе

Начальный рабочий процесс настраивает задания для запуска в Linux с помощью размещенных в GitHub средств выполнения ubuntu-latest. Можно изменить ключ runs-on для выполнения заданий в другой операционной системе. Например, можно использовать размещенные в GitHub средства выполнения Windows.

runs-on: windows-latest

Кроме этого, можно выполнять задания на размещенных в GitHub средствах выполнения macOS.

runs-on: macos-latest

Можно также выполнять задания в контейнерах Docker или предоставить локальное средство выполнения, которое выполняется в собственной инфраструктуре. Дополнительные сведения см. в статье Синтаксис рабочего процесса для GitHub Actions.

Указание версии Node.js

Самый простой способ указать версию Node.js заключается в использовании действия setup-node, предоставляемого GitHub. Дополнительные сведения см. описании setup-node.

Действие setup-node принимает версию Node.js в качестве входных данных и настраивает ее в средстве выполнения. Действие setup-node находит определенную версию Node.js из кэша инструментов в каждом средстве запуска и добавляет необходимые двоичные файлы в переменную PATH, которая сохраняется до конца задания. Применение действия setup-node представляет собой рекомендуемый способ использования Node.js с GitHub Actions, так как он обеспечивает согласованное поведение в разных средствах выполнения и различных версиях Node.js. При использовании локального средства выполнения необходимо установить Node.js и добавить его в PATH.

Начальный рабочий процесс включает в себя матричную стратегию, которая создает и тестирует код с использованием четырех версий Node.js: 10.x, 12.x, 14.x и 15.x. Здесь "x" — это подстановочный знак, соответствующий последнему дополнительному выпуску и выпуску исправлений, доступному для версии. Каждая версия Node.js, указанная в массиве node-version, создает задание, которое выполняет одни и те же действия.

Каждое задание может получить доступ к значению, определенному в массиве node-version матрицы, с помощью контекста matrix. Действие setup-node использует контекст в качестве входных данных node-version. Действие setup-node настраивает каждое задание с использованием разных версий Node.js перед созданием и тестированием кода. Дополнительные сведения о матричных стратегиях и контекстах см. в разделах Синтаксис рабочего процесса для GitHub Actions и Контексты.

YAML
strategy:
  matrix:
    node-version: [10.x, 12.x, 14.x, 15.x]

steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
  uses: actions/setup-node@v3
  with:
    node-version: ${{ matrix.node-version }}

Кроме того, можно создавать и тестировать код с использованием конкретных версий Node.js.

YAML
strategy:
  matrix:
    node-version: [8.16.2, 10.17.0]

Либо можно создавать и тестировать код с помощью одной версии Node.js.

YAML
name: Node.js CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '12.x'
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

Если не указать версию Node.js, GitHub использует версию Node.js по умолчанию, заданную для среды. Дополнительные сведения см. в разделе Спецификации для средств выполнения, размещенных в GitHub.

Установка зависимостей

Для размещенных в GitHub средств выполнения установлены диспетчеры зависимостей npm и Yarn. Вы можете использовать npm и Yarn для установки зависимостей в рабочем процессе перед созданием и тестированием кода. В Windows и Linux для размещенных в GitHub средств выполнения также установлены Grunt, Gulp и Bower.

Можно также кэшировать зависимости, чтобы ускорить рабочий процесс. Дополнительные сведения см. в разделе Кэширование зависимостей для ускорения рабочих процессов.

Пример использования npm

В этом примере устанавливаются зависимости, определенные в файле package.json. Дополнительные сведения см. на веб-сайте npm install.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm install

При использовании npm ci версии устанавливаются в файл package-lock.json или npm-shrinkwrap.json, а также запрещается изменение файла блокировки. Выполнение npm ci обычно осуществляется быстрее, чем npm install. Дополнительные сведения см. в описании npm ci и разделе Знакомство с npm ci для получения более быстродействующих и надежных сборок.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm ci

Пример использования Yarn

В этом примере устанавливаются зависимости, определенные в файле package.json. Дополнительные сведения см. на веб-сайте yarn install.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn

Кроме того, можно передать --frozen-lockfile, чтобы установить версии в файле yarn.lock и запретить изменения файла yarn.lock.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn --frozen-lockfile

Пример использования частного реестра и создания NPMRC-файла

Действие setup-node можно использовать для создания локального NPMRC-файла в средстве выполнения, который настраивает реестр и область по умолчанию. Действие setup-node также принимает в качестве входных данных маркер проверки подлинности, используемый для доступа к частным реестрам или публикации пакетов узлов. Дополнительные сведения см. на веб-сайте setup-node.

Чтобы пройти проверку подлинности в частном реестре, нужно сохранить маркер проверки подлинности npm в виде секрета. Например, создайте секрет репозитория NPM_TOKEN. Дополнительные сведения см. в статье «Создание и использование зашифрованных секретов».

В приведенном ниже примере в NPM_TOKEN секрета хранится токен проверки подлинности npm. Действие setup-node настраивает файл NPMRC для чтения маркера проверки подлинности npm из переменной среды NODE_AUTH_TOKEN. При использовании действия setup-node для создания файла NPMRC необходимо задать для переменной среды NODE_AUTH_TOKEN секрет, содержащий маркер проверки подлинности npm.

Перед установкой зависимостей используйте действие setup-node для создания файла NPMRC. Это действие имеет два входных параметра. Параметр node-version задает версию Node.js, а параметр registry-url задает реестр по умолчанию. Если в реестре пакетов используются области, необходимо использовать параметр scope. Дополнительные сведения см. на веб-сайте npm-scope.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    always-auth: true
    node-version: '12.x'
    registry-url: https://registry.npmjs.org
    scope: '@octocat'
- name: Install dependencies
  run: npm ci
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

В приведенном выше примере создается файл NPMRC со следующим содержимым:

//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://registry.npmjs.org/
always-auth=true

Примеры кэширования зависимостей

Можно кэшировать и восстанавливать зависимости с помощью setup-nodeдействия.

В следующем примере кэшируются зависимости для npm.

YAML
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
  with:
    node-version: '14'
    cache: 'npm'
- run: npm install
- run: npm test

В следующем примере кэшируются зависимости для Yarn.

YAML
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
  with:
    node-version: '14'
    cache: 'yarn'
- run: yarn
- run: yarn test

В следующем примере кэшируются зависимости для pnpm (версия 6.10 или более поздняя).

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.

# NOTE: pnpm caching support requires pnpm version >= 6.10.0

steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
  with:
    version: 6.10.0
- uses: actions/setup-node@v3
  with:
    node-version: '14'
    cache: 'pnpm'
- run: pnpm install
- run: pnpm test

Если у вас есть особые требования или вам нужно управлять кэшированием более детально, можно использовать действие cache. Дополнительные сведения см. в разделе Кэширование зависимостей для ускорения рабочих процессов.

Создание и тестирование кода

Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде. Например, при запуске npm run build для выполнения шагов сборки, определенных в файле package.json, и npm test для выполнения набора тестов, вам нужно добавить эти команды в свой файл рабочего процесса.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- run: npm install
- run: npm run build --if-present
- run: npm test

Упаковка данных рабочего процесса в виде артефактов

Вы можете сохранить артефакты из шагов сборки и тестирования, чтобы просмотреть их после завершения задания. Например, может потребоваться сохранить файлы журналов, основные дампы, результаты теста или снимки экрана. Дополнительные сведения см. в разделе Сохранение данных рабочего процесса с помощью артефактов.

Публикация в реестрах пакетов

Вы можете настроить рабочий процесс для публикации пакета Node.js в реестре пакетов после прохождения тестов CI. Дополнительные сведения о публикации в npm и GitHub Packagesсм. в разделе Публикация пакетов Node.js.