內建 pipeline 自動化 — GitLab CI/CD
.gitlab-ci.yml,push 就自動跑測試、建置、部署。
| 名詞 | 意義 |
|---|---|
| Pipeline | 一次完整的 CI/CD 流程(由 stages 組成) |
| Stage | 流程階段(build → test → deploy),依序執行 |
| Job | 實際執行的任務,屬於某個 stage |
| Runner | 執行 job 的機器(可自架/共享) |
| Artifact | job 產出物(可傳給下一 stage) |
| Variable | 環境變數(含 CI/CD variables,類似 secrets) |
放在專案根目錄:
stages: - test - deploy test-job: stage: test image: node:20 script: - npm ci - npm test deploy-job: stage: deploy script: - echo "deploying" only: - main
GitLab CI 需要 Runner 執行 job。GitLab.com 提供共享 runner(免費額度), 自架 GitLab 則要自己裝 runner(在公司的機器上跑,程式碼不出公司)。
Shared runners # GitLab.com 提供,免費額度有限 Specific runners # 專屬機器,可指定標籤 Group runners # 整個群組共用 gitlab-runner register # 註冊一台 runner
機密值用 CI/CD variables(Settings → CI/CD → Variables),不寫進 YAML。
# 設定:Settings → CI/CD → Variables → 新增 # 名稱:DEPLOY_TOKEN deploy-job: script: - echo "using $DEPLOY_TOKEN" # 不要 echo 機密! rules: - if: '$CI_COMMIT_BRANCH == "main"'
CI_* 內建變數(分支、commit、MR 資訊)。
rules: if 可用它們做條件控制。機密變數記得勾選「Masked」。
image: python:3.12 # 執行環境 before_script: [pip install -r req.txt] # job 前 artifacts: paths: [dist/] # 產出物傳給下一 stage cache: paths: [.npm/] # 快取加速 when: on_success # 失敗也跑:always needs: [test-job] # 跳過 stage 順序直接依賴
在 MR 上,pipeline 結果會顯示(✔ / ✘)。結合保護分支設定「Pipelines must succeed」, CI 沒過就不能合併——品質第一道防線。