尝试在gitlab-ci中接受mr,有时会得到“分支无法合并”

问题描述 投票:0回答:1

我尝试在 gitlab-ci.yml 中实现一个自动工作流程,它提供了一个名为“auto_check”的阶段,由 gitlab merge_request_event 触发。在这个阶段,它尝试重新设置基准,并检查 mr 标题,如果标题中包含“#force_mr”,则尝试接受 Rest Api 的 mr。 有时工作正常,但管道经常运行失败,我检查日志,得到[Invoke-RestMethod : {"message":"分支无法合并"}]。管道失败后,我重试管道,它会正常工作。 这让我很困惑。仍在运行的 Merge Tain 进程是否会导致我的管道失败? 感谢您的帮助。 这是我的 ci 脚本:

auto_mr_check:
  stage: auto_check
  tags:
    - windows
  script:
    - |
      $headers = @{
        sometoken
      }
      $mrTitle = $env:CI_MERGE_REQUEST_TITLE
      Write-Output "Merge Request title: $mrTitle"
      
      $rebaseUrl = "$($env:CI_API_V4_URL)/projects/$($env:CI_PROJECT_ID)/merge_requests/$($env:CI_MERGE_REQUEST_IID)/rebase"
      Invoke-RestMethod -Uri $rebaseUrl -Method Put -Headers $headers

      if ($mrTitle -match "#force_mr") {
        Write-Output "Found keyword in title, attempting to merge..."
        $mergeUrl = "$($env:CI_API_V4_URL)/projects/$($env:CI_PROJECT_ID)/merge_requests/$($env:CI_MERGE_REQUEST_IID)/merge"
        Invoke-RestMethod -Uri $mergeUrl -Method Put -Headers $headers
      } else {
        Write-Output "Keyword not found in title, skipping merge."
      }
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: on_success
  variables:
    GIT_STRATEGY: none # Do not clone the repository

检查 gitlab 文档。 在 google 中搜索 ci mr。

git gitlab gitlab-ci gitlab-ci-runner gitlab-api
1个回答
0
投票

我已经找出原因了。当我们创建 mr 时,gitlab 会检查 api 响应中的 mr 状态,即 [merge_status]。当 merge_status 为“checking”时,尝试接受 mr 将得到一个[分支无法合并]错误。

我通过轮询 merge_status 修复了我的脚本,并在 merge_status 未“检查”时尝试接受 mr。

这里有一个问题启发了我。

© www.soinside.com 2019 - 2024. All rights reserved.