GitLab CI配置changes规则的任务前置阶段失败后未重跑如何解决
GitLab CI build_job未触发问题解决方案
问题根因
GitLab CI的changes规则默认将当前提交与当前分支上最近一次成功流水线对应的提交做路径对比,若指定路径无变更则不会创建对应任务。首次运行流水线时test_job执行失败,当前分支无成功流水线记录,因此首次会将当前提交与默认分支对比,识别到web-app路径变更;第二次提交仅修改了.gitlab-ci.yml文件,web-app路径无变更,因此build_job不会被创建,无法执行。
解决方案
方案1:指定changes对比基准为默认分支(推荐,GitLab 15.3及以上版本支持)
给changes新增compare_to参数,固定和默认分支做对比,不受分支上之前的流水线运行结果影响,保留仅web-app路径与默认分支有差异时才运行的逻辑:
stages: - test - build test_job: stage: test rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' script: - exit 0 build_job: stage: build rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' changes: paths: - web-app/**/* compare_to: $CI_DEFAULT_BRANCH script: - echo "Building..."
方案2:补充规则匹配CI配置变更场景(兼容低版本GitLab)
如果使用的GitLab版本低于15.3不支持compare_to参数,可以在changes路径中追加.gitlab-ci.yml,修改CI配置的提交也会触发build_job:
build_job: stage: build rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' changes: - web-app/**/* - .gitlab-ci.yml script: - echo "Building..."
方案3:新增手动强制触发规则
如果需要支持临时手动运行build_job的场景,可以新增变量校验规则,手动运行流水线时设置变量CI_SKIP_CHANGES_VALIDATION=true即可跳过路径变更校验直接执行:
build_job: stage: build rules: - if: '$CI_SKIP_CHANGES_VALIDATION == "true"' - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' changes: - web-app/**/* script: - echo "Building..."
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

