您也许可以通过使用来做您想做的事locks https://www.jenkins.io/doc/pipeline/steps/lockable-resources/.
就我而言,我只是希望矩阵按顺序构建而不是并行构建,所以我只是将所有内容包装在一个阶段中并对其加锁。就像是:
stage( 'BuildAll' ) {
matrix {
axes {
...
}
stages {
stage( 'Sequential Matrix' ) {
options {
lock( 'synchronous-matrix' )
}
stages {
...
}
}
}
}
}
一次只能构建一个矩阵配置,因为在当前配置完成之前其他矩阵配置无法获取锁。
但就您而言,您希望模块一个接一个地构建in order。
锁定资源的字符串可以是动态的,因此我认为您可以使用从其他 2 个轴构造的名称来防止同时构建多个模块:
stage( 'BuildAll' ) {
matrix {
axes {
axis {
name 'PLATFORM'
values 'win32vc9', 'win32vc19'
}
axis {
name 'VARIANT'
values 'debug', 'release'
}
axis {
name 'MODULES'
values 'repo1/module1', 'repo1/module2', 'repo2/module1', 'repo2/module2'
}
}
stages {
stage( 'Force Sequential' ) {
options {
lock( "synchronous-${PLATFORM}-${VARIANT}" )
}
stages {
stage( 'Checkout' ) {
}
stage( 'Build' ) {
}
stage( 'Test' ) {
}
}
}
}
}
}
请注意,这只能保证同一平台和变体的模块不会同时构建,并且不会说明任何有关排序的信息。我不知道詹金斯选择构建轴的顺序是否已定义,但我发现矩阵排序插件 https://plugins.jenkins.io/Matrix-sorter-plugin如果有问题,这可能有助于订购。