GitLab CI/CD如何配置仅新hotfix分支创建时触发、后续推送不执行的job
解决方案
核心判断逻辑
GitLab CI 预置的CI_COMMIT_BEFORE_SHA变量是实现需求的关键:当推送的是全新创建的分支时,该变量的值为40位全0的哈希值。结合hotfix分支的命名规则,就能精准匹配到分支首次创建的场景。
调整后的配置示例
# hotfix分支首次创建时执行的环境初始化job hotfix-env-init: stage: pre-build script: - 执行自定义环境搭建、沙箱创建、测试数据推送的对应脚本 rules: # 仅匹配hotfix分支的首次推送场景 - if: '$CI_COMMIT_BRANCH =~ /^hotfix.*/ && $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"' allow_failure: false when: always # 如需手动触发可改为manual # hotfix分支后续推送时执行的构建打标job hotfix-build-release: stage: build script: - 执行代码构建、release tag推送的对应脚本 rules: # 排除首次推送场景,匹配hotfix分支后续的所有推送 - if: '$CI_COMMIT_BRANCH =~ /^hotfix.*/ && $CI_COMMIT_BEFORE_SHA != "0000000000000000000000000000000000000000"' allow_failure: false when: always
原配置失效说明
你之前的配置中changes规则的逻辑是对比本次提交和上一次提交的文件差异,首次推送hotfix分支时会默认和master分支对比文件,如果force-app目录存在差异就会触发when: never,直接导致初始化job被跳过,完全不符合预期。调整后直接基于分支是否首次推送的特征判断,不受文件变更情况影响。
边界场景验证
- 本地先提交多次再一次性推送新建的hotfix分支时,
CI_COMMIT_BEFORE_SHA仍为全0,会正常触发初始化job,符合需求 - 删除旧的同名hotfix分支后重新推送新的同名分支,也会触发初始化操作,符合场景预期
内容的提问来源于stack exchange,提问作者Mattue
相关产品推荐
相关产品推荐

