Gitlab ci 如何實(shí)現(xiàn)-流程控制
在 GitLab CI/CD 中,流程控制主要通過(guò) 條件判斷、階段依賴(lài)、人工干預(yù) 等機(jī)制實(shí)現(xiàn),以下是 7 種核心流程控制方法及具體示例:
一、條件執(zhí)行(rules
)
最靈活的流程控制方式,支持 if
/changes
/exists
等規(guī)則:
test: script: pytest rules: - if: $CI_COMMIT_BRANCH == "main" # 僅main分支執(zhí)行 - if: $CI_MERGE_REQUEST_ID # MR時(shí)執(zhí)行 - changes: # 文件變化時(shí)執(zhí)行 - src/**/*.py - tests/* - when: never # 默認(rèn)拒絕
二、階段依賴(lài)(needs
)
打破階段順序限制,實(shí)現(xiàn)并行或選擇性執(zhí)行:
build: stage: build script: echo "Building..." unit_test: stage: test needs: ["build"] # 顯式依賴(lài)build階段 script: echo "Unit tests" e2e_test: stage: test needs: [] # 不依賴(lài)任何Job,立即執(zhí)行 script: echo "E2E tests"
三、人工干預(yù)(when: manual
)
需要手動(dòng)點(diǎn)擊才能繼續(xù)流程:
deploy_prod: stage: deploy script: ./deploy.sh rules: - if: $CI_COMMIT_BRANCH == "main" when: manual # 手動(dòng)批準(zhǔn)后執(zhí)行 - when: never
四、動(dòng)態(tài)生成子流程(trigger
)
根據(jù)條件觸發(fā)不同的子 Pipeline:
generate_child: stage: setup script: ./generate-pipeline.py artifacts: paths: - child-pipeline.yml trigger_child: stage: deploy trigger: include: - artifact: child-pipeline.yml job: generate_child
五、失敗處理(allow_failure
)
允許非關(guān)鍵任務(wù)失敗而不中斷流程:
notify_slack: script: ./notify.sh allow_failure: true # 即使失敗也不阻塞后續(xù)Job
六、重試機(jī)制(retry
)
自動(dòng)重試失敗的 Job:
flakey_test: script: ./run-flakey-test.sh retry: max: 2 # 最多重試2次 when: runner_system_failure # 僅在系統(tǒng)錯(cuò)誤時(shí)重試
七、超時(shí)控制(timeout
)
防止 Job 無(wú)限卡死:
long_running_job: script: ./slow-process.sh timeout: 1 hour # 超時(shí)設(shè)置
流程控制組合示例
stages: - build - test - deploy variables: DEPLOY_ENV: $CI_COMMIT_BRANCH == "main" ? "prod" : "staging" build: stage: build script: docker build -t app . rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH test: stage: test needs: ["build"] script: ./run-tests.sh retry: 2 timeout: 30 minutes deploy: stage: deploy script: ./deploy-$DEPLOY_ENV.sh rules: - if: $DEPLOY_ENV == "prod" when: manual - if: $DEPLOY_ENV == "staging" when: on_success
關(guān)鍵技巧
- 條件表達(dá)式:
- 文件變化檢測(cè):
- 變量驅(qū)動(dòng)流程:
調(diào)試建議
- 可視化流程:GitLab Pipeline 頁(yè)面可直觀查看階段依賴(lài)關(guān)系:
- 模擬運(yùn)行:
通過(guò)組合這些方法,可以實(shí)現(xiàn)從簡(jiǎn)單線性流程到復(fù)雜決策樹(shù)的完整控制。
《高級(jí)軟件測(cè)試工程師》專(zhuān)欄旨在為測(cè)試領(lǐng)域的從業(yè)者提供深入的知識(shí)和實(shí)踐指導(dǎo),幫助大家從基礎(chǔ)的測(cè)試技能邁向高級(jí)測(cè)試專(zhuān)家的行列。 在本專(zhuān)欄中,主要涵蓋的內(nèi)容: 1. 如何設(shè)計(jì)和實(shí)施高效的測(cè)試策略; 2. 掌握自動(dòng)化測(cè)試、性能測(cè)試和安全測(cè)試的核心技術(shù); 3. 深入理解測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)和行為驅(qū)動(dòng)開(kāi)發(fā)(BDD)的實(shí)踐方法; 4. 測(cè)試團(tuán)隊(duì)的管理和協(xié)作能力。 ——For.Heart