GitLab CI配置:主分支自动执行作业,其他分支允许手动触发
GitLab CI 配置:主分支自动执行,其他分支手动触发作业
要实现这个需求,核心是利用GitLab CI的rules配置项,通过分支判断结合手动触发条件来控制作业的执行逻辑。以下是具体实现方案:
核心配置思路
通过rules定义两条规则:
- 当流水线运行在主分支(比如
main或master)时,作业自动执行。 - 当流水线运行在其他分支时,作业仅允许手动触发。
完整配置示例
创建或修改项目根目录下的.gitlab-ci.yml文件,示例如下:
stages: - build - test # 构建作业 build: stage: build script: - echo "执行构建步骤..." - # 替换为你的实际构建命令,比如 npm install && npm run build rules: - if: '$CI_COMMIT_BRANCH == "main"' # 匹配主分支,自动执行 when: on_success - if: '$CI_COMMIT_BRANCH != "main" && $CI_COMMIT_TAG == null' # 非主分支且非标签,手动触发 when: manual allow_failure: false # 可选:强制必须触发并成功,否则流水线失败 # 测试作业 test: stage: test script: - echo "执行测试步骤..." - # 替换为你的实际测试命令,比如 npm test rules: - if: '$CI_COMMIT_BRANCH == "main"' when: on_success - if: '$CI_COMMIT_BRANCH != "main" && $CI_COMMIT_TAG == null' when: manual allow_failure: false
配置细节说明
- 分支匹配:将
"main"替换为你项目实际的主分支名称(比如"master")。 when: manual:标记作业为手动触发,只有在GitLab流水线界面点击"运行"按钮后才会执行。allow_failure:- 设置为
false时,手动作业必须执行成功,整个流水线才能标记为成功。 - 设置为
true时,即使不触发该作业,流水线也能正常完成(适合非必须的辅助作业)。
- 设置为
- 排除标签:规则中加入
$CI_COMMIT_TAG == null是为了避免标签触发的流水线应用手动规则,如果你不需要排除标签,可以去掉这个条件。
扩展:针对合并请求的调整
如果需要在合并请求目标为主分支时自动执行作业,可以在rules中添加额外规则:
rules: - if: '$CI_COMMIT_BRANCH == "main"' when: on_success - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"' when: on_success # MR目标为主分支时自动执行 - if: '$CI_COMMIT_BRANCH != "main" && $CI_COMMIT_TAG == null' when: manual allow_failure: false
内容的提问来源于stack exchange,提问作者mrek
相关产品推荐
相关产品推荐

