GitHub Actions — это мощный инструмент для автоматизации рабочих процессов прямо в вашем репозитории. Вместо ручного запуска тестов, сборки или деплоя, вы описываете workflow в YAML-файле, и GitHub делает всё за вас. Это как личный робот-помощник для разработчика, который работает по вашему расписанию или событию. Давайте разберемся, как это работает на практике, с конкретными примерами.
Что такое workflow и как его создать?
Workflow (рабочий процесс) — это автоматизированный процесс, который вы описываете в файле .github/workflows/имя_файла.yml. Он состоит из одного или нескольких заданий (jobs), которые, в свою очередь, содержат шаги (steps). Workflow может запускаться по событию (push, pull request), по расписанию (cron) или вручную.
Каждый workflow файл должен содержать как минимум три ключевых элемента: name (название), on (триггеры запуска) и jobs (задания).
Практические примеры workflow
Пример 1: Запуск тестов при каждом push
Самый распространенный сценарий — автоматический запуск тестового набора для проверки кода. Вот базовый пример для Node.js проекта:
name: Node.js CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm test
Этот workflow будет запускаться при каждом push в любую ветку и при создании pull request. Он проверяет код, устанавливает Node.js, зависимости и запускает тесты.
Пример 2: Сборка и публикация Docker-образа
Автоматизируем сборку Docker-образа и его публикацию в GitHub Container Registry при теге (релизе):
name: Build and Push Docker Image
on:
push:
tags:
- 'v*'
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
with:
push: true
tags: ghcr.io/${{ github.repository }}:latest
Секреты (secrets) — ключевой элемент безопасности. Никогда не храните пароли, токены или ключи прямо в коде workflow. Используйте настройки Secrets в репозитории.
Пример 3: Автоматический деплой на сервер
Допустим, у вас есть статический сайт, и вы хотите автоматически развертывать его на свой сервер по SSH после успешной сборки:
name: Deploy to Server
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build project
run: |
npm ci
npm run build
- name: Deploy via SSH
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/my-site
git pull origin main
npm ci --production
pm2 restart my-app
Продвинутые возможности
- Матрицы сборок (matrix): Запуск workflow на нескольких версиях ОС, языка или конфигурации одновременно.
- Кеширование зависимостей: Ускорение workflow за счет кеширования (например,
actions/cacheдля npm или pip). - Артефакты: Сохранение результатов сборки (бинарные файлы, логи) для последующего скачивания.
- Зависимости между заданиями (needs): Определение порядка выполнения jobs.
- Ручной запуск (workflow_dispatch): Возможность запустить workflow вручную через интерфейс GitHub с вводом параметров.
Лучшие практики
- Начинайте с простых workflow и постепенно усложняйте.
- Используйте официальные и проверенные actions из Marketplace.
- Всегда ограничивайте триггеры (
on), чтобы workflow не запускался без необходимости. - Разделяйте сложные workflow на несколько заданий для лучшей читаемости и параллельного выполнения.
- Используйте
ifусловия для контроля выполнения шагов.
FAQ: Часто задаваемые вопросы
Сколько стоит GitHub Actions?
Для публичных репозиториев и приватных репозиториев на бесплатном тарифе GitHub предоставляет 2000 минут выполнения в месяц (на Linux). Для приватных репозиториев на Pro и Team тарифах — 3000 минут.
Где хранятся секреты (secrets) и как их добавить?
Секреты хранятся в зашифрованном виде в настройках вашего репозитория или организации (Settings -> Secrets and variables -> Actions). Добавить их можно только через веб-интерфейс, они недоступны для чтения после сохранения.
Можно ли запускать workflow по расписанию?
Да, используя синтаксис cron в триггере schedule. Например: on: schedule: - cron: '0 2 * * *' (запуск каждый день в 2:00 UTC).
Как отладить упавший workflow?
Вся детальная информация о выполнении каждого шага доступна в логах на вкладке Actions вашего репозитория. Можно также использовать действие actions/toolkit для логирования.
Можно ли использовать self-hosted runners (свои серверы)?
Да, вы можете настроить свои собственные машины (runner) для выполнения workflow. Это полезно для специфического оборудования или требований безопасности.