Modul 11Penggal 4 · Operasi production14 item poster

Shipping: CI/CD, Supply Chain dan Infrastruktur

Log masuk untuk menyimpan kemajuan anda merentas peranti. Sehingga itu, ia disimpan dalam pelayar ini.

Mengapa ini penting

AI membolehkan anda menulis sepuluh kali lebih banyak perubahan. Tanpa laluan automatik yang selamat ke production, ia menjadi sepuluh kali lebih banyak insiden. Kajian DORA jelas menunjukkan bahawa kelajuan dan kestabilan bukan pertukaran: pasukan terbaik deploy dengan kerap dan lebih jarang gagal, kerana setiap perubahan kecil, diuji dan boleh diundur.

Hasil pembelajaran

  1. Bina pipeline CI/CD dengan gate kualiti dan keselamatan.
  2. Containerise secara boleh diulang dengan Docker.
  3. Lindungi software supply chain (lockfile, SBOM, provenance, slopsquatting).
  4. Lepaskan secara progresif dengan feature flag, rolling, canary dan blue-green.
  5. Rollback dalam masa kurang seminit.
  6. Takrifkan infrastruktur sebagai kod.
  7. Ketahui bila (dan bila tidak) menggunakan Kubernetes.

Pelajaran

11.1 Pipeline (6, 107)

Pada setiap pull request: install (daripada lockfile) → lint → type-check → unit test → integration test (DB sebenar dalam container) → imbasan keselamatan (secret, SAST, dependency) → build → preview deploy → ujian E2E pada preview. Semasa merge ke main: build sekali, deploy artifact yang sama ke staging kemudian production, jalankan migration sebagai langkah terkawal, smoke test, pantau.

  • Branch protection: semakan wajib dan semakan CI yang lulus; tiada sesiapa (dan tiada ejen) push terus ke main.
  • Build caching (107) memastikan CI pantas (cache dependency dan layer, remote cache dalam monorepo). CI yang perlahan membuatkan orang melangkaunya.

11.2 Docker (7)

  • Build berbilang peringkat; base image yang kecil (distroless, alpine, atau slim); pin digest image.
  • Jalankan sebagai bukan root; tiada secret dalam image atau layer; .dockerignore.
  • Imbas image (Trivy) dalam CI. Image yang sama berjalan di lokal, dalam CI dan dalam production: berakhirlah zaman "boleh jalan di mesin saya."

11.3 Supply chain dan dependency hell (108, OWASP A03:2025)

  • Lockfile di-commit; npm ci / install beku dalam CI.
  • Slopsquatting: alat AI kadangkala mencadangkan pakej yang tidak wujud; penyerang mendaftarkan nama-nama itu. Sahkan setiap dependency baharu wujud, diselenggara, benar-benar digunakan, dan dieja dengan betul.
  • Kemas kini automatik (Dependabot/Renovate) dengan ujian; kumpulkan kemas kini minor; semak kemas kini major.
  • Kurangkan dependency; utamakan platform dan standard library.
  • SBOM (CycloneDX atau SPDX) dijana bagi setiap build; provenance/tandatangan (rangka kerja SLSA, Sigstore/cosign, GitHub artifact attestations). Pelanggan enterprise semakin kerap meminta SBOM.
  • Pin GitHub Actions kepada SHA commit; kebenaran GITHUB_TOKEN least privilege.

11.4 Progressive delivery (51 hingga 55)

  • Feature flag (51): deploy kod secara tersembunyi, lepaskan kepada pengguna dalaman, kemudian kepada %, kemudian semua. Asingkan deploy daripada release. Bersihkan flag lama (ia ialah tech debt).
  • Rolling (54): gantikan instance secara beransur-ansur; lalai pada kebanyakan platform.
  • Canary (53): hantar % kecil trafik ke versi baharu, bandingkan kadar ralat dan latency, auto-promote atau batalkan.
  • Blue-green (52): dua persekitaran penuh; tukar trafik serta-merta; tukar balik juga serta-merta.
  • Rollback (55): yang paling penting. Instant rollback platform (Vercel, Cloudflare, Fly, Render) atau redeploy tag image sebelumnya. Latih ia. Migration pangkalan data mesti backward compatible supaya rollback kod selamat (03 · Asas Data expand and contract).

11.5 Infrastructure as code (104, 105)

  • Semuanya (DNS, bucket, DB, queue, IAM, amaran) ditakrifkan dalam kod, disemak dalam PR, dilaksanakan oleh CI. Tiada click-ops dalam production.
  • Terraform / OpenTofu (105), Pulumi (TypeScript), atau fail konfigurasi platform. State disimpan secara jauh dan dikunci.
  • Faedah: persekitaran yang boleh diulang, jejak audit, pemulihan bencana dengan re-apply.
  • Imbas IaC untuk salah konfigurasi (Checkov, Trivy).

11.6 Kubernetes, Helm, service discovery (8, 9, 106)

  • Kubernetes (8) mengorkestrasi container: penjadualan, self-healing, penskalaan, rolling update. Helm (106) membungkus aplikasi K8s. Service discovery (9) membolehkan servis mencari satu sama lain melalui nama.
  • Panduan jujur: untuk pasukan kecil, PaaS terurus (Vercel, Cloudflare, Fly, Render, Railway, Cloud Run, ECS) memberi kebanyakan faedahnya dengan sebahagian kecil beban operasi. Gunakan K8s apabila anda ada banyak servis, pasukan platform, atau keperluan enterprise/on-prem.

11.7 Persekitaran

Lokal → preview (per PR) → staging (seperti production, data dianonimkan) → production. Kelayakan dan akaun berasingan bagi setiap persekitaran. Ejen AI tidak pernah memegang kelayakan production secara lalai.

Makmal 11: Ship sepuluh kali sehari

  1. Bina pipeline penuh di atas dalam GitHub Actions.
  2. Tambah penjanaan SBOM dan imbasan dependency + container; gagalkan jika ada tahap kritikal.
  3. Balut ciri baharu dengan flag; lepaskan kepada 10% kemudian 100%.
  4. Ship satu deploy buruk dengan sengaja; kesan dan rollback. Ukur masanya.
  5. Takrifkan infra anda (sekurang-kurangnya DNS, DB, storage, satu amaran) dalam Terraform/OpenTofu atau Pulumi.

Definition of Done

Pek prompt AI

  • "Tulis workflow GitHub Actions dengan lint, typecheck, ujian dengan service container Postgres, gitleaks, Semgrep, audit dependency, build Docker dengan imbasan Trivy, dan SBOM. Pin semua actions mengikut SHA dan gunakan kebenaran least privilege."
  • "Untuk setiap dependency yang ditambah dalam diff ini, sahkan ia wujud dalam registry, muat turun mingguannya, tarikh terbitan terakhir, dan bilangan penyelenggara."