Перейти до вмісту

Деплой-пайплайн

Огляд того, як код потрапляє в прод. Кожен сервіс має свій механізм — не один монолітний CI/CD.

Основа prod-деплою для AWS-сервісів.

PipelineЩо деплоїтьTarget
abitly-prod-backendAbitly APIECS Fargate cluster abitly-prod-backend
abitly-prod-frontendAbitly WebECS Fargate cluster abitly-prod-frontend
abitly-prod-strapiStrapiEC2 abitly-prod-strapi
studsearch-prod-backendStudsearch backendElastic Beanstalk env studsearch-prod-env
abitly-dev-backenddev backendEC2 abitly-dev-backend

Source: AWS CodeStarSourceConnection → GitHub abitly-org/<repo>main.

Тригер: DetectChanges: false — push не запускає pipeline автоматично. Запуск зовнішній (manual через console / зовнішній webhook / aws codepipeline start-pipeline-execution).

Артефакти — у відповідних S3 *-pipeline-* buckets.

flowchart LR
    gh[GitHub<br/>main branch] -- "manual trigger" --> cp[CodePipeline]
    cp -- Source --> codestar[CodeStarSourceConnection]
    cp -- Build --> cb[CodeBuild<br/>docker build]
    cb -- push image --> ecr[ECR<br/>abitly/*]
    cp -- Deploy --> target[ECS service /<br/>EC2 / EB]

Окремий механізм для zero-code-change прод-релізу: треба змінити env var — і ECS-сервіс рестартується.

flowchart LR
    cli[aws ssm put-parameter<br/>/abitly/prod/&lt;scope&gt;/&lt;key&gt;] --> eb[EventBridge rule]
    eb --> lambda[Lambda<br/>abitly-prod-ssm-redeploy]
    lambda -- ForceNewDeployment --> ecs[ECS service rolling restart]

Lambda abitly-prod-ssm-redeploy (python3.12) слухає Parameter Store Change події на /abitly/prod/* та форсить ECS rolling deployment відповідного сервісу.

Аналогічні Lambda для dev:

  • abitly-dev-amplify-sync — SSM → Amplify env vars
  • abitly-dev-amplify-rebuildaws amplify start-job для rebuild
  • abitly-dev-backend-restart — restart dev EC2

Amplify (frontend dev + studsearch prod + mission-control)

Section titled “Amplify (frontend dev + studsearch prod + mission-control)”
Amplify appЩо деплоїтьTrigger
abitly-dev-frontend (d3sx9l6zmir3cj)Abitly Web devwebhook GitHub push у main
studsearch-prod-frontend (d2v17dlr0oszkz)Studsearch Webwebhook GitHub push у master
mission-control (d20u1cpb84fbv3)internal admin panelauto-deploy

WEB_COMPUTE платформа = Next.js SSR (Amplify SSR runtime, не Lambda@Edge статично).

СервісТригер
Telegram Botpush у abitly-tg-bot-v2 / main
Telegram Webapppush у abitly-telegram-webapp / main

Railway сам спостерігає за репо (без CodeStar) — після push автоматично build & deploy.

Відкат — за платформою

Section titled “Відкат — за платформою”
ПлатформаКоманда
ECS Fargateaws ecs update-service --task-definition <previous-arn> (або у console → попередня revision)
Elastic Beanstalkaws elasticbeanstalk update-environment --version-label <previous>
EC2 + CodePipeline (Strapi)re-run попереднього artifact у CodePipeline / SSM-команда на EC2
Amplifyу console → попередній successful build → «Redeploy this version»
Railwaymcp__railway__redeploy на попередньому SUCCESS-deployment-ID, або в Railway UI
SSM-config rollbackпопередня версія параметра — Lambda сама запустить redeploy

Деталі → deploy-rollback.

  • Який саме зовнішній тригер для DetectChanges: false CodePipeline? (GitHub Action? Manual? Internal admin tool?)
  • EC2 Strapi: який agent на EC2 приймає артефакт з CodePipeline — CodeDeploy + appspec.yml? SSM RunCommand?
  • Чи Amplify-rebuild через Lambda використовується замість прямого GitHub-webhook (можливо для secrets sync first)?