01
Структурируйте infra-репозиторий
Разделите переиспользуемые модули и production-окружения по отдельным директориям.
Используйте Bullionet как execution layer для GitOps и CI/CD flows, от provisioning до rollout policy.
CI workflow (copy/paste)
bulli init
source <(bulli env --output sh)
terraform plan -var-file=prod-fr1.tfvars
terraform apply -auto-approve -var-file=prod-fr1.tfvars
bulli server list --output json
Используйте практичную базу: структура репозитория, CI workflow и post-deploy проверки.
01
Разделите переиспользуемые модули и production-окружения по отдельным директориям.
02
Добавьте BULLI_TOKEN и Terraform variables в CI, а production защитите approval-шагом.
03
Запускайте plan на pull request, а apply только на main после ревью.
04
Запускайте verify-скрипт для проверки inventory, статуса хостов и здоровья rollout.
Рекомендуемые переменные и guardrails
•CI secret: BULLI_TOKEN только с правами на provisioning-действия.
•Protected environment: обязательный production approval перед apply.
•Обязательная post-deploy проверка перед green-статусом pipeline.
Минимальная структура репозитория
infra/
modules/
server-group/
main.tf
variables.tf
envs/
prod-fr/
main.tf
prod-fr1.tfvars
scripts/
verify.sh
.github/
workflows/
infra-prod.yml
CI workflow (copy/paste)
name: infra-prod
on:
pull_request:
paths: ["infra/**"]
push:
branches: [main]
paths: ["infra/**"]
workflow_dispatch:
jobs:
plan:
runs-on: ubuntu-latest
env:
BULLI_TOKEN: $BULLI_TOKEN
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- run: bulli init --token "$BULLI_TOKEN"
- run: terraform -chdir=infra/envs/prod-fr init
- run: terraform -chdir=infra/envs/prod-fr plan -out=tfplan -var-file=prod-fr1.tfvars
apply:
if: github.ref == 'refs/heads/main'
needs: plan
runs-on: ubuntu-latest
environment: production
env:
BULLI_TOKEN: $BULLI_TOKEN
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- run: bulli init --token "$BULLI_TOKEN"
- run: terraform -chdir=infra/envs/prod-fr apply -auto-approve -var-file=prod-fr1.tfvars
- run: ./scripts/verify.sh
Скрипт post-deploy проверки
#!/usr/bin/env bash
set -euo pipefail
bulli server list --output json | jq '.[] | {hostname,status,location}'
bulli server get --hostname api-fr1-01
bulli server get --hostname api-fr1-02
bulli server get --hostname api-fr1-03
Работайте с инфраструктурой как с продуктовым кодом: branch, pull request, автоматический plan, human approval и защищённый apply.
Конкретный пример workflow
# 1) Create branch for infra change
git checkout -b infra/prod-api-green-rollout
# 2) Update environment variables and rollout target
$EDITOR infra/envs/prod-fr/prod-fr1.tfvars
git add infra/envs/prod-fr/prod-fr1.tfvars
git commit -m "infra(prod-fr): add green API nodes for release 2026-02"
git push -u origin infra/prod-api-green-rollout
# 3) Open PR -> CI runs terraform plan (no production apply)
# 4) Review plan output + approve PR
# 5) Merge to main -> protected apply job starts with production approval
# 6) Post-deploy verification
./scripts/verify.sh
Команды доставляют infra-изменения через pull requests, а не через медленные и фрагментированные handoff.
Plan выполняется до merge, apply защищён, а rollback-цели остаются явными на каждом этапе rollout.
У каждого изменения есть branch, commit, review и execution trace для compliance и post-incident анализа.
В каждой процедуре: небольшой scope, явная валидация и рабочий rollback.
01
Нужно выкатить API-релиз без мгновенного риска для production.
•Поднимите green-ноды с release tags в той же локации, что и текущие blue-ноды.
•Прогоните health checks (boot, SSH, app endpoint) и проверьте результаты в CI.
•Подтверждайте cutover только после успешных checks и доступного rollback.
Ожидаемый результат: контролируемый релиз с прозрачным rollback-путём.
02
Одна worker-нода нестабильна и требует быстрой замены без импровизации.
•Считайте метаданные source-ноды (plan, location, tags) и подготовьте профиль replacement.
•Provision replacement-ноды и подтвердите readiness до переключения трафика.
•Сделайте drain старой ноды, переключите трафик и зафиксируйте incident summary.
Ожидаемый результат: деградировавшая нода заменена с минимальным влиянием на сервис.
03
Batch-ёмкость нужна только в рабочие часы, с предсказуемыми расходами.
•Таргетируйте только weekday-ноды в разрешённом project scope.
•Запускайте power-on/power-off по расписанию и проверяйте состояние после каждого шага.
•Ежедневно анализируйте capacity/cost deltas и отмечайте аномалии для human review.
Ожидаемый результат: предсказуемая batch-доступность и контролируемые затраты.
Создавайте воспроизводимые окружения и уверенно доставляйте изменения по всему lifecycle инфраструктуры.
Создавайте и изменяйте инфраструктуру декларативно для воспроизводимых окружений.
Продвигайте изменения по окружениям через явные и проверяемые workflow steps.
Интегрируйте lifecycle actions в пайплайны с машиночитаемым выводом.
Применяйте progressive deployment логику и держите production изменения предсказуемыми.
Используйте эти команды как базовые блоки в release-пайплайнах и контролируемых изменениях.
bulli initИнициализация execution context
Задайте CLI context перед pipeline-действиями.
source <(bulli env --output sh)Загрузка environment variables
Подключите auth и project context для automation jobs.
bulli server list --output jsonПроверка inventory
Получайте server list в JSON и валидируйте в CI checks.
bulli server reboot --hostname edge-worker-03Плановый reboot
Запускайте контролируемый reboot в rollout-окнах.
bulli server reinstall --hostname edge-worker-03 --os ubuntu-24.04Recovery reinstall
Быстро пересоберите ноду с чистой OS-базы.
Простая и надёжная последовательность, соответствующая ежедневной DevOps-операционке.
Пример инфраструктурного pipeline
# prod-fr1.tfvars
# plan = \"bm.performance\"
# location = \"paris\"
# hostname_prefix = \"api-fr1\"
terraform plan -var-file=prod-fr1.tfvars
terraform apply -auto-approve -var-file=prod-fr1.tfvars
bulli server list --output json
bulli server get --hostname api-fr1-01
Используйте scoped access и operational checks для безопасной автоматизации в масштабе.
Ограничивайте права токенов по окружению и назначению.
Сохраняйте аудит deployment и operational изменений.
Автоматизируйте агрессивно, сохраняя чёткие operational boundaries.
Полезные ссылки
Решения