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

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

Использование основных функций GitHub Actions для непрерывной интеграции (CI).

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Обзор примера

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

На следующей схеме показано общее представление этапов рабочего процесса и их выполнение в задании:

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

Функции, используемые в этом примере

Пример рабочего процесса демонстрирует следующие возможности GitHub Actions.

ВозможностьРеализация
Запуск рабочего процесса для автоматического запускаpush

Пример рабочего процесса

Следующий рабочий процесс был создан командой разработчиков документации для GitHub. Чтобы получить последнюю версию этого файла из репозитория github/docs, перейдите по адресу: check-broken-links-github-github.yml.

Примечание. Каждая строка этого рабочего процесса описана в следующем разделе Основные сведения о примере.

YAML
name: 'Link Checker: All English'

# **What it does**: Renders the content of every page and check all internal links.
# **Why we have it**: To make sure all links connect correctly.
# **Who does it impact**: Docs content.

on:
  workflow_dispatch:
  push:
    branches:
      - main
  pull_request:

permissions:
  contents: read
  # Needed for the 'trilom/file-changes-action' action
  pull-requests: read

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

jobs:
  check-links:
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16.13.x
          cache: npm

      - name: Install
        run: npm ci

      # Creates file "$/files.json", among others
      - name: Gather files changed
        uses: trilom/file-changes-action@a6ca26c14274c33b15e6499323aac178af06ad4b
        with:
          fileOutput: 'json'

      # For verification
      - name: Show files changed
        run: cat $HOME/files.json

      - name: Link check (warnings, changed files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --max 100 \
            --check-anchors \
            --check-images \
            --verbose \
            --list $HOME/files.json

      - name: Link check (critical, all files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --exit \
            --verbose \
            --check-images \
            --level critical

Общие сведения о примере

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

Код Пояснение
YAML
name: 'Link Checker: All English'

Имя рабочего процесса в том виде, в котором оно появится на вкладке "Действия" репозитория GitHub.

YAML
on:

Ключевое слово on позволяет определять события, которые активируются при запуске рабочего процесса. Здесь можно определить несколько событий. Дополнительные сведения см. в разделе Активация рабочего процесса.

YAML
  workflow_dispatch:

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

YAML
  push:
    branches:
      - main

Добавьте событие push, чтобы рабочий процесс запускался автоматически при каждой отправке фиксации в ветвь с именем main. Дополнительные сведения см. на веб-сайте push.

YAML
  pull_request:

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

YAML
permissions:
  contents: read
  pull-requests: read

Изменяет разрешения по умолчанию, предоставленные GITHUB_TOKEN. Зависит от потребностей рабочего процесса. Дополнительные сведения см. в разделе Назначение разрешений для заданий.

YAML
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'

Создает группу параллелизма для определенных событий и использует оператор || для определения резервных значений. Дополнительные сведения см. в разделе Использование параллелизма.

YAML
  cancel-in-progress: true

Отменяет задание или рабочий процесс, которые сейчас выполняются в той же группе параллелизма.

YAML
jobs:

Объединяет все задания, выполняемые в файле рабочего процесса.

YAML
  check-links:

Определяет задание с идентификатором check-links, которое хранится в ключе jobs.

YAML
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}

Настраивает задание для запуска в средстве выполнения тестов, размещенном в GitHub, или в локальном средстве выполнения тестов в зависимости от репозитория, выполняющего рабочий процесс. В этом примере задание будет выполняться в локальном средстве выполнения тестов, если репозиторий называется docs-internal и находится в организации github. Если репозиторий не соответствует этому пути, задание будет выполняться в средстве выполнения тестов ubuntu-latest, размещенном в GitHub. Дополнительные сведения об этих параметрах см. в разделе Выбор средства выполнения тестов для задания.

YAML
    steps:

Группируют все шаги, которые будут выполняться в рамках задания check-links. Каждое задание в рабочем процессе имеет собственный раздел steps.

YAML
      - name: Checkout
        uses: actions/checkout@v3

Ключевое слово uses сообщает заданию, что нужно получить действие с именем actions/checkout. Это действие, которое извлекает репозиторий и загружает его в средство выполнения, позволяя выполнять действия в коде (например, средства тестирования). Действие извлечения необходимо использовать в любой момент, когда рабочий процесс будет выполняться в коде репозитория или если вы используете действие, определенное в репозитории.

YAML
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16.13.x
          cache: npm

На этом шаге используется действие actions/setup-node для установки указанной версии пакета программного обеспечения Node.js в средстве выполнения тестов, которое предоставляет доступ к команде npm.

YAML
      - name: Install
        run: npm ci

Ключевое слово run указывает заданию выполнить команду в средстве выполнения. В этом случае npm ci используется для установки пакетов программного обеспечения npm для проекта.

YAML
      - name: Gather files changed
        uses: trilom/file-changes-action@a6ca26c14274c33b15e6499323aac178af06ad4b
        with:
          fileOutput: 'json'

Использует действие trilom/file-changes-action для сбора всех измененных файлов. Этот пример закреплен к определенной версии действия с помощью SHA a6ca26c14274c33b15e6499323aac178af06ad4b.

YAML
      - name: Show files changed
        run: cat $HOME/files.json

Выводит список содержимого files.json. Это отразится в журнале выполнения рабочего процесса и может быть полезно для отладки.

YAML
      - name: Link check (warnings, changed files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --max 100 \
            --check-anchors \
            --check-images \
            --verbose \
            --list $HOME/files.json

На этом шаге используется команда run для выполнения скрипта, хранящегося в репозитории script/rendered-content-link-checker.mjs, которая передает все необходимые параметры.

YAML
      - name: Link check (critical, all files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --exit \
            --verbose \
            --check-images \
            --level critical

На этом шаге используется команда run для выполнения скрипта, хранящегося в репозитории script/rendered-content-link-checker.mjs, которая передает другой набор параметров.

Дальнейшие действия