Gitlab 管道 - 而不是 1,2 是 运行

Gitlab pipeline - instead of 1, 2 are running

我想在 Gitlab 管道中添加一个阶段,该阶段验证批准 MR 的人与执行 creation/merge 的人不同(为此,我检查了 Gitlab 中的设置: “管道必须成功”)。

stages: 
  - quality

...

check-approval:
  stage: quality
  only:
    - merge_request 
  script:
    - >
      author=$(curl -s --location --request POST 'https://xxxxx.com/api/graphql' --header 'Content-Type: application/json' --header "JOB-TOKEN: $CI_JOB_TOKEN" --data-raw '{"query":"query{project(fullPath: \"yyyyy/yyyyy/yyyyy\") {mergeRequest(iid:\"'$CI_MERGE_REQUEST_IID'\"){approvedBy{nodes{name}}author{name}}}}"}' | jq '.data.project.mergeRequest.author.name')
    - >
      approvedBy=$(curl -s --location --request POST 'https://xxxxx.com/api/graphql' --header 'Content-Type: application/json' --header "JOB-TOKEN: $CI_JOB_TOKEN" --data-raw '{"query":"query{project(fullPath: \"yyyyy/yyyyy/yyyyy\") {mergeRequest(iid:\"'$CI_MERGE_REQUEST_IID'\"){approvedBy{nodes{name}}author{name}}}}"}' | jq '.data.project.mergeRequest.approvedBy.nodes[].name')
    - if [[ "$author" == "$approvedBy" ]]; then exit 1; else echo "MR can be merged"; fi

但是,因为我只添加了项目:-merge_request,所以有两个管道运行ning(分支+合并)并行。

我的问题是:

为了避免重复管道:

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
      when: never # skip branch pipelines when MR is open for this ref
    - if: '$CI_COMMIT_BRANCH' # run branch pipelines if MR is not open on this ref

这样,您仍然可以获得合并请求管道,并且还可以获得分支管道,但前提是未创建 MR 管道,从而避免 MR 上的重复管道。

is there any way to only run the stage of the pipeline that gave an error?

您可以使用管道视图上的“重试”按钮,这将重试任何失败的作业,并在重试成功时允许管道继续进行。已经成功的作业将不再重试。