GitLab CI/CD配置:分支自动构建与特性分支参数化构建
修改GitLab CI配置满足分支构建需求
以下是满足你所有要求的.gitlab-ci.yml配置:
variables: # 默认使用当前提交分支,手动/上游触发可覆盖指定分支 TARGET_BRANCH: "${CI_COMMIT_BRANCH}" stages: - pre-check - build - upload # 前置检查:确保目标分支存在,不存在直接报错终止流水线 check-branch-exists: stage: pre-check image: alpine/git:latest script: - git fetch origin - if ! git branch -a | grep -q "remotes/origin/${TARGET_BRANCH}"; then echo "错误:远程仓库中不存在分支 ${TARGET_BRANCH}"; exit 1; fi rules: - if: '$CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "pipeline"' build: script: - git checkout "${TARGET_BRANCH}" - mvn clean install -no-transfer-progress image: vegardit/graalvm-maven:24.0.0 stage: build artifacts: paths: [target/*.jar] rules: # 自动提交到main或feature分支时自动触发 - if: '$CI_PIPELINE_SOURCE == "push" && ($CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH =~ /^feature\/.*/)' # 网页/上游job触发时,需手动确认执行 - if: '$CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "pipeline"' when: manual allow_failure: false upload: script: - git checkout "${TARGET_BRANCH}" - mvn deploy:deploy-file ... image: vegardit/graalvm-maven:24.0.0 stage: upload rules: # 仅自动提交到main分支时自动触发上传 - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "main"' # 手动/上游触发时,需手动确认执行 - if: '$CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "pipeline"' when: manual allow_failure: false
配置说明
分支自动触发:
- 提交代码到
main分支时,自动执行check-branch-exists→build→upload全流程。 - 提交代码到任意
feature/xxx格式的特性分支时,自动执行check-branch-exists→build流程,不会触发upload。
- 提交代码到
手动/上游参数触发:
- 网页触发:进入项目流水线页面点击「Run pipeline」,在变量区填写
TARGET_BRANCH的值(如feature/refactorendpoint),确认后启动流水线。 - 上游job触发:在调用流水线时通过
variables: { TARGET_BRANCH: "目标分支名" }传递参数。 - 分支不存在时,
check-branch-exists任务会直接报错,流水线终止。
- 网页触发:进入项目流水线页面点击「Run pipeline」,在变量区填写
分支校验逻辑:
- 通过
git fetch origin拉取远程分支列表,用grep匹配目标分支,不存在则退出码设为1,触发流水线失败。
- 通过
内容的提问来源于stack exchange,提问作者PatPanda
相关产品推荐
相关产品推荐

