Hook
Хочеш, щоб код автоматично проходив тести, збирався в образ і безпечно потрапляв у продакшн без твоєї постійної участі? CI/CD pipelines – це ваш робот‑помічник.
Problem / Context
Без автоматизації кожен пуш вимагає ручного запуску тестів, збірки, розгортання. Це уповільнює розробку, створює людські помилки та ризик інцидентів у продакшн.
Why it matters
Автоматичний pipeline підвищує швидкість доставки (speed‑to‑market), надійність (мінімізує людський фактор) і прозорість (логі та статуси завжди доступні).
How to do it
1. Оберіть інструмент
- GitHub Actions – вбудований у GitHub, простий у налаштуванні (
.github/workflows/*.yml). - GitLab CI – аналогічний підхід, файл
.gitlab-ci.yml. - Jenkins – самостійний сервер, підходить для складних середовищ.
2. Створіть простий pipeline (GitHub Actions приклад)
name: CI/CD Pipeline
on:
push:
branches: [ main ]
jobs:
test-build-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build Docker image
run: |
docker build -t myapp:${{ github.sha }} .
- name: Push image to registry
run: |
echo ${{ secrets.REGISTRY_TOKEN }} | docker login -u ${{ secrets.REGISTRY_USER }} --password-stdin
docker push myapp:${{ github.sha }}
- name: Deploy to staging
run: |
ssh ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} "docker pull myapp:${{ github.sha }} && docker compose up -d"
3. Тестування та валідація
- Переконайтесь, що кожен крок повертає exit code 0.
- Додайте artifact‑збирач (
actions/upload-artifact) для логів тестів.
4. Ізоляція
- Запускайте кожен job у docker‑контейнері або VM (GitHub provides
ubuntu-latest). - Уникайте глобальних залежностей між кроками.
5. Автоматичний rollback
- Додайте окремий job
rollbackз умовоюif: failure(); - У цьому job виконуйте скрипт, який повертає попередню стабільну версію (
kubectl rollout undo).
Anti‑patterns
- Інтеграція без тестів – pipeline успішний, але код не працює.
- Не використовувати
latestтег Docker‑образу – вказуйте конкретну версію, щоб уникнути несподіваних змін. - hard‑coded secrets у yaml‑файлі (використовуйте GitHub Secrets / Vault).
- Запуск pipeline на кожен коміт без фільтрації (використовуйте
paths/branches). - Довгі монолітні jobs – ускладнює діагностику, розбивайте на атомарні кроки.
Conclusion / Action plan
- Виберіть CI‑інструмент і додайте базовий workflow‑файл.
- Додайте кроки тестування, збірки, деплою.
- Налаштуйте секрети через GitHub Secrets або Vault.
- Реалізуйте rollback‑job на випадок провалу.
- Переглядайте статуси у UI і постійно вдосконалюйте pipeline.
- Регулярно переглядайте та оновлюйте workflow, щоб він відповідав новим вимогам.