jenkins - Jenkins 管道 - 如何读取输入参数、拆分其值并将值传递给构建作业?
问题描述
我配置了一个詹金斯管道,它调用不同的构建作业并将不同的值传递给作业。我配置了多个套件,这些套件会触发作业并行运行。这是示例代码:
pipeline {
agent any
parameters {
string(name: 'ARRAY', defaultValue: 'AR1234', description: 'Enter array. ')
string(name: 'email_recepients', defaultValue: 'abc@xyz.com', description: 'Enter email id')
choice(name: 'regression_suite', choices: ['suite1', 'suite2', 'all'], description: '')
choice(name: 'PRODUCT_RELEASE', choices: ['R1', 'R2'], description: 'Release on which test is being run')
choice(name: 'interface', choices: ['int1', 'int2'], description: 'interface to use?')
choice(name: 'Update_UTMS', choices: ['false', 'true'], description: 'Update UTMS/QC? If yes, select true')
string(name: 'testset_id_1', defaultValue: 'NA', description: 'If Suite1, enter xxx ID <br> \
If Suite2, enter yyy ID <br> ')
string(name: 'testset_id_2', defaultValue: 'NA', description: 'If Suite1, enter zzz ID <br> \
If Suite2, enter aaa ID <br> ')
string(name: 'testset_id_3', defaultValue: 'NA', description: 'If Suite1, enter bbb ID <br> \
If Suite2, enter ccc ID <br>')
string(name: 'testset_id_4', defaultValue: 'NA', description: 'If Suite1, enter ddd ID <br> \
If Suite2, enter fff ID <br>')
string(name: 'testset_id_5', defaultValue: 'NA', description: 'If Suite1, enter eee ID')
string(name: 'testset_all', defaultValue: '1,2,3,4,5,6,7,8,9', description: 'All of Testset IDs')
}
stages {
stage('Starting Suite1 (Parallel execution)') {
when {
expression {
params.regression_suite == "suite1" || params.regression_suite == "all"
}
}
steps {
script {
try {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
suite1()
}
} finally {
echo "Suite1 completed, but we continue"
}
}
}
}
stage('Starting Suites2 (Parallel execution)') {
when {
expression {
params.regression_suite == "suite2" || params.regression_suite == "all"
}
}
steps {
script {
try {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
suite2()
}
} finally {
echo "Suite2 completed, but we continue"
}
}
}
}
}
}
def suite1() {
parallel(
bla1: {
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla1'), string(name: 'Interface', value: params.interface + '_0'),booleanParam(name: 'Update_UTMS', value: params.Update_UTMS), string(name: 'utms_testset_id', value: "${params.testset_id_1}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
bla1: {
sleep(60)
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla2'), string(name: 'Interface', value: params.interface + '_1'),booleanParam(name: 'Update_UTMS', value: params.Update_UTMS), string(name: 'utms_testset_id', value: "${params.testset_id_2}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
bla3: {
sleep(120)
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla3'), string(name: 'Interface', value: params.interface + '_2'),booleanParam(name: 'Update_UTMS', value: params.Update_UTMS), string(name: 'utms_testset_id', value: "${params.testset_id_3}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
bla4: {
sleep(180)
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla4'), string(name: 'Interface', value: params.interface + '_3'),booleanParam(name: 'Update_UTMS', value: false), string(name: 'utms_testset_id', value: "${params.testset_id_4}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
bla5: {
sleep(240)
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla5'), string(name: 'Interface', value: params.interface + '_4'),booleanParam(name: 'Update_UTMS', value: params.Update_UTMS), string(name: 'utms_testset_id', value: "${params.testset_id_5}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
failFast: false)
}
def suite2() {
parallel(
bla6: {
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla6'), string(name: 'Interface', value: params.interface + '_0'), string(name: 'utms_testset_id', value: "${params.testset_id_1}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
bla7: {
sleep(60)
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla7'), string(name: 'Interface', value: params.interface + '_1'), string(name: 'utms_testset_id', value: "${params.testset_id_2}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
bla8: {
sleep(180)
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla8'), string(name: 'Interface', value: params.interface + '_3'), string(name: 'utms_testset_id', value: "${params.testset_id_3}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
bla9: {
sleep(240)
build job: 'sd_regression',
parameters: [string(name: 'ARRAY', value: "${params.ARRAY}"), string(name: 'email_recepients', value: "${params.email_recepients}"), string(name: 'test_type', value: 'bla9'), string(name: 'Interface', value: params.interface + '_4'), string(name: 'utms_testset_id', value: "${params.testset_id_4}"), string(name: 'PRODUCT_RELEASE', value: params.PRODUCT_RELEASE)]
},
failFast: false)
}
在这里,我有一个名为regression_suite的输入参数,它有一个名为all的选项。如果选择全部,则用户将为参数testset_all提供逗号分隔值(例如:1,2,3,4,5)。
我想要一个代码,我可以在其中读取这些值并将它们拆分并将其存储在变量中。然后我会将这些值替换为我的工作参数。
示例:
var_1= 1
var_2= 2
var_3= 3 等等。谢谢你。
解决方案
您可以使用下面的管道脚本,我已经遍历数组并打印了值,而不是 echo 语句,您可以将其分配给变量。
def loop_func(values){
values.each {
item -> echo "Hello ${item}"
}
}
pipeline {
agent any
parameters {
choice(name: 'regression_suite', choices: ['suite1', 'suite2', 'all'], description: '')
string(name: 'testset_all', defaultValue: '1,2,3,4,5,6,7,8,9', description: 'All of Testset IDs')
}
stages {
stage ("Test Stage"){
when {
expression {
"${params.regression_suite}" == "all"
}
}
steps {
script {
def values = "${params.testset_all}".split(',')
loop_func(values)
}
}
}
}
}
更新:
def loop_func(values){
for (int i=0; i<values.size();i++) {
env."var_${i}"=values[i]
}
}
pipeline {
agent any
parameters {
choice(name: 'regression_suite', choices: ['suite1', 'suite2', 'all'], description: '')
string(name: 'testset_all', defaultValue: '1,2,3,4,5,6,7,8,9', description: 'All of Testset IDs')
}
stages {
stage ("Test Stage"){
when {
expression {
"${params.regression_suite}" == "all"
}
}
steps {
script {
def values = "${params.testset_all}".split(',')
loop_func(values)
echo "The final Value is : ${env.var_6}"
}
}
}
stage("Test Stage2"){
steps{
echo "${env.var_8}"
}
}
}
}
推荐阅读
- python - 如何打印两个句子之间的所有内容?
- blockchain - 如何查看以太坊区块的原始数据?
- c# - 如何正确地将 IMAGELIST 中的 HICON 保存为图像文件
- python - 如何在列表列表中为元素添加元素?
- javascript - setAttribute、onclick、eventListener 不起作用
- python - 熊猫:更好的交叉加入方式?
- wpf - WPF - 绑定用户控件内容
- go - Go 频道似乎没有被阻塞,尽管应该是
- ionic-framework - FAILURE: Build failed with an exception. in ionic
- css - 背景大于 Circle Div CSS 的问题