Skip to main content

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

Узнайте, как создать рабочий процесс непрерывной интеграции (CI) для создания и тестирования проекта Node.js.

Примечание.

GitHub Enterprise Serverразмещенные в данный момент средства выполнения не поддерживаются в GitHub.

Введение

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

Необходимые компоненты

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

Использование локальных средств выполнения GitHub Enterprise Server

При использовании действий установки (например actions/setup-LANGUAGE) GitHub Enterprise Server с локальными средствами выполнения, возможно, потребуется настроить кэш средств на запусках, у которых нет доступа к Интернету. Дополнительные сведения см. в разделе Настройка кэша инструментов для локально размещенных средств выполнения без доступа к Интернету.

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

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

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

  1. На GitHubперейдите на главную страницу репозитория.

  2. Под именем репозитория щелкните Actions.

    Снимок экрана: вкладки для репозитория github/docs. Вкладка "Действия" выделена оранжевым контуром.

  3. Если в вашем репозитории уже используется рабочий процесс, нажмите кнопку Создать рабочий процесс.

  4. На странице "Выбор рабочего процесса" показан выбор рекомендуемых шаблонов рабочих процессов. Найдите "Node.js".

  5. Отфильтруйте выбор рабочих процессов, щелкнув "Непрерывная интеграция".

  6. В рабочем процессе "Node.js" нажмите кнопку "Настроить".

    Если вы не найдете шаблон рабочего процесса "Node.js", скопируйте следующий код рабочего процесса в новый файл, который вызывается node.js.yml в .github/workflows каталоге репозитория.

    YAML
    name: Node.js CI
    
    on:
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        strategy:
          matrix:
            node-version: [18.x, 20.x]
            # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
    
        steps:
        - uses: actions/checkout@v6
        - name: Use Node.js ${{ matrix.node-version }}
          uses: actions/setup-node@v4
          with:
            node-version: ${{ matrix.node-version }}
            cache: 'npm'
        - run: npm ci
        - run: npm run build --if-present
        - run: npm test
    
  7. Измените рабочий процесс по мере необходимости. Например, измените версии узла, которые вы хотите использовать.

  8. Щелкните Зафиксировать изменения.

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

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

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

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

Каждое задание может получить доступ к значению, определенному в массиве node-version матрицы, с помощью контекста matrix. Действие setup-node использует контекст в качестве входных данных node-version. Действие setup-node настраивает каждое задание с использованием разных версий Node.js перед созданием и тестированием кода. Дополнительные сведения о стратегиях матриц и контекстах см. в разделе [AUTOTITLE и Синтаксис рабочего процесса для GitHub Actions](/actions/reference/workflows-and-actions/contexts).

YAML
strategy:
  matrix:
    node-version: ['18.x', '20.x']

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

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

YAML
strategy:
  matrix:
    node-version: ['10.17.0', '17.9.0']

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

YAML
name: Node.js CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20.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 и GitHubLinux также установлены средства выполнения Grunt, Gulp и Bower.

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

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

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

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

С помощью npm install установки зависимостей, определенных в package.json файле. Дополнительные сведения см. в статье npm install.

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

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

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

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

Кроме того, можно установить зависимости, определенные в package.json файле.

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

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

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

Чтобы пройти проверку подлинности в частном реестре, нужно сохранить маркер проверки подлинности npm в виде секрета. Например, создайте секрет репозитория NPM_TOKEN. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.

В приведенном ниже примере в 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@v6
- name: Use Node.js
  uses: actions/setup-node@v4
  with:
    always-auth: true
    node-version: '20.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@v6
- uses: actions/setup-node@v4
  with:
    node-version: '20'
    cache: 'npm'
- run: npm install
- run: npm test

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

YAML
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v4
  with:
    node-version: '20'
    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@v6
- uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad
  with:
    version: 6.10.0
- uses: actions/setup-node@v4
  with:
    node-version: '20'
    cache: 'pnpm'
- run: pnpm install
- run: pnpm test

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

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

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

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

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

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

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

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