Непрерывная интеграция. GitHub Actions

Непрерывная интеграция. GitHub Actions.

Содержание

1 Общая информация

  • Описание: https://github.com/features/actions
  • GitHub Actions — система непрерывной интеграции.
  • Бесплатна для публичных репозиториев.
  • В репозитории создаётся каталог .github/workflows.
  • В каталоге размещаются файлы с описанием шагов, которые нужно выполнить.
  • В терминах Github Actions такое описание процесса называется workflow.

2 Основные концепции Github Actions

  • Воркфлоу (Workflows)
    • Каждый репозиторий на GitHub может содержать один или несколько воркфлоу.
    • Каждый воркфлоу определяется в отдельном файле конфигурации в каталоге репозитория .github/workflows.
    • Несколько воркфлоу могут выполняться параллельно.
  • События (Events)
    • Воркфлоу может запускаться одним или несколькими событиями.
    • Это могут быть внутренние события GitHub, запланированные события, произвольные внешние события.
  • Задания (Jobs)
    • Воркфлоу состоит из одного или нескольких заданий.
    • Задание содержит набор команд, которые запускаются вместе с рабочим процессом.
    • По умолчанию при запуске воркфлоу все его задания выполняются параллельно, однако между ними можно определить зависимость, чтобы они выполнялись последовательно.
  • Раннеры (Runners)
    • Временный сервер на GitHub с выбранной операционной системой.
    • Каждое задание выполняется на определенном раннере.
  • Шаги (Steps)
    • Задания состоят из последовательности шагов.
    • Шаг – это либо команда оболочки (shell command), либо экшен (action).
    • Все шаги задания выполняются последовательно на раннере, связанном с заданием.
    • По умолчанию в случае сбоя шага все следующие шаги задания пропускаются.

3 Переменные среды

3.1 Соглашения об именовании переменных конфигурации

  • К именам переменных конфигурации применяются следующие правила:
    • Имена могут содержать только буквенно-цифровые символы ([a-z], [A-Z], [0-9]) или символы подчёркивания (_). Пробелы недопустимы.
    • Имена не должны начинаться с префикса GITHUB_.
    • Имена не должны начинаться с числа.
    • В именах не учитывается регистр символов.
    • Имена должны быть уникальными на уровне, на который они создаются.

3.2 Переменные среды по умолчанию

  • CI: Всегда имеет значение true.
  • GITHUB_ACTION: Имя выполняемого в данный момент действия или id шага.
  • GITHUB_ACTION_PATH: Путь к расположению действия. Это свойство поддерживается только в составных действиях.
  • GITHUB_ACTION_REPOSITORY: Для шага, в котором выполняется действие, это имя владельца и репозитория, где находится действие.
  • GITHUB_ACTIONS: Всегда имеет значение true, когда GitHub Actions запускает рабочий процесс. Эту переменную можно использовать, чтобы различать, когда тесты выполняются локально или с помощью GitHub Actions.
  • GITHUB_ACTOR: Имя пользователя или приложения, инициирующего рабочий процесс.
  • GITHUB_ACTOR_ID: Идентификатор учетной записи пользователя или приложения, активировавшего начальное выполнение рабочего процесса. Отличается от имени пользователя субъекта.
  • GITHUB_API_URL: Возвращает URL-адрес API.
  • GITHUB_BASE_REF: Имя базовой ссылки или целевой ветви запроса на вытягивание в выполнении рабочего процесса.
  • GITHUB_ENV: Путь в средстве выполнения к файлу, который задаёт переменные из команд рабочего процесса. Этот файл уникален для текущего шага и изменяется для каждого шага задания.
  • GITHUB_EVENT_NAME: Имя события, которое активировало рабочий процесс.
  • GITHUB_EVENT_PATH: Путь к файлу в средстве выполнения, который содержит полные полезные данные веб-перехватчика событий.
  • GITHUB_GRAPHQL_URL: Возвращает URL-адрес API GraphQL.
  • GITHUB_HEAD_REF: Ссылка на голову или исходная ветвь запроса на вытягивание в рабочем процессе.
  • GITHUB_JOB: Job_id текущего задания.
  • GITHUB_PATH: Путь в средстве выполнения к файлу, который задаёт системные PATH переменные из команд рабочего процесса. Этот файл уникален для текущего шага и изменяется для каждого шага задания.
  • GITHUB_REF: Полная ссылка на ветвь или тег, активировавшая выполнение рабочего процесса.
    • Ссылка сохраняется в полном формате, то есть refs/heads/<branch_name> для ветвей, refs/pull/<pr_number>/merge для запросов на вытягивание и refs/tags/<tag_name> для тегов.
  • GITHUB_REF_NAME: Короткое имя ссылки на ветвь или тег, активировав запуск рабочего процесса. Это значение соответствует имени ветви или тега, отображаемой в GitHub.
  • GITHUB_REF_PROTECTED: Значение true, если защита ветви настроена для ссылки, которая активировала выполнение рабочего процесса.
  • GITHUB_REF_TYPE: Тип ссылки, активировавшей выполнение рабочего процесса. Допустимые значения: branch или tag.
  • GITHUB_REPOSITORY_ID: Идентификатор репозитория. Отличается от имени репозитория.
  • GITHUB_REPOSITORY_OWNER: Имя владельца репозитория.
  • GITHUB_REPOSITORY_OWNER_ID: Идентификатор учетной записи владельца репозитория. Отличается от имени владельца.
  • GITHUB_RETENTION_DAYS: Количество дней, в течение которых хранятся журналы и артефакты выполнения рабочего процесса.
  • GITHUB_RUN_ATTEMPT: Уникальный номер для каждой попытки запуска определенного рабочего процесса в репозитории.
  • GITHUB_RUN_ID: Уникальный номер каждого запуска рабочего процесса в репозитории. Он не изменяется при повторном запуске рабочего процесса.
  • GITHUB_RUN_NUMBER: Уникальный номер для каждого запуска определенного рабочего процесса в репозитории.
  • GITHUB_SERVER_URL: URL-адрес сервера GitHub.
  • GITHUB_SHA: SHA фиксации, инициировавшей рабочий процесс.
  • GITHUB_STEP_SUMMARY: Путь средства выполнения тестов к файлу, который содержит сводки заданий из команд рабочего процесса.
  • GITHUB_WORKFLOW: Имя рабочего процесса.
  • GITHUB_WORKFLOW_REF: Путь ссылки к рабочему процессу.
  • GITHUB_WORKFLOW_SHA: Sha фиксации для файла рабочего процесса.
  • GITHUB_WORKSPACE: Рабочий каталог по умолчанию в средстве выполнения для шагов и расположение репозитория по умолчанию при использовании checkout действия.
  • RUNNER_ARCH: Архитектура средства выполнения задания. Возможные значения: x86, x64, arm, arm64.
  • RUNNER_DEBUG: Это делается только в том случае, если ведение журнала отладки включено и всегда имеет значение 1.
  • RUNNER_NAME: Имя средства выполнения задания.
  • RUNNER_OS: Операционная система средства выполнения тестов, выполняющего задание. Возможные значения: Linux, Windows или macOS.
  • RUNNER_TEMP: Путь к временному каталогу в средстве выполнения.
  • RUNNER_TOOL_CACHE: Путь к каталогу, содержащему предустановленные средства для размещенных в GitHub средств выполнения.

4 Управление разрешениями для GITHUB_TOKEN

  • GITHUB_TOKEN — автоматически сгенерированный секрет, который позволяет выполнять вызовы GitHub API с проверкой подлинности при запуске рабочего процесса.
  • Действия создают новый токен для каждого задания, срок действия которого истекает после завершения задания.
  • Документация: https://docs.github.com/ru/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token

4.1 Установка разрешений в рабочем процессе

  • Ключ permissions позволяет указать, какие разрешения необходимо использовать для токена:
     1permissions:
     2  actions: read|write|none
     3  checks: read|write|none
     4  contents: read|write|none
     5  deployments: read|write|none
     6  issues: read|write|none
     7  packages: read|write|none
     8  pull-requests: read|write|none
     9  repository-projects: read|write|none
    10  security-events: read|write|none
    11  statuses: read|write|none
    
  • Любому разрешению, отсутствующему в списке, будет присвоено значение none.

4.2 Установка разрешений по умолчанию для репозитория

  • В графическом интерфейсе можно установить разрешения по умолчанию для токена для всего репозитория.
  • Можно выбрать один из двух вариантов:
    • Чтение/запись для всех областей (текущее значение по умолчанию)
    • Читать содержимое репозитория
  • Установка значения по умолчанию contents:read достаточна для любых рабочих процессов, которые просто необходимо клонировать и компилировать.
  • Если вам нужны дополнительные разрешения, вам нужно будет указать их в yaml вашего рабочего процесса.

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие