Шпаргалка по GitHub Actions - стандартная структура и список наиболее полезных действий

Несколько слов о распространённых GitHub Actions и их структуре.

Содержимое страницы

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

Помимо стандартного GitHub, вы можете использовать GitHub Actions на сервере Gitea с саморазвертыванием.

github actions flow

Это руководство охватывает структуру 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”, также отлично подходят для вдохновения и открытия новых возможностей.

Полезные ссылки