Deployment manual adalah musuh kecepatan dan stabilitas: CI/CD mengotomasi alur dari commit ke produksi. Kalian mempelajari pipeline cloud native (CodePipeline/CodeBuild, Cloud Build, Azure DevOps), tahapan build-test-deploy, integrasi dengan Terraform, dan men-deploy aplikasi otomatis dari push commit ke environment nyata.

Sampai episode 13, seluruh deployment yang kalian lakukan — VM, cluster Kubernetes, fungsi serverless — masih dijalankan manual dari terminal. Itu bagus untuk belajar, tetapi tidak bisa dijadikan praktik produksi: satu kesalahan ketik, satu perintah yang terlewat, dan release jadi lambat atau rusak. Di sinilah CI/CD mengubah segalanya.
Episode 14 membahas CI/CD di cloud: AWS CodePipeline/CodeBuild, GCP Cloud Build, dan Azure DevOps. Kalian akan memahami alur pipeline modern — commit → build → test → deploy — bagaimana Terraform masuk ke dalamnya (dari episode 7), dan men-deploy aplikasi secara otomatis dari sebuah commit.
CI (Continuous Integration) — setiap commit otomatis di-build dan di-test, jadi masalah ditemukan dalam menit, bukan minggu. CD (Continuous Delivery/Deployment) — aplikasi yang lolos test otomatis di-deploy ke environment.
Manfaat yang terasa langsung:
Pipeline CI/CD adalah alur bertahap:
[commit] → [build] → [test] → [deploy staging] → [approve] → [deploy prod]| Tahap | Apa yang Terjadi | Tool |
|---|---|---|
| Source | Mendeteksi commit di git | CodePipeline, GitHub, Cloud Source Repos |
| Build | Compile, build image container | CodeBuild, Cloud Build, Azure Pipelines |
| Test | Unit test, lint, security scan | di tahap build |
| Deploy | Terapkan ke environment | Terraform, ECS/EKS, Lambda, Beanstalk |
| Gate | Persetujuan manual sebelum produksi | Approval action |
Setiap tahap hanya berlanjut jika yang sebelumnya sukses. Gagal di test = tidak pernah sampai deploy.
Contoh pipeline lengkap untuk aplikasi container. Definisi di cloudbuild.yaml:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'asia-southeast2-docker.pkg.dev/$PROJECT_ID/lab-repo/webapp:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'asia-southeast2-docker.pkg.dev/$PROJECT_ID/lab-repo/webapp:$SHORT_SHA']
- name: 'gcr.io/cloud-builders/kubectl'
args:
- 'set'
- 'image'
- 'deployment/webapp'
- 'webapp=asia-southeast2-docker.pkg.dev/$PROJECT_ID/lab-repo/webapp:$SHORT_SHA'
env:
- 'CLOUDSDK_COMPUTE_REGION=asia-southeast2'
- 'CLOUDSDK_CONTAINER_CLUSTER=lab-cluster'
- name: 'gcr.io/cloud-builders/kubectl'
args: ['rollout', 'status', 'deployment/webapp']
env:
- 'CLOUDSDK_COMPUTE_REGION=asia-southeast2'
- 'CLOUDSDK_CONTAINER_CLUSTER=lab-cluster'gcloud builds triggers create github \
--name=webapp-ci \
--repo-owner=risa \
--repo-name=webapp \
--branch-pattern='^main$' \
--build-config=cloudbuild.yamlSetiap push ke main otomatis: build image → push ke Artifact Registry → update image deployment di cluster → tunggu rollout. Satu commit, aplikasi ter-deploy, tanpa manusia.
AWS memakai kombinasi CodePipeline (orkestrasi) + CodeBuild (build):
version: 0.2
phases:
install:
runtime-versions:
python: 3.12
commands:
- pip install -r requirements.txt
pre_build:
commands:
- python -m pytest --maxfail=1
build:
commands:
- sam build
post_build:
commands:
- sam deploy --no-fail-on-empty-changesetPipeline-nya:
aws codepipeline create-pipeline --cli-input-json file://pipeline.jsonpipeline.json mendeskripsikan empat stage — Source (GitHub), Build (CodeBuild dengan buildspec.yaml), Deploy (SAM/CloudFormation), dan Approval (manual) — yang berjalan berurutan.
Azure DevOps punya pipeline dalam satu file YAML (azure-pipelines.yml):
trigger:
branches:
include:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: Docker@2
inputs:
containerRegistry: 'acr-lab'
command: 'buildAndPush'
repository: 'webapp'
tags: '$(Build.BuildId)'
- task: Kubernetes@1
inputs:
connectionType: 'Azure Resource Manager'
azureSubscription: 'lab-sub'
azureResourceGroup: 'rg-lab'
kubernetesCluster: 'lab-cluster'
command: 'set'
arguments: 'image deployment/webapp webapp=acrlab.azurecr.io/webapp:$(Build.BuildId)'Note
Pola yang sama di ketiga provider: YAML mendeskripsikan pipeline, dan pipeline berjalan otomatis pada setiap commit ke branch tertentu. Setelah memahami satu, kalian bisa menerjemahkannya ke yang lain — yang berubah hanya sintaks dan nama layanan, bukan konsepnya.
Infrastruktur juga harus melewati pipeline — ingat episode 7: IaC tanpa CI/CD adalah IaC setengah jadi. Pola yang benar:
# Tahap 1: plan (di PR) - jamin perubahan aman sebelum digabung
- name: terraform plan
run: |
terraform init
terraform validate
terraform plan -out=tfplan
# Tahap 2: apply (setelah merge ke main)
- name: terraform apply
run: terraform apply -auto-approve tfplanAlur lengkap di repositori infrastruktur:
terraform plan + tflint → hasil plan menjadi komentar review.main → pipeline terraform apply → infrastruktur berubah.Inilah jawaban dari pertanyaan episode 7: state dipakai pipeline, bukan laptop. Remote state + locking (yang kita pasang saat itu) adalah prasyarat supaya pipeline ini aman.
Mari bangun pipeline utuh di provider yang kalian pilih:
cloudbuild.yaml/buildspec.yaml/azure-pipelines.yml).main.Setelah ini, aplikasi kalian punya alur release yang bisa diaudit, repeatable, dan bisa di-rollback. Ini menandai transisi dari "belajar" ke "praktik engineering".
Inti yang harus dibawa pulang:
plan saat PR, apply setelah merge — infrastruktur versioned dan auditable.Di episode 15 selanjutnya kita akan membahas cloud security & compliance — encryption, secrets management (KMS/Secret Manager), security best practices, dan compliance (SOC2/GDPR) — lalu melakukan security audit cloud untuk infrastruktur kalian. Sampai jumpa di episode 15!