我尝试在 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。
我已经找出原因了。当我们创建 mr 时,gitlab 会检查 api 响应中的 mr 状态,即 [merge_status]。当 merge_status 为“checking”时,尝试接受 mr 将得到一个[分支无法合并]错误。
我通过轮询 merge_status 修复了我的脚本,并在 merge_status 未“检查”时尝试接受 mr。
这里有一个问题启发了我。