Gitlab CI中带when:always的规则与无该配置的规则有差异吗?
GitLab CI规则中添加
when: always的差异分析 两者存在明显差异,并非效果完全相同。添加when: always后,作业的执行逻辑会发生以下关键变化:
脱离依赖作业的状态约束
未指定when时,GitLab CI默认采用when: on_success逻辑——只有当前面所有依赖作业都成功完成,这个作业才会启动。而加了when: always后,只要$CI_PIPELINE_SOURCE == "merge_request_event"的条件成立,不管前面作业是成功、失败还是被跳过,该作业都会强制执行。不受
fail_fast配置的阻断
如果流水线全局或对应阶段配置了fail_fast: true,一旦某个作业失败,同阶段及后续阶段的作业会被立即终止。但带有when: always的作业不受此限制,只要触发条件满足,依然会正常执行。明确作业的执行意图
原规则的执行逻辑依赖GitLab CI的默认行为,语义不够直观。添加when: always后,直接明确了「只要是合并请求事件就必须执行该作业」的意图,避免后续因默认行为变更或其他配置调整导致的意外。
举个实际场景:假设你在MR流水线里有一个收集代码覆盖率的作业,原规则下如果编译作业失败,覆盖率作业会被跳过;加了when: always后,哪怕编译失败,覆盖率作业依然会运行,能帮你获取编译失败前已完成的代码覆盖数据,方便排查问题。
内容的提问来源于stack exchange,提问作者eyalruby
相关产品推荐
相关产品推荐

