背景
在公司项目中有这样的需要。一个 jenkins job 有多个开发人员使用。但是每个开发人员都编译不用的代码模块。希望实现通过 build 时自选模块。完成各自构建。
解决方案
使用 自定义环境变量的方式来控制stage是否执行。废话不多说。直接讲解pipeline.
设置完成后web效果如下,这样在pipeline中。$model_name 就等于 所选择的字符串,且用逗号分割。 例如我们勾选pdk 和 ethfw 。则 $model_name = 'pdk,ethfw' 如果我们勾选pdk 和remote_device . 则 $model_name = 'pdk,remote_device '。
pipeline { environment{ //读取自定义变量Model_Name,正则判断"pdk"是否存在,如果存在,把字符串"pdk"赋值给 环境变量"_pdk"。如果不存在,把字符串"error"赋值给环境变量"_pdk"。 _pdk="${sh(script:' echo $Model_Name|grep -w -o "pdk" || echo "error" ', returnStdout: true).trim()}" _ethfw="${sh(script:' echo $Model_Name|grep -w -o "ethfw"|| echo "error" ', returnStdout: true).trim()}" //同上 _remote_device="${sh(script:' echo $Model_Name|grep -w -o "remote_device"|| echo "error" ', returnStdout: true).trim()}" //同上 } stages { stage('Build PDK') { //when条件判断当环境变量"_pdk" = "pdk"时,执行此stage,否则跳过此stage when { environment name: '_pdk', value: 'pdk' } steps { sh '''echo pdk''' } } stage('Build ethfw') { when { environment name: '_ethfw', value: 'ethfw' } steps { sh '''echo ethfw''' } } stage('Build remote_device') { when { environment name: '_remote_device', value: 'remote_device' } steps { sh '''echo remote_device''' } } } }