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

Ple*_*ase 11 pipeline gitlab gitlab-ci

我有一个包含 3 个阶段的管道:builddeploy-testdeploy-prod。我希望阶段具有以下行为:

  • 总是跑build
  • deploy-test在其他分支上时自动运行master或在其他分支上手动运行
  • 手动运行,仅在分支deploy-prod上可用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
Run Code Online (Sandbox Code Playgroud)

全管道配置:

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
Run Code Online (Sandbox Code Playgroud)

Kou*_*und 7

我让它工作的唯一方法就是\xe2\x98\x91\xef\xb8\x8f Skipped pipelines are considered successful设置Setttings > General > Merge requests > Merge Checks

\n

Gitlab 设置 > 常规 > 合并检查并选中跳过的管道被视为成功选项

\n

并将手动步骤标记为“allow_failure”

\n
upload:\n  stage: \'upload\'\n  rules:\n    # Only allow uploads for a pipeline source whitelisted here.\n    # See: https://docs.gitlab.com/ee/ci/jobs/job_control.html#common-if-clauses-for-rules\n    - if: $CI_COMMIT_BRANCH\n      when: \'manual\'\n      allow_failure: true\n
Run Code Online (Sandbox Code Playgroud)\n

之后单击按钮Merge when Pipeline succeeds\xe2\x80\xa6\n当管道成功按钮时按下“合并”后的 Gitlab 屏幕截图

\n

\xe2\x80\xa6 将合并 MR,无需任何手动交互:

\n

显示 MR 已合并但未运行最后一步的屏幕截图

\n


Ale*_*hin 0

我已经使用以下内容打开了从分支“mybranch”到“master”的合并请求.gitlab-ci.yml

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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • only已被弃用,所以我将其替换为if
  • 我添加了 Alpine 镜像以使作业运行得更快(更小的容器);不影响逻辑

当我将更改推送到分支“mybranch”时,GitLab 执行了以下操作:

  • 在我的 MR 上显示蓝色的“管道成功时合并”按钮
  • 运行“构建”阶段
  • 跳过“deploy-prod”阶段(仅在“master”分支上可用)
  • 给了我一个手动“播放”按钮来在“mybranch”上运行作业
  • 此时,管道状态为“阻塞”,MR 显示“管道阻塞。此合并请求的管道需要手动操作才能继续”
  • 现在我通过选择“管道”屏幕中的“播放”图标来手动启动“部署测试”阶段
  • 管道状态指示器变为“正在运行”,然后变为“已通过”
  • 我的合并请求显示管道已通过并为我提供了绿色的“合并”按钮