Gitlab ci 如何实现-流程控制
在 GitLab CI/CD 中,流程控制主要通过 条件判断、阶段依赖、人工干预 等机制实现,以下是 7 种核心流程控制方法及具体示例:
一、条件执行(rules
)
最灵活的流程控制方式,支持 if
/changes
/exists
等规则:
test: script: pytest rules: - if: $CI_COMMIT_BRANCH == "main" # 仅main分支执行 - if: $CI_MERGE_REQUEST_ID # MR时执行 - changes: # 文件变化时执行 - src/**/*.py - tests/* - when: never # 默认拒绝
二、阶段依赖(needs
)
打破阶段顺序限制,实现并行或选择性执行:
build: stage: build script: echo "Building..." unit_test: stage: test needs: ["build"] # 显式依赖build阶段 script: echo "Unit tests" e2e_test: stage: test needs: [] # 不依赖任何Job,立即执行 script: echo "E2E tests"
三、人工干预(when: manual
)
需要手动点击才能继续流程:
deploy_prod: stage: deploy script: ./deploy.sh rules: - if: $CI_COMMIT_BRANCH == "main" when: manual # 手动批准后执行 - when: never
四、动态生成子流程(trigger
)
根据条件触发不同的子 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
)
允许非关键任务失败而不中断流程:
notify_slack: script: ./notify.sh allow_failure: true # 即使失败也不阻塞后续Job
六、重试机制(retry
)
自动重试失败的 Job:
flakey_test: script: ./run-flakey-test.sh retry: max: 2 # 最多重试2次 when: runner_system_failure # 仅在系统错误时重试
七、超时控制(timeout
)
防止 Job 无限卡死:
long_running_job: script: ./slow-process.sh timeout: 1 hour # 超时设置
流程控制组合示例
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
关键技巧
- 条件表达式:
- 文件变化检测:
- 变量驱动流程:
调试建议
- 可视化流程:GitLab Pipeline 页面可直观查看阶段依赖关系:
- 模拟运行:
通过组合这些方法,可以实现从简单线性流程到复杂决策树的完整控制。
进阶高级测试工程师 文章被收录于专栏
《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart