Что такое GitHub Actions?
GitHub Actions — это платформа автоматизации рабочих процессов, встроенная в GitHub. Она позволяет создавать, тестировать и развертывать код прямо из репозитория GitHub, используя event-driven подход к автоматизации.
Основные возможности GitHub Actions
- Event-driven — запуск по различным событиям GitHub
- Matrix builds — тестирование на множественных конфигурациях
- Marketplace — тысячи готовых действий
- Secrets management — безопасное хранение секретов
- Multi-platform — поддержка Linux, macOS, Windows
- Container support — запуск в Docker контейнерах
- Self-hosted runners — собственные исполнители
Создание Workflow
1# .github/workflows/ci.yml
2name: CI Pipeline
3
4on:
5 push:
6 branches: [ main, develop ]
7 pull_request:
8 branches: [ main ]
9
10jobs:
11 test:
12 runs-on: ubuntu-latest
13
14 strategy:
15 matrix:
16 python-version: [3.8, 3.9, '3.10', '3.11']
17
18 steps:
19 - uses: actions/checkout@v4
20
21 - name: Set up Python ${{ matrix.python-version }}
22 uses: actions/setup-python@v4
23 with:
24 python-version: ${{ matrix.python-version }}
25
26 - name: Cache pip dependencies
27 uses: actions/cache@v3
28 with:
29 path: ~/.cache/pip
30 key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
31 restore-keys: |
32 ${{ runner.os }}-pip-
33
34 - name: Install dependencies
35 run: |
36 python -m pip install --upgrade pip
37 pip install -r requirements.txt
38 # Или с poetry: pip install poetry && poetry install
39
40 - name: Run tests
41 run: |
42 pytest --cov=app tests/
43
44 - name: Upload coverage reports
45 uses: codecov/codecov-action@v3
46 with:
47 token: ${{ secrets.CODECOV_TOKEN }}
48
49 build-and-deploy:
50 needs: test
51 runs-on: ubuntu-latest
52 if: github.ref == 'refs/heads/main'
53
54 steps:
55 - uses: actions/checkout@v4
56
57 - name: Set up Docker Buildx
58 uses: docker/setup-buildx-action@v3
59
60 - name: Login to Docker Hub
61 uses: docker/login-action@v3
62 with:
63 username: ${{ secrets.DOCKER_USERNAME }}
64 password: ${{ secrets.DOCKER_PASSWORD }}
65
66 - name: Build and push
67 uses: docker/build-push-action@v5
68 with:
69 context: .
70 push: true
71 tags: myapp:latest
72 cache-from: type=gha
73 cache-to: type=gha,mode=max
Популярные Actions
- actions/checkout — получение кода репозитория
- actions/setup-python — настройка Python окружения
- actions/setup-node — настройка Node.js
- docker/build-push-action — сборка Docker образов
- actions/cache — кеширование зависимостей
- codecov/codecov-action — отправка coverage отчетов
- peaceiris/actions-gh-pages — деплой на GitHub Pages
Создание собственного Action
1// index.js
2const core = require('@actions/core');
3const github = require('@actions/github');
4
5try {
6 const nameToGreet = core.getInput('who-to-greet');
7 console.log(`Hello ${nameToGreet}!`);
8
9 const time = (new Date()).toTimeString();
10 core.setOutput("time", time);
11
12 const payload = JSON.stringify(github.context.payload, undefined, 2);
13 console.log(`The event payload: ${payload}`);
14} catch (error) {
15 core.setFailed(error.message);
16}
Работа с секретами
1# Использование секретов
2steps:
3 - name: Deploy to production
4 env:
5 API_KEY: ${{ secrets.API_KEY }}
6 DATABASE_URL: ${{ secrets.DATABASE_URL }}
7 run: |
8 echo "Deploying with API key: ${API_KEY:0:4}****"
9
10 - name: Configure AWS credentials
11 uses: aws-actions/configure-aws-credentials@v4
12 with:
13 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
14 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
15 aws-region: us-east-1
Self-hosted runners
1# Установка self-hosted runner
2mkdir actions-runner && cd actions-runner
3curl -o actions-runner-linux-x64-2.311.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.311.0/actions-runner-linux-x64-2.311.0.tar.gz
4tar xzf ./actions-runner-linux-x64-2.311.0.tar.gz
5
6# Конфигурация
7./config.sh --url https://github.com/your-org/your-repo --token YOUR_TOKEN
8
9# Запуск как сервис
10sudo ./svc.sh install
11sudo ./svc.sh start
Когда использовать GitHub Actions
- Проекты размещены на GitHub
- Нужна простая настройка CI/CD
- Важна интеграция с GitHub экосистемой
- Требуется event-driven автоматизация
- Малые и средние команды
- Open source проекты (бесплатные минуты)
Преимущества GitHub Actions
- Простота — легкая настройка и использование
- Интеграция — глубокая интеграция с GitHub
- Marketplace — огромная экосистема готовых действий
- Бесплатные минуты — для публичных репозиториев
- Matrix builds — тестирование на множественных конфигурациях
- Event-driven — реакция на любые события GitHub
Ограничения GitHub Actions
- Привязка к GitHub платформе
- Ограничения на время выполнения (6 часов на job)
- Стоимость для private репозиториев
- Меньше flexibility по сравнению с Jenkins
- Ограниченная поддержка on-premise
Альтернативы GitHub Actions
- GitLab CI/CD — для проектов на GitLab
- Jenkins — для сложных enterprise сценариев
- Azure Pipelines — в экосистеме Microsoft
- CircleCI — специализированная CI/CD платформа
- Travis CI — для open source проектов
Best Practices
- Используй официальные actions когда возможно
- Кешируй зависимости для ускорения сборок
- Настрой правильные triggers для экономии минут
- Используй matrix strategy для тестирования
- Храни секреты в GitHub Secrets
- Версионируй свои custom actions
FAQ
Подходит ли GitHub Actions для продакшена?
Да, GitHub Actions широко используется в production средах и зарекомендовал себя как надежное решение. Используется компаниями как Microsoft, Spotify, Netflix.
Какие требования к инфраструктуре?
Для GitHub-hosted runners требований нет. Для self-hosted runners зависит от нагрузки, но минимально достаточно 2GB RAM и 14GB дискового пространства.
Сколько стоит GitHub Actions?
Для публичных репозиториев — бесплатно. Для private: включены минуты в зависимости от плана, дополнительные минуты $0.008/минута для Linux.