Что такое 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# action.yml
 2name: 'Hello World'
 3description: 'Greet someone and record the time'
 4inputs:
 5  who-to-greet:
 6    description: 'Who to greet'
 7    required: true
 8    default: 'World'
 9outputs:
10  time:
11    description: 'The time we greeted you'
12runs:
13  using: 'node20'
14  main: 'index.js'
 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.