第一條 Pipeline
寫出第一個 .gitlab-ci.yml,看懂 pipeline、job、runner 的關係
關鍵字job、script、image
課程地圖
按住卡片拖拉可以排序或拖進群組;手機長按約半秒再拖。鍵盤:在卡片上按空白鍵拿起,方向鍵移動,再按空白鍵放下,Esc 取消;Enter 開啟。排法存在這台裝置的瀏覽器。
寫出第一個 .gitlab-ci.yml,看懂 pipeline、job、runner 的關係
關鍵字job、script、image
用 stages 排出建置、測試、部署的順序,學會平行 job 與允許失敗
關鍵字stages、default、allow_failure、.pre/.post
把建置產物交給下一個 job,並在 GitLab 介面看到測試報告
關鍵字artifacts、dependencies、reports:junit
分清楚內建、全域、job、專案變數的優先順序,並用 dotenv 在 job 之間傳值
關鍵字variables、預定義變數、dotenv、Masked
用 cache 保存套件下載,學會 key、policy,以及 cache 與 artifacts 的分工
關鍵字cache、key:files、policy、extends
用 rules 與 workflow 控制什麼時候建立 pipeline、哪些 job 要跑、要不要手動按
關鍵字rules、workflow、changes、exists、when: manual
用 needs 讓 job 準備好就開跑,用 matrix 一次測多個版本,用 extends 與 !reference 重用設定
關鍵字needs、DAG、parallel:matrix、extends、!reference
用 services 在 job 旁邊開 Redis 與 PostgreSQL,跑真正連得到資料庫的整合測試
關鍵字services、alias、整合測試、entrypoint
用 environments 管理 review、staging、production,學會停止環境、鎖住部署與手動上線
關鍵字environment、review app、on_stop、resource_group、手動上線
用正式網站同一套流水線,把課程網站建成映像、簽章,經 GitOps 由 Argo CD 部署到 k8s,Envoy 對外提供 HTTPS
關鍵字Harbor、cosign、Kyverno、GitOps、Argo CD、Envoy Gateway
Lv.10 實機部署
這個網站本身就是 Lv.10 的成果。詳細步驟與 YAML 在 Lv.10。
受保護分支才會建映像與部署;分支與 MR 只跑掃描
gitleaks 機密、Trivy 相依套件、Semgrep 程式寫法
BuildKit 無 root 建置,推上 Harbor sites/cicd-tutorial
Trivy 掃描映像並產生 SBOM
傳統 .sig 標籤格式,Kyverno 只認得這種
CI 把新標籤寫進 homelab-k8s 的 apps/cicd-tutorial/values.yaml
約 3 分鐘內偵測到變更,滾動更新 site-cicd-tutorial
HTTPRoute 接到共用 Gateway,cert-manager 簽發 HTTPS 憑證
技術棧
| GitLab CI/CD | gitlab.com 共享 runner 跑 Lv.1~Lv.9;homelab 的 k8s-ci、k8s-release runner 跑 Lv.10 |
|---|---|
| Harbor | 私有映像倉庫,映像放 sites/ 專案 |
| cosign+Kyverno | 簽章與准入驗章,未簽章的映像進不了 site-* 命名空間 |
| Argo CD | GitOps:以 homelab-k8s repo 為準,自動同步與自我修復 |
| Envoy Gateway | 對外入口與反向代理,每站獨立 HTTPRoute |
| cert-manager | Let's Encrypt HTTP-01 簽發與自動續期 |
| nginx-unprivileged | 容器內提供靜態檔,非 root、唯讀根目錄 |
| Python 標準函式庫 | 把各關 README 轉成網頁,不需要任何第三方套件 |