Gitlab双管道触发问题

Posted

技术标签:

【中文标题】Gitlab双管道触发问题【英文标题】:Gitlab Double pipeline triggering issue 【发布时间】:2022-01-09 05:05:01 【问题描述】:

推送提交时会触发两个管道作业。但是手动启动管道时没有发生同样的事情。

我应该在哪里检查? 左箭头或右箭头表示分支活动是什么意思?

我要说的是有一个合并请求待处理,会不会导致这个问题?

【问题讨论】:

【参考方案1】:

您的解决方案的问题是,它仅在您有合并请求事件时避免管道执行,但仍然会有重复的管道,例如合并请求管道(detached 的)和分支管道(其他),我认为在推送标签时,您的设置也会创建一个单独的管道。

按照文档,您可以在使用以下工作流规则集(我添加了|| $CI_COMMIT_TAG)时避免重复的管道和在分支管道和 MR 管道之间切换,因为在推送标签时也应该创建管道(但是也许只有少数工作会被添加到这个管道中)

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
      when: never
    - if: '$CI_COMMIT_BRANCH' || '$CI_COMMIT_TAG'

这个管道是一个合并请求管道,你可以看到这是因为它是 detached 并且因为合并请求符号和提交 id 左侧的 MR 编号

以下屏幕截图显示了一个“普通”分支管道,由提交 ID 左侧的分支名称和 GitLab 分支符号表示

【讨论】:

【参考方案2】:

待处理的合并请求会导致触发第二个管道作业。将以下内容添加到gitlab-ci.yml file 后解决

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: never
    - when: always

【讨论】:

第一条规则不会避免管道中的重复,它只会避免在打开合并请求时生成管道,请参阅下面的答案以获取更多信息和更新的规则集,但这是一个相当棘手的话题,我已经花了很多时间修复重复的管道

以上是关于Gitlab双管道触发问题的主要内容,如果未能解决你的问题,请参考以下文章

在 gitlab 中触发命名管道

在 Gitlab 中触发该管道后获取管道 ID

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改

仅针对特定分支的 gitlab 触发管道

Gitlab ci问题将工件传递到带有触发器和需要关键字的下游管道

触发 Gitlab CI/CD 管道以部署存储库的特定部分