Шпаргалка по GitHub Actions - стандартная структура и список наиболее полезных действий
Несколько слов о распространённых GitHub Actions и их структуре.
GitHub Actions — это платформа автоматизации и CI/CD внутри GitHub, используемая для сборки, тестирования и развертывания вашего кода на основе событий, таких как push, pull requests или по расписанию.
Помимо стандартного GitHub, вы можете использовать GitHub Actions на сервере Gitea с саморазвертыванием.
Это руководство охватывает структуру GitHub Actions, краткое описание и наиболее распространенные действия, используемые в открытых и коммерческих рабочих процессах. Действия охватывают официальные, сообщество и сторонние инструменты, поддерживающие автоматизацию от сборки и тестирования до развертывания, управления выпусками, QA и уведомлений.
Основная структура конфигурации
Рабочие процессы 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 выполняется на своем собственном раннере.
- steps могут запускать команды оболочки или вызывать повторно используемые действия.
Основные компоненты рабочего процесса
Компонент | Описание |
---|---|
Рабочий процесс | Автоматизированный процесс (YAML), запускаемый событием |
Событие | Деятельность, запускающая рабочий процесс (push, pull_request и т.д.) |
Задача | Последовательность шагов, выполняемых на раннере, может выполняться последовательно или параллельно |
Шаг | Каждая команда или действие в задаче |
Раннер | Виртуальная машина или контейнер, где выполняются задачи |
Действие | Повторно используемое расширение/дополнение, инкапсулирующее задачу |
События запуска
- 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 | Отправка уведомлений по электронной почте | 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 }}"
Marketplace действий
- Тысячи повторно используемых действий доступны в GitHub Marketplace.
- Категории включают: развертывание в облаке, инструменты уведомлений, фреймворки тестирования, анализ кода и многое другое.
- Исследуйте: 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 Actions, которые помогают автоматизировать 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 с использованием контекста и API GitHub | script |
actions/create-release | Создание релиза GitHub | tag_name, release_name |
actions/upload-release-asset | Загрузка ресурсов в релиз | upload_url, asset_path |
actions/labeler | Автоматическое применение меток к проблемам/ПР | 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 |
Действия тестирования, контроля качества и отчетности
Действие | Назначение |
---|---|
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 | Запуск тестов Cypress end-to-end |
slackapi/slack-github-action | Отправка сообщений в Slack |
dawidd6/action-send-mail | Отправка писем во время выполнения рабочих процессов |
Утилиты и управление рабочими процессами
Действие | Назначение |
---|---|
peter-evans/repository-dispatch | Запуск рабочих процессов внешних репозиториев |
fregante/setup-git-user | Настройка учетных данных Git для коммитов |
andymckay/labeler | Метки для проблем и запросов на слияние на основе путей |
actions/configure-pages | Настройка публикации на GitHub Pages |
EndBug/add-and-commit | Добавление и коммитирование файлов в рабочем процессе |
dangoslen/changelog-enforcer | Проверка, обновлен ли changelog для запросов на слияние |
Как найти больше
Существует множество GitHub Actions, которые позволяют автоматизировать рабочие процессы, такие как автоматическое тестирование, развертывание в продакшн, уведомления и интеграции с другими сервисами. GitHub Marketplace предоставляет тысячи действий в различных категориях, таких как тестирование, безопасность, развертывание, уведомления, контроль качества кода и интеграции. Курированные списки, такие как “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 Cheatsheet
- Gitea - установка и тестирование
- Резервное копирование и восстановление сервера Gitea
- Использование Gitea Actions для развертывания сайта Hugo на AWS S3
- Gitflow: шаги, альтернативы, преимущества и недостатки
- DevOps с GitOps - Argo CD, Flux, Jenkins X, Weave GitOps и другие