Введение
Настройка CI/CD пайплайнов — это рутина, которая может отнимать часы, если делать её вручную. Промты (prompts) для AI-инструментов, таких как ChatGPT, Claude или Gemini, ускоряют процесс: достаточно описать задачу, и нейросеть генерирует готовый YAML-файл для GitHub Actions, GitLab CI или конфигурацию для ArgoCD. В этой подборке — 10 проверенных промтов, которые я использую сам. Они сэкономят вам время и помогут избежать типичных ошибок. Все примеры основаны на официальной документации (GitHub Docs, GitLab Docs, ArgoCD Docs) и реальных кейсах.
1. Универсальный промт для GitHub Actions: деплой на VPS через SSH
Задача: Создать CI/CD пайплайн, который при пуше в ветку main запускает тесты, собирает Docker-образ и деплоит его на удалённый сервер по SSH.
Промт:
Сгенерируй YAML-файл для GitHub Actions. Триггер: push в main. Шаги:
1. Установка зависимостей (npm install).
2. Запуск тестов (npm test).
3. Сборка Docker-образа с тегом latest.
4. Пуш образа в Docker Hub (логин и пароль — секреты DOCKER_USERNAME и DOCKER_PASSWORD).
5. Деплой на VPS через SSH: скопировать docker-compose.yml, выполнить docker-compose pull && docker-compose up -d.
Используй actions/checkout@v4, actions/setup-node@v4, docker/login-action@v3, appleboy/ssh-action@v1.0.3.
Пример использования:
name: Deploy to VPS
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install
- run: npm test
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- run: docker build -t myapp:latest .
- run: docker push myapp:latest
- uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/myapp
docker-compose pull
docker-compose up -d
Совет: Замените myapp на имя вашего проекта. Секреты (SSH_KEY, HOST, USERNAME) добавьте в Settings → Secrets and variables → Actions.
2. GitLab CI: параллельные тесты и артефакты
Задача: Настроить пайплайн в GitLab CI с параллельными джобами для тестирования на Node.js 18 и 20, сохранением артефактов и деплоем на GitLab Pages.
Промт:
Создай .gitlab-ci.yml для проекта на Node.js. Этапы:
- test: два параллельных джоба (node:18 и node:20), каждая запускает npm install и npm test.
- build: собирает статику в папку public (npm run build).
- deploy: публикует public на GitLab Pages, только для ветки main.
Используй image: node:18-alpine и node:20-alpine. Для деплоя — pages:stage.
Пример вывода (сокращённый):
image: node:18-alpine
stages:
- test
- build
- deploy
test:node18:
stage: test
script:
- npm install
- npm test
parallel:
matrix:
- NODE_IMAGE: node:18-alpine
test:node20:
image: node:20-alpine
stage: test
script:
- npm install
- npm test
build:
stage: build
script:
- npm install
- npm run build
artifacts:
paths:
- public
pages:
stage: deploy
script:
- mv public public_html
artifacts:
paths:
- public_html
only:
- main
Примечание: GitLab Pages автоматически деплоит содержимое папки public_html. Подробнее — в официальной документации GitLab CI.
3. ArgoCD: синхронизация приложения из Helm-чарта
Задача: Создать Application-ресурс для ArgoCD, который будет синхронизировать микросервис из Helm-чарта в приватном Git-репозитории на кластер Kubernetes.
Промт:
Сгенерируй YAML-манифест для ArgoCD Application. Параметры:
- имя: my-microservice
- проект: default
- источник: Git-репозиторий https://github.com/myorg/helm-charts.git, путь charts/my-microservice, ревизия main.
- целевой кластер: https://kubernetes.default.svc (in-cluster).
- namespace: production.
- syncPolicy: автоматическая синхронизация с prune=true и selfHeal=true.
- Helm-параметры: image.tag=latest, replicaCount=3.
Пример вывода:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-microservice
spec:
project: default
source:
repoURL: https://github.com/myorg/helm-charts.git
targetRevision: main
path: charts/my-microservice
helm:
parameters:
- name: image.tag
value: latest
- name: replicaCount
value: "3"
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
Важно: Убедитесь, что ArgoCD имеет доступ к репозиторию через SSH-ключ или токен. Настройки подключения — в Settings → Repositories.
4. GitHub Actions: мульти-осевой тест с матрицей
Задача: Запустить тесты на трёх ОС (ubuntu, windows, macos) и двух версиях Python (3.10, 3.11).
Промт:
Создай workflow для GitHub Actions с матрицей: os: [ubuntu-latest, windows-latest, macos-latest], python-version: ['3.10', '3.11']. Шаги: checkout, setup-python, pip install -r requirements.txt, pytest. Назови джобу 'test'.
Пример вывода:
name: Multi-OS Tests
on: [push]
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: pip install -r requirements.txt
- run: pytest
Совет: Если тесты долгие, используйте fail-fast: false, чтобы не прерывать все комбинации при ошибке в одной.
5. GitLab CI: кастомные образы и кэширование
Задача: Использовать кастомный Docker-образ из GitLab Container Registry и включить кэширование зависимостей для ускорения билдов.
Промт:
Настрой .gitlab-ci.yml: образ — registry.gitlab.com/mygroup/myimage:latest, кэш — node_modules, этапы: lint (eslint), test (jest), build (webpack). Кэш сохраняй на одну ветку.
Пример вывода:
image: registry.gitlab.com/mygroup/myimage:latest
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- node_modules/
stages:
- lint
- test
- build
lint:
stage: lint
script:
- eslint .
test:
stage: test
script:
- jest --coverage
build:
stage: build
script:
- webpack --mode production
artifacts:
paths:
- dist/
Примечание: Кэширование сокращает время пайплайна на 40–60% (данные из блога GitLab — «CI/CD cache best practices»).
6. ArgoCD: авторизация через OIDC и RBAC
Задача: Настроить ArgoCD для входа через Google OIDC и ограничить доступ по ролям (админ, разработчик, читатель).
Промт:
Сгенерируй конфигурацию argocd-cm для OIDC с Google: clientId, clientSecret, issuer URL. Дополнительно — RBAC-политику в argocd-rbac-cm: админ имеет полный доступ, разработчик — синхронизацию и просмотр, читатель — только просмотр.
Пример вывода (сокращённый):
# argocd-cm.yaml
data:
url: https://argocd.example.com
oidc.config: |
name: Google
issuer: https://accounts.google.com
clientID: $ARGOCD_OIDC_CLIENT_ID
clientSecret: $ARGOCD_OIDC_CLIENT_SECRET
requestedIDTokenClaims:
groups:
essential: true
requestedScopes:
- openid
- profile
- email
- groups
# argocd-rbac-cm.yaml
data:
policy.default: role:readonly
policy.csv: |
p, role:admin, applications, *, */*, allow
p, role:developer, applications, sync, */*, allow
p, role:developer, applications, get, */*, allow
g, [email protected], role:admin
g, [email protected], role:developer
Важно: Замените $ARGOCD_OIDC_CLIENT_ID и $ARGOCD_OIDC_CLIENT_SECRET на реальные значения из Google Cloud Console.
7. GitHub Actions: автоматический релиз с changelog
Задача: При пуше тега вида v* создать GitHub Release, сгенерировать changelog из коммитов и прикрепить собранный бинарник.
Промт:
Создай workflow: триггер push tags 'v*'. Шаги: checkout, сборка бинарника (go build -o myapp), создание релиза с changelog из коммитов между последними двумя тегами, загрузка myapp как артефакта.
Используй softprops/action-gh-release@v2 для релиза.
Пример вывода:
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: go build -o myapp .
- name: Generate Changelog
id: changelog
run: |
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
if [ -z "$PREV_TAG" ]; then
echo "changelog=Initial release" >> $GITHUB_ENV
else
LOG=$(git log $PREV_TAG..HEAD --oneline --format="* %s")
echo "changelog<<EOF" >> $GITHUB_ENV
echo "$LOG" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
fi
- uses: softprops/action-gh-release@v2
with:
body: ${{ env.changelog }}
files: myapp
Совет: Для более продвинутого changelog используйте git-cliff или conventional-changelog-action.
8. GitLab CI: безопасность через SAST и DAST
Задача: Встроить сканирование безопасности SAST (Semgrep) и DAST (OWASP ZAP) в пайплайн.
Промт:
Добавь в .gitlab-ci.yml стадии sast и dast. SAST: используй semgrep/semgrep:latest, сканируй папку src. DAST: используй owasp/zap2docker-stable, просканируй staging-окружение https://staging.example.com.
Пример вывода:
stages:
- sast
- dast
sast:
stage: sast
image: returntocorp/semgrep
script:
- semgrep --config=auto src/
artifacts:
reports:
sast: gl-sast-report.json
dast:
stage: dast
image: owasp/zap2docker-stable
script:
- zap-baseline.py -t https://staging.example.com -r dast-report.html
artifacts:
paths:
- dast-report.html
Важно: SAST-отчёты автоматически отображаются в GitLab Security Dashboard, если настроен GitLab Ultimate.
9. ArgoCD: канареечный деплой с анализом метрик
Задача: Настроить канареечное развёртывание (canary deployment) с постепенным увеличением трафика, используя AnalysisTemplate для проверки метрик Prometheus.
Промт:
Создай AnalysisTemplate для ArgoCD Rollout: метрика из Prometheus — success_rate (доля успешных запросов), порог 95%. И Application с canary-стратегией: шаги — 10% трафика на 5 минут, затем 50% на 5 минут, затем 100%.
Пример вывода (сокращённый):
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: success-rate
spec:
metrics:
- name: success-rate
successCondition: result >= 0.95
provider:
prometheus:
query: |
sum(rate(http_requests_total{status=~"2.."}[5m])) / sum(rate(http_requests_total[5m]))
---
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: myapp-rollout
spec:
strategy:
canary:
steps:
- setWeight: 10
- pause: {duration: 5m}
- setWeight: 50
- pause: {duration: 5m}
- setWeight: 100
analysis:
templates:
- templateName: success-rate
Примечание: ArgoCD Rollouts — отдельный контроллер, его нужно установить отдельно. Подробнее — в официальной документации Argo Rollouts.
10. GitHub Actions: декларативный деплой через ArgoCD CLI
Задача: Использовать GitHub Actions для обновления образа в Helm-чарте и триггера синхронизации ArgoCD.
Промт:
Создай workflow: после сборки образа обнови значение image.tag в values.yaml Helm-чарта, закоммить и запушь в репозиторий, затем запусти синхронизацию через argocd CLI (команда argocd app sync myapp).
Пример вывода:
name: Deploy via ArgoCD
on:
push:
branches: [main]
jobs:
update-and-sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
sed -i 's/tag: .*/tag: latest/' helm/myapp/values.yaml
git config user.name "CI"
git config user.email "[email protected]"
git add helm/myapp/values.yaml
git commit -m "Update image tag"
git push
- name: Sync ArgoCD
env:
ARGOCD_SERVER: ${{ secrets.ARGOCD_SERVER }}
ARGOCD_AUTH_TOKEN: ${{ secrets.ARGOCD_TOKEN }}
run: |
argocd login $ARGOCD_SERVER --grpc-web --auth-token $ARGOCD_AUTH_TOKEN
argocd app sync myapp --grpc-web
Совет: Токен для ArgoCD можно получить через argocd account generate-token. Храните его в секретах GitHub.
Заключение
Эти 10 промтов покрывают 90% типовых задач CI/CD: от простого деплоя на VPS до канареечных релизов с анализом метрик. Копируйте их, адаптируйте под свои проекты и не забывайте проверять сгенерированный код — AI иногда ошибается в синтаксисе. Если вы хотите углубиться в тему, рекомендую изучить официальные репозитории GitHub Actions (github.com/actions), документацию GitLab CI (docs.gitlab.com/ee/ci/) и ArgoCD (argo-cd.readthedocs.io).
Попробуйте применить один из промтов прямо сейчас — это сэкономит вам час ручной настройки. Делитесь результатами в комментариях!
Комментарии