Jenkins Matrix是一个声明式的parallel指令,可以明文同步执行的工具,一旦声明,可以在它的子指令模块中当作环境变量来使用。
最常见的用法是设置不同的agent
...
matrix {
axes {
axis {
name 'OS_VALUE'
values "linux", "windows", "mac"
}
}
agent {
label "${OS_VALUE}-agent"
}
}
使用matrix的时候,有时需要对特定的label进行特殊设置,比如对与Android build环境设置ANDROID_HOME变量。其中一个方便的方法是直接在sh中运行命令:
pipeline {
agent none
environment {
ANDROID_HOME='/usr/local/android-sdk-linux'
}
stages {
stage('build and test') {
matrix {
axes {
axis {
name 'label_name'
values 'android_build', 'mac_build', 'windows_build'
}
}
agent { label "${label_name}"}
stages {
stage('prepare android home') {
when {equals expected: "android_tests", actual: "${label_name}"}
steps {
sh "export ANDROID_HOME=${env.ANDROID_HOME}"
}
}
}
}
}
}
}