Шпаргалка по GitHub Actions — стандартная структура и список наиболее полезных действий
Немного о распространённых GitHub Actions и их структуре.
GitHub Actions — это платформа автоматизации и CI/CD внутри GitHub, предназначенная для сборки, тестирования и развертывания кода на основе событий, таких как пуши (push), запросы на слияние (pull requests) или по расписанию.
Помимо стандартного GitHub, вы можете использовать GitHub Actions на самохостинговом сервере Gitea.

Действия (Actions) охватывают официальные, общедоступные и сторонние инструменты, поддерживая автоматизацию от сборки и тестирования до развертывания, управления релизами, QA и уведомлений.
Данное краткое руководство охватывает структуру GitHub Actions, краткое описание и наиболее распространенные действия, используемые в рабочих процессах с открытым исходным кодом и коммерческих проектах. Оно является частью раздела Инструменты разработчика: Полное руководство по современным рабочим процессам.
Базовая структура конфигурации
Рабочие процессы GitHub Actions определяются в YAML-файлах, расположенных в директории .github/workflows внутри репозитория.
name: Workflow Name
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Run tests
run: npm test
- Блок on указывает события-триггеры.
- Каждая job выполняется на своем раннере (runner).
- steps могут выполнять команды оболочки или вызывать переиспользуемые действия.
Основные компоненты рабочего процесса
| Компонент | Описание |
|---|---|
| Workflow | Автоматизированный процесс (YAML), запускаемый событием |
| Event | Событие, запускающее рабочий процесс (push, pull_request и т.д.) |
| Job | Последовательность шагов, выполняемых на раннере, могут выполняться последовательно или параллельно |
| Step | Каждая команда или действие в задаче |
| Runner | ВМ или контейнер, где выполняются задачи |
| Action | Переиспользуемое расширение/дополнение, инкапсулирующее задачу |
События-триггеры
- push
- pull_request
- schedule (используя синтаксис cron)
- workflow_dispatch (ручной запуск, позволяет передавать входные параметры)
- release, issue и др.
Пример:
on:
push:
branches: [ main ]
workflow_dispatch:
inputs:
environment:
description: 'Deployment Environment'
required: true
default: 'production'
type: string
Полезные встроенные действия
| Действие | Назначение | Общие параметры |
|---|---|---|
| actions/checkout | Клонирование кода репозитория | ref, token, submodules, persist-credentials |
| actions/setup-node | Настройка окружения Node.js | node-version, cache, architecture, check-latest |
| actions/setup-python | Настройка Python | python-version, architecture |
| actions/cache | Кэширование зависимостей | path, key, restore-keys |
| docker/build-push-action | Сборка и публикация Docker-образов | context, file, platforms, tags, push, build-args |
| actions/upload-artifact | Загрузка артефактов сборки | name, path, if-no-files-found |
| actions/download-artifact | Скачивание артефактов | name, path |
| github/email-actions | Отправка email-уведомлений | to, subject, content, attachments |
| peter-evans/create-pull-request | Создание PR через рабочий процесс | branch, title, body, labels, base |
| actions/github-script | Выполнение произвольного JavaScript в рабочем процессе | script, github-token |
Параметры действий
Общие параметры для любого вызова действия:
- name: Some Action or Step
uses: owner/repo@ref
with:
param1: value
param2: value
env:
ENV_VAR: value
if: ${{ condition }}
run: command_to_run
shell: bash|pwsh|python|sh
continue-on-error: true|false
- with: аргументы, передаваемые действию (см. документацию действия для всех опций)
- env: переменные окружения для шага
- if: условное выполнение
- run: команды оболочки (если не используется действие)
- shell: оболочка, используемая для выполнения шага
- continue-on-error: продолжить выполнение даже если шаг завершился ошибкой
Определение пользовательских входных данных действия
В метаданных вашего действия (action.yml):
inputs:
example-input:
description: 'An example input'
required: false
default: 'default-value'
При использовании в рабочем процессе:
- uses: my/action@v1
with:
example-input: 'custom-value'
Доступно как переменная окружения INPUT_EXAMPLE_INPUT при выполнении действия.
Пример: Рабочий процесс с ручными параметрами
name: Deploy
on:
workflow_dispatch:
inputs:
environment:
description: 'Deployment Environment'
required: true
default: 'production'
type: string
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Deploy to environment
run: echo "Deploying to ${{ github.event.inputs.environment }}"
Маркетплейс действий
- Тысячи переиспользуемых действий доступны в Маркетплейсе GitHub.
- Категории включают: облачные развертывания, инструменты уведомлений, фреймворки тестирования, анализ кода и многое другое.
- Изучите: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact и многие другие.
Полезные советы
- Размещайте файлы рабочих процессов в
.github/workflows. - Используйте workflow_dispatch с inputs для ручного запуска с параметрами.
- Используйте действие cache для ускорения установки зависимостей.
- Используйте матрицу задач (matrix) для тестирования нескольких версий ОС и среды выполнения.
- Используйте секреты для конфиденциальных данных, ссылаясь на них как
${{ secrets.SECRET_NAME }}.
Данная шпаргалка охватывает основы использования, настройки и расширения GitHub Actions для автоматизации, CI/CD и других задач. Для получения дополнительной информации и обновлений всегда обращайтесь к официальной документации GitHub и репозиториям действий.
Распространенные действия GitHub Actions
Вот практический список часто используемых действий GitHub, которые помогают автоматизировать CI/CD, тестирование, сборку, развертывание и задачи рабочих процессов:
Основные официальные действия
| Действие | Назначение | Ключевые параметры |
|---|---|---|
| actions/checkout | Клонирование кода репозитория | ref, submodules |
| actions/setup-node | Настройка окружения Node.js | node-version, cache |
| actions/setup-python | Настройка окружения Python | python-version |
| actions/setup-java | Настройка Java JDK | distribution, java-version |
| actions/cache | Кэширование зависимостей и результатов сборки | path, key, restore-keys |
| actions/upload-artifact | Загрузка артефактов сборки | name, path |
| actions/download-artifact | Скачивание артефактов из рабочего процесса | name, path |
| actions/github-script | Выполнение JavaScript с использованием контекста GitHub и API | script |
| actions/create-release | Создание релиза GitHub | tag_name, release_name |
| actions/upload-release-asset | Загрузка файлов в релиз | upload_url, asset_path |
| actions/labeler | Автоматическое применение меток к issue/PR | repo-token, configuration-path |
Популярные общедоступные и сторонние действия
| Действие | Назначение |
|---|---|
| docker/build-push-action | Сборка и публикация Docker-образов |
| actions/setup-go | Настройка окружения Go |
| super-linter/super-linter | Универсальная автоматизированная линт-проверка |
| trufflesecurity/trufflehog | Сканирование на наличие секретов и учетных данных |
| peaceiris/actions-gh-pages | Развертывание статических сайтов на GitHub Pages |
| JamesIves/github-pages-deploy-action | Развертывание проектов на GitHub Pages |
| peter-evans/create-pull-request | Автоматическое создание запросов на слияние |
| softprops/action-gh-release | Создание и загрузка релизов GitHub |
| ad-m/github-push-action | Отправка изменений обратно в репозиторий GitHub |
| actions/setup-dotnet | Настройка .NET SDK |
| azure/login | Аутентификация в Azure |
| google-github-actions/auth | Аутентификация в Google Cloud |
Действия для тестирования, QA и отчетности
| Действие | Назначение |
|---|---|
| actions/setup-ruby | Настройка окружения Ruby |
| codecov/codecov-action | Загрузка отчетов о покрытии кода в Codecov |
| coverallsapp/github-action | Загрузка результатов покрытия в Coveralls |
| dorny/test-reporter | Прикрепление результатов тестов к проверкам GitHub |
| stefanzweifel/git-auto-commit-action | Автоматическая фиксация и отправка изменений файлов |
Действия для развертывания и уведомлений
| Действие | Назначение |
|---|---|
| appleboy/scp-action | Загрузка файлов с использованием SCP |
| SamKirkland/FTP-Deploy-Action | Развертывание файлов через FTP/FTPS |
| cypress-io/github-action | Запуск end-to-end тестов Cypress |
| slackapi/slack-github-action | Отправка сообщений в Slack |
| dawidd6/action-send-mail | Отправка email во время выполнения рабочего процесса |
Утилиты и управление рабочими процессами
| Действие | Назначение |
|---|---|
| peter-evans/repository-dispatch | Запуск внешних рабочих процессов репозитория |
| fregante/setup-git-user | Настройка учетных данных Git для коммитов |
| andymckay/labeler | Присвоение меток issue и PR на основе путей |
| actions/configure-pages | Настройка публикации на GitHub Pages |
| EndBug/add-and-commit | Добавление и коммит файлов в рамках рабочего процесса |
| dangoslen/changelog-enforcer | Проверка обновления changelog для PRs |
Как найти больше действий
Существует множество действий GitHub, которые позволяют автоматизировать рабочие процессы, такие как автоматическое тестирование, развертывание на продакшен, уведомления и интеграция с другими сервисами. В Маркетплейсе GitHub перечислены тысячи действий по категориям: тестирование, безопасность, развертывание, уведомления, качество кода и интеграции. Кураторские списки, такие как “Awesome Actions”, также отлично подходят для вдохновения и поиска.
Полезные ссылки
- https://docs.github.com/actions
- https://github.com/marketplace
- https://docs.github.com/en/actions/get-started/quickstart
- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
- Шпаргалка по Git
- Gitea - установка и тестирование
- Резервное копирование и восстановление сервера Gitea
- Использование Gitea Actions для развертывания сайта Hugo на AWS S3
- Gitflow: Шаги, альтернативы, плюсы и минусы
- DevOps с GitOps - Argo CD, Flux, Jenkins X, Weave GitOps и другие