我有一个包含3个阶段的管道:build
,deploy-test
和deploy-prod
。我希望阶段具有以下行为:
build
deploy-test
上自动运行master
或在其他分支上手动运行deploy-prod
,仅在master
分支上可用我的管道配置似乎实现了这一点,但是在尝试将分支合并到master时遇到了问题。我不想在进行合并之前在每个分支上执行deploy-test
阶段。现在,我必须这样做,因为已通过消息Pipeline blocked. The pipeline for this merge request requires a manual action to proceed
禁用了合并按钮。项目中的设置Pipelines must succeed
已禁用。
我尝试添加其他规则,以防止deploy-test
阶段在合并请求中运行,但它没有任何改变:
rules:
- if: '$CI_MERGE_REQUEST_ID'
when: never
- if: '$CI_COMMIT_BRANCH == "master"'
when: on_success
- when: manual
完整的管道配置:
stages:
- build
- deploy-test
- deploy-prod
build:
stage: build
script:
- echo "build"
deploy-test:
stage: deploy-test
script:
- echo "deploy-test"
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
when: on_success
- when: manual
deploy-prod:
stage: deploy-prod
script:
- echo "deploy-prod"
only:
- master
答案 0 :(得分:0)
我已使用以下.gitlab-ci.yml
打开了分支“ mybranch”到“ master”的合并请求:
image: alpine
stages:
- build
- deploy-test
- deploy-prod
build:
stage: build
script:
- echo "build"
# run deploy-test automatically when on master or manually when on other branches
# Don't run on merge requests
deploy-test:
stage: deploy-test
script:
- echo "deploy-test"
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- if: '$CI_COMMIT_BRANCH == "master"'
when: on_success
- when: manual
# run deploy-prod manually, only available on master branch
deploy-prod:
stage: deploy-prod
script:
- echo "deploy-prod"
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
when: manual
注意:
only
已过时,因此我将其替换为if
当我将更改推送到分支“ mybranch”时,GitLab执行了以下操作:
答案 1 :(得分:0)
有许多变量在运行时可用于管道 - Predefined variables reference 有些专门用于与合并请求相关的管道 - Predefined variables for merge request pipelines
您可以利用这些变量中的一个或多个来确定是否要为该合并请求运行部署测试作业。
例如,您可以在合并请求标题中提及短语 "skip_cicd"
,使用 CI_MERGE_REQUEST_TITLE
变量访问它并创建规则。您的管道看起来有点像这样(请测试规则,我已经对管道进行了编辑,可能是错误的)-
stages:
- build
- deploy-test
- deploy-prod
build:
stage: build
script:
- echo "build"
deploy-test:
stage: deploy-test
script:
- echo "deploy-test"
rules:
- if: '$CI_MERGE_REQUEST_TITLE == *"skip_cicd"*'
when: never
- if: '$CI_COMMIT_BRANCH == "master"'
when: on_success
- when: manual
deploy-prod:
stage: deploy-prod
script:
- echo "deploy-prod"
only:
- master