Skip to content
EN

Как настроить CI/CD в GitHub Actions

Коротко:

GitHub Actions — встроенный CI/CD в GitHub (free 2000 min/мес для private repos, unlimited для public). Workflow = YAML файл в .github/workflows/. Triggers: push, pull_request, schedule (cron), manual. Runners: ubuntu-latest, macos-latest, windows-latest. Deploy через SSH + rsync, docker push, Vercel/Netlify integrations. Secrets хранятся в repo settings.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Проверить свой сайт →

Пошаговая настройка

  1. Создайте .github/workflows/ci.yml
  2. Определите trigger: on: push: branches: [main]
  3. Define jobs с runs-on + steps (checkout, setup-node, npm install, test)
  4. Для deploy: secrets (SSH_KEY, DEPLOY_HOST) в repo Settings → Secrets
  5. Deploy step: appleboy/ssh-action или rsync + SSH
  6. Commit + push — workflow запускается автоматически
  7. Results: Actions tab в GitHub, logs per step, artifacts

Рабочие примеры

СценарийКонфиг
Simple Node.js CIname: CI on: push: { branches: [main] } pull_request: jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: '20' } - run: npm ci - run: npm test
Deploy via SSHdeploy: needs: test runs-on: ubuntu-latest steps: - uses: appleboy/ssh-action@v1 with: host: ${{ secrets.DEPLOY_HOST }} username: deploy key: ${{ secrets.SSH_PRIVATE_KEY }} script: cd /var/www && git pull && npm install --production && pm2 reload all
Matrix build (multi Node version)strategy: matrix: node: [18, 20, 22] steps: - uses: actions/setup-node@v4 with: { node-version: ${{ matrix.node }} }
Docker build + push- uses: docker/build-push-action@v5 with: push: true tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
Scheduled workflow (cron)on: schedule: - cron: '0 2 * * *' # daily at 2 AM UTC

Типичные ошибки

  • Secrets printed in logs — используйте ::add-mask:: или sensitive steps с if: env check
  • Free tier — 2000 min для private repos. Build 10 min × 200 runs = limit
  • Cache важно: actions/cache@v4 с proper key — иначе npm install каждый раз 1 мин
  • Ubuntu runners обновляются — test на конкретной version (ubuntu-22.04, not ubuntu-latest для prod)
  • Deploy step запускается на каждый push — add if: github.ref == 'refs/heads/main'

Как настроить CI/CD в GitHub Actions

Для настройки CI/CD в GitHub Actions вам необходимо создать файл конфигурации в директории .github/workflows вашего репозитория. В этом файле вы определяете триггеры для запуска процессов, шаги для сборки и тестирования вашего приложения, а также действия для деплоя. Например, для проекта на Node.js это может выглядеть так:

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'
      - name: Install dependencies
        run: npm install
      - name: Run tests
        run: npm test
      - name: Deploy
        run: npm run deploy

Этот файл запускает процесс сборки и тестирования при каждом пуше в ветку main.

Практический пример настройки CI/CD для проекта на Python

Рассмотрим пример настройки CI/CD для проекта на Python с использованием GitHub Actions. Для этого создадим файл python-ci.yml в директории .github/workflows. В этом файле мы определим этапы, необходимые для проверки кода и его деплоя на сервер.

name: Python CI

on:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.8'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - name: Run tests
        run: |
          python -m unittest discover

  deploy:
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Deploy to Server
        run: |
          ssh user@yourserver.com 'cd /path/to/your/app && git pull && systemctl restart yourapp.service'

В этом примере при каждом пуше в ветку main сначала выполняются тесты, и только после их успешного завершения происходит деплой на сервер. Используя такие настройки, вы можете автоматизировать процессы разработки и улучшить качество кода.

Больше по теме

Часто задаваемые вопросы

Free tier достаточно?

Для solo проекта — да. Team 5+ — иногда нужен Teams $4/user/мес или self-hosted runners.

Self-hosted runners — зачем?

Для private network access, unlimited minutes, GPU/ARM runners. Downside — maintenance + security (compromised runner = RCE в GitHub workflow).

Secrets vs env vars?

Secrets — encrypted, not visible в logs. Env vars — plain, visible. Для tokens/passwords — всегда secrets.

GitHub Actions vs Jenkins/GitLab CI?

GitHub Actions: free для GH repos, огромная marketplace actions, YAML. Jenkins: self-host, flexible но maintenance. GitLab CI: tight GitLab integration. Для GitHub — Actions default.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.