Gitlab 接受合并请求而不运行手动阶段

Gitlab 接受合并请求而不运行手动阶段,gitlab,gitlab-ci,pipeline,Gitlab,Gitlab Ci,Pipeline,我有一个包含3个阶段的管道:build、deploytest和deployprod。我希望阶段具有以下行为: 始终运行build 在启用master时自动运行deploy test,或在其他分支上手动运行deploy test 手动运行deployprod,仅在master分支上可用 我的管道配置似乎实现了这一点,但我在尝试将分支合并到主分支时遇到了问题。在执行合并之前,我不想在每个分支上执行deployteststage。现在我需要这样做,因为合并按钮被禁用,消息管道被阻塞。此合并请求的管

我有一个包含3个阶段的管道:
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
  • 我添加了阿尔卑斯图像,以使作业运行更快(更薄的容器);这不影响逻辑
当我将更改推送到分支“mybranch”时,GitLab执行了以下操作:

  • 在我的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