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.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
.github/workflows/ci.ymlon: push: branches: [main]| Сценарий | Конфиг |
|---|---|
| Simple Node.js CI | name: 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 SSH | deploy:
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 |
::add-mask:: или sensitive steps с if: env checkif: github.ref == 'refs/heads/main'Для настройки 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 с использованием 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 сначала выполняются тесты, и только после их успешного завершения происходит деплой на сервер. Используя такие настройки, вы можете автоматизировать процессы разработки и улучшить качество кода.
Для solo проекта — да. Team 5+ — иногда нужен Teams $4/user/мес или self-hosted runners.
Для private network access, unlimited minutes, GPU/ARM runners. Downside — maintenance + security (compromised runner = RCE в GitHub workflow).
Secrets — encrypted, not visible в logs. Env vars — plain, visible. Для tokens/passwords — всегда secrets.
GitHub Actions: free для GH repos, огромная marketplace actions, YAML. Jenkins: self-host, flexible но maintenance. GitLab CI: tight GitLab integration. Для GitHub — Actions default.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.