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

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

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

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

В этой статье на примере рабочего процесса демонстрируется применение некоторых функций 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, которая передает другой набор параметров.

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