在Jenkins声明性流水线中并行运行非矩阵阶段和矩阵

w41d8nur  于 2022-09-20  发布在  Jenkins
关注(0)|答案(1)|浏览(169)

我正在转换我们的企业版本,以便它使用‘Matrix’指令(https://www.jenkins.io/blog/2019/11/22/welcome-to-the-matrix/),但我在优化它时遇到了麻烦。在预矩阵世界中,我们有一个构建步骤(生成JAR),然后是一个并行的‘包’步骤(生成Linux和Windows发行版),基本上是一个‘系统测试’阶段(在各种JVM上执行Windows和Linux发行版),我们在包和系统测试阶段并行地执行一些‘代码质量’检查。

这其中的很大一部分似乎是为了使用“矩阵”。因此, Package 显然是打造Windows和Linux平台的一个矩阵。而系统测试则是平台和JVM的另一个双轴矩阵。我可以很容易地让一个矩阵跟随另一个矩阵。到现在为止还好。

然而,作为一个异常值,我被“代码质量”这个词困住了。有没有办法让这些阶段与矩阵运算平行运行。一旦创建了构建,它们就是独立的(它们不需要等待打包)。它们也很耗时,所以将它们与两个矩阵阶段串联运行会使构建时间更长。Jenkins抱怨说,如果你把一个矩阵放在一个平行的阶段中。

关于如何将非矩阵阶段与矩阵并行运行,您有什么想法吗?

az31mfrm

az31mfrm1#

我想出了一个有点“更好”的解决方案:

stage {
    matrix {
        axes {
            axis {
                name 'ORIGAXIS'
                values 'ALPHA','BETA','BAR','BAZ'
            }
        }
        stages {
           stage ("alpha") {
               when { expression { env.ORIGAXIS == "ALPHA" } }
               steps {
                   alpha()
               }           
           stage ("beta") {
               when { expression { env.ORIGAXIS == "BETA" } }
               steps {
                   beta()
               }
           }
           stage ("Tests") {
               when { allOf
                   expression { env.ORIGAXIS != "ALPHA" }
                   expression { env.ORIGAXIS != "BETA" }
               }
               stages {
                   stage("First") {
                      originalFirst( ...)
                    }
                   stage("Second") {
                      originalSecond(...)
                   }
                }
            }
     }
}

当然,最终的布局并不完美。但是,它的工作并不是那么麻烦,而且仍然很容易维护。

相关问题