Gitlab 接受合并请求而不运行手动阶段
我有一个包含3个阶段的管道:Gitlab 接受合并请求而不运行手动阶段,gitlab,gitlab-ci,pipeline,Gitlab,Gitlab Ci,Pipeline,我有一个包含3个阶段的管道:build、deploytest和deployprod。我希望阶段具有以下行为: 始终运行build 在启用master时自动运行deploy test,或在其他分支上手动运行deploy test 手动运行deployprod,仅在master分支上可用 我的管道配置似乎实现了这一点,但我在尝试将分支合并到主分支时遇到了问题。在执行合并之前,我不想在每个分支上执行deployteststage。现在我需要这样做,因为合并按钮被禁用,消息管道被阻塞。此合并请求的管
build
、deploytest
和deployprod
。我希望阶段具有以下行为:
- 始终运行
build
- 在启用
时自动运行master
,或在其他分支上手动运行deploy test
deploy test
- 手动运行
,仅在deployprod
分支上可用master
deploytest
stage。现在我需要这样做,因为合并按钮被禁用,消息管道被阻塞。此合并请求的管道需要手动操作才能继续
。项目中的设置“管道必须成功”已禁用
我尝试添加额外的规则以防止deploytest
stage在合并请求中运行,但它没有改变任何内容:
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
我已使用以下
.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
注:
不推荐使用,因此我将其替换为只有
if
- 我添加了阿尔卑斯图像,以使作业运行更快(更薄的容器);这不影响逻辑
- 在我的MR上显示了一个蓝色的“管道成功时合并”按钮
- 运行“构建”阶段
- 跳过了“部署产品”阶段(仅在“主”分支上可用)
- 给了我一个手动“播放”按钮来运行“mybranch”上的作业
- 此时,管道状态为“已阻止”,MR显示“管道已阻止。此合并请求的管道需要手动操作才能继续”
- 现在,我通过在Pipelines屏幕中选择Play图标手动启动“deploy test”阶段
- 管道状态指示器更改为“正在运行”,然后更改为“已通过”
- 我的合并请求显示通过的管道,并给我绿色的“合并”按钮
“skip\u cicd”
,使用CI\u merge\u request\u title
变量访问它并创建规则。您的管道看起来有点像这样(请测试规则,我已经在脑海中编辑了管道,可能是错误的)-
我不明白。您没有真正更改管道文件中的任何重要内容。您还声明必须在合并请求中手动调用
deploytest
,然后才能进行合并,这不是我想要的。我想在一些合并请求中跳过调用deploytest
阶段。好的。你能澄清一下你的要求吗?您说您想在一些合并请求中跳过调用deploytest
阶段——哪些请求?早些时候,您说过希望在master
上自动运行deploytest
,或者在其他分支上手动运行。。。这正是我的要求。我并不总是想从分支运行deploy test
,因此有些合并将完成完整的分支管道(build
和-deploy test
),有些则不会。我希望能够合并两者,但消息管道被阻塞。此合并请求的管道需要手动操作才能继续
阻止我这样做。我现在就可以得到它。感谢您耐心地解释您的用例。见-这目前是一个悬而未决的问题。如果可以的话,您可能想对其进行投票,以向开发人员表明需求。
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