GitLab手动Job配置问题:未触发时不阻塞流水线状态
解决方案
你需要通过GitLab CI内置的CI_JOB_MANUAL环境变量动态控制allow_failure的取值,结合规则配置实现需求。修改后的Job配置如下:
your_job_name: script: - # 填入你的Job执行脚本 allow_failure: $CI_JOB_MANUAL != "true" rules: - if: '$CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "merge_request_event"' when: manual
原理说明
未手动启动时不阻塞流水线:当你不触发这个手动Job时,它会被标记为
skipped状态。此时CI_JOB_MANUAL变量不会被设置为true,allow_failure取值为true,流水线会忽略该skipped状态的Job,继续执行后续步骤,不会被阻塞。启动后失败则阻塞流水线:当你手动触发这个Job时,GitLab会自动将
CI_JOB_MANUAL设为true,此时allow_failure取值为false。如果Job执行失败,整个流水线会直接终止并标记为失败,符合你的要求。
为什么之前的配置无效
你之前尝试在规则外设置allow_failure: true但未生效,是因为规则内的allow_failure会覆盖全局配置。原规则中明确指定了allow_failure: false,导致全局的allow_failure: true被覆盖,无论是否手动启动,只要满足规则条件,allow_failure都为false,未启动时流水线会一直处于等待状态。
内容的提问来源于stack exchange,提问作者Alex_M
相关产品推荐
相关产品推荐

