Декларативная матрица работал лучше всего для меня:
pipeline {
agent none
stages {
stage('BuildAndTest') {
matrix {
agent {
label "${PLATFORM}-agent"
}
axes {
axis {
name 'PLATFORM'
values 'linux', 'windows'
}
}
stages {
stage('Test') {
steps {
echo "Do Test for ${PLATFORM}"
}
}
}
post {
always {
junit "**/TEST-*.xml"
}
}
}
}
}
}
Этот конвейер будет выполнять определенные этапы вкл. действия пост-сборки на обеих платформах без никакого дублирования кода.
Цитата из сообщения в блоге Jenkins о декларативной матрице:
Эквивалент конвейер, созданный без матрицы, легко будет в несколько раз больше, и его будет сложнее понять и поддерживать.