AWS CodePipeline
CodePipeline adalah orkestrator CI/CD milik AWS. Untuk aplikasi GenAI, tahap paling berharga bukan build-nya, melainkan gerbang evaluasi sebelum deploy.
Intisari
- Pipeline terdiri atas stage berurutan; tiap stage berisi action yang bisa paralel.
- Artefak mengalir antar stage lewat bucket S3 yang dikelola pipeline.
- Sumbernya bisa GitHub (via CodeConnections), CodeCommit, atau S3.
- Manual approval adalah satu action — gerbang manusia sebelum production.
- Untuk aplikasi LLM, sisipkan stage evaluasi: kalau skor turun dari baseline, pipeline berhenti.
Bentuk pipeline
Source ──▶ Build ──▶ Test ──▶ Eval ──▶ Approve ──▶ Deploy Prod
(GitHub) (CodeBuild) (LLM) (manusia) (CloudFormation)
| Istilah | Artinya |
|---|---|
| Stage | Tahap berurutan. Gagal di satu stage menghentikan sisanya. |
| Action | Satu pekerjaan di dalam stage. Beberapa action bisa jalan bersamaan. |
| Artifact | Berkas yang mengalir antar stage — kode, template, laporan. |
| Transition | Sambungan antar stage; bisa dinonaktifkan untuk membekukan rilis. |
Stage yang khas untuk aplikasi GenAI
| Stage | Isinya | Gerbang gagal |
|---|---|---|
| Build | ruff, mypy, build image | Lint atau type check merah |
| Test | pytest dengan Bedrock di-mock | Tes gagal |
| Eval | Dataset pertanyaan emas dijalankan ke model | Skor di bawah baseline |
| Security | Pemindaian dependensi dan image | Kerentanan tinggi |
| Deploy staging | cdk deploy ke akun dev | CloudFormation rollback |
| Approve | Persetujuan manual | Ditolak manusia |
| Deploy prod | cdk deploy ke akun prod | — |
Stage Eval adalah yang membedakan CI/CD aplikasi LLM dari CI/CD biasa. Perubahan prompt tidak membuat satu pun tes unit gagal, tapi bisa menurunkan kualitas jawaban secara drastis. Tanpa gerbang evaluasi, satu-satunya detektor regresi kualitas adalah keluhan pengguna. Isi teknis stage ini dibahas di Fase 7.
CDK Pipelines
Cara paling ringkas membuat pipeline untuk proyek CDK adalah mendefinisikannya dengan CDK. Pipeline-nya memperbarui dirinya sendiri: menambah stage cukup dengan mengubah kode dan push.
from aws_cdk import pipelines
pipeline = pipelines.CodePipeline(
self, "Pipeline",
synth=pipelines.ShellStep(
"Synth",
input=pipelines.CodePipelineSource.connection(
"nurhadidev/tanya-bedrock", "main",
connection_arn="arn:aws:codeconnections:us-east-1:123456789012:connection/abc",
),
commands=[
"uv sync",
"uv run ruff check .",
"uv run pytest",
"npx cdk synth",
],
),
)
tahap_dev = pipeline.add_stage(TahapAplikasi(self, "Dev", env=ENV_DEV))
tahap_dev.add_post(pipelines.ShellStep("Evaluasi", commands=["uv run python eval/jalankan.py"]))
pipeline.add_stage(TahapAplikasi(self, "Prod", env=ENV_PROD),
pre=[pipelines.ManualApprovalStep("SetujuiRilis")])
Yang perlu dijaga
- Pipeline butuh role-nya sendiri. Jangan berikan kredensial pribadi; pakai role bootstrap CDK.
- Rahasia tidak pernah ditulis di buildspec. Ambil dari Secrets Manager saat build berjalan.
- Simpan artefak evaluasi. Skor tiap rilis adalah data historis yang kamu butuhkan saat kualitas mendadak turun.
- Notifikasi kegagalan. Event kegagalan pipeline ke EventBridge → SNS atau Slack.
Latihan: buat pipeline dua stage (Synth + Deploy Dev) dengan CDK Pipelines yang terhubung ke
repositori GitHub-mu. Push satu commit dan tunggu sampai berjalan sendiri. Lalu tambahkan
ManualApprovalStep sebelum stage Prod dan amati pipeline berhenti menunggumu.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.