【问题标题】:How to decouple Jenkins CI and gitlab CI pipelines?如何解耦 Jenkins CI 和 gitlab CI 流水线?
【发布时间】:2022-01-14 09:20:01
【问题描述】:

到目前为止,我只与 Jenkins 合作过。我们已经配置了一个多分支管道作业来自动构建和测试软件。这些任务是用 Groovy 编写的,并以 Jenkinsfile 的形式存储在我们的 git 存储库的根目录中。

最近,我们决定添加另一种机制来自动生成文档。使用 GitLab CI 已经实现了文档的生成(但这可以是任何其他任务)。

两个管道实际上是独立的 - 两者都由 git commit/push 触发。我不明白的是:Jenkins 管道执行为什么以及如何与 GitLab CI 管道相关联?在以下屏幕截图中,出现了一个新列“External” - 代表 Jenkins 管道作业。

这并不是什么大问题。但由于两条管道应该是独立的 - 运行的结果不应相互影响。但是,似乎当 Jenkins 作业失败时,即“外部”,GitLab CI 管道也失败了:

有没有办法更好地解耦这些管道,即让它们单独失败或成功?

【问题讨论】:

    标签: jenkins gitlab jenkins-pipeline gitlab-ci


    【解决方案1】:

    Jenkins 管道执行为何以及如何与 GitLab CI 管道相关联?在以下屏幕截图中,出现了一个新列“External” - 代表 Jenkins 管道作业。

    一般来说,“外部”状态是使用 commit build status API 创建的——Jenkins 使用此 API 向 GitLab CI 报告 Jenkins 管道构建状态。

    Jenkins 的此外部状态出现在您的 GitLab 管道中,因为您有 configured your Jenkins server/project 向 GitLab 报告构建状态,或者您在 GitLab 中设置了 webhook integration with Jenkins(请注意,这些可能在组级别或由管理员,不一定是项目级别)

    要从您的管道中删除它,您应该禁用任何现有的集成配置,并独立于任何 GitLab 集成设置您的 Jenkins 项目。例如使用 git polling 触发 jenkins 构建并删除您的 groovy 脚本/构建阶段中的任何 updateGitlabCommitStatus 调用。

    【讨论】:

      【解决方案2】:

      这是因为Gitlab Branch Source Plugin 会自动通知 Gitlab 关于当时的 Jenkins 管道状态。这使您可以直接在 Gitlab 中查看构建的结果。如果你想在 Gitlab 中只有 Gitlab CI 管道的结果,你可以禁用这个功能:

      其他特性:
      可以通过选择添加来选择这些特征 行为部分。
      [...]
      跳过管道状态通知 - 禁用通知 GitLab 服务器 关于管道状态。
      [...]

      所以在你的 Gitlab 组中,只需转到配置 > 项目 > Gitlab 组 > 添加并选择跳过管道状态通知。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        相关资源
        最近更新 更多