Непрерывная интеграция. 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
вашего рабочего процесса.