【问题标题】:Jenkins pipeline partitioningJenkins 管道分区
【发布时间】:2020-05-14 01:10:03
【问题描述】:

我们有多个 jenkins 管道作业,步骤如下:

  1. 构建 -> 单元测试 -> 推送到工件
  2. 构建 -> 单元测试 -> 部署
  3. 构建 -> 单元测试 -> 集成测试

等等

管理层希望将所有这些统一到一个大管道中,目前我的团队有两种方法可以做到这一点:

a) 在包含所有阶段的大型管道作业上创建

这样做的缺点是我们不需要在每个单独的构建中部署或发布到工件,因此如果需要,内部会有一些 if 语句将跳过阶段 - 这将使构建历史完全混乱 - 因为一个构建可以做与另一个不同的事情(例如构建#1 发布二进制文件,以及构建#2 运行集成测试)。优点是我们拥有一个工作区和 jenkinsfile。

b) 为每个任务单元创建一个单独的作业。

如“构建”、“集成测试”、“发布”和“部署”,然后创建一个编排器作业,该作业将按阶段调用较小的作业。这样做的缺点是我们仍然将 CI 分散在不同的工作中,并且必须在两者之间传递工件。当然,优点是我们可以在需要时独立运行它们,因此如果您只需要单元测试 - 您只运行单元测试作业,这也会产生正常且有意义的构建历史。


能否请您指出您会选择 a 还是 b,否则您会怎么做?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    如果统一它们的原因是代码重复,请查看shared libraries。您的所有管道共有的Buildunit-tests 可以进入共享库,您可以从不同的管道调用库代码。

    【讨论】:

      【解决方案2】:

      我们有一个“大管道”,加了香料

              stage('Push') {
              when {
                  expression { env.PUSH_TO_ARTIFACTORY }
                  beforeAgent true
              }
              steps {
      

      等等

      关于历史,您可以更改构建描述,因此对于推送的构建,您可以在末尾添加 * 符号,例如

          def is_push = env.PUSH_TO_ARTIFACTORY ? " *" : ""
          currentBuild.displayName += "${is_push}"
      

      将所有内容放在一个文件中意味着您在修复问题时无需弄清楚要查看哪个文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        • 2020-08-24
        • 2023-03-09
        相关资源
        最近更新 更多