如何基于多个/不同的参数多次运行Jenkins管道.(有关更多详细信息,请参阅说明)



我在管道中使用了一个字符串参数。name="name1,name2"(在单个文本框中,用户将输入用逗号分隔的名称(

我正在使用标记化方法将此字符串转换为列表。在此之后,列表将具有[名称1,名称2]

我有一个包含3个阶段(构建、测试、部署(的管道脚本。在上述情况下,只有两个名称。因此,这个流水线应该执行2次。同样,根据我们传递的名称数量,管道应该运行那么多次。

在看到下面的代码后,您会对我实际询问的内容有所了解。

//Getting values using String Parameter in Jenkins. "name1, name2" is entered for "NAMES" as input
//Tokenize will turn "name1, name2" to [name1, name2]
namesList = params.NAMES.tokenize(',') 
for(name in namesList){
.......
//Pipeline should be triggered using 'name1' and 'name2', either one by one or parallel.   
}
pipeline{
agent any
stages{
stage('build'){
steps{
sh 'curl https://abc.xyz/'+ name +'/sample'   //name should be passed to run this command
}
}
stage('test'){
......
}
stage('deploy'){
......
}
}

第一次迭代:应将name1传递给管道。

第二次迭代:应将name2传递到管道。

可以一个接一个地执行,也可以并行执行。欢迎这两个答案。

不幸的是,据我所知,这不能用声明性管道来完成,因为没有办法拥有动态阶段和/或并行分支(我没有这个事实的来源,但从文档和实现中可以看出,这是不可能的(。幸运的是,脚本化的管道更具动态性,能够为您的需求提供便利。以下代码应按要求工作:

def namesList = params.NAMES.tokenize(',')
def parts = [:]
namesList.each { name ->
parts[name] = {
stage('build'){
echo "build for ${name}"
}
stage('test'){
echo "test for ${name}"
}
stage('deploy'){
echo "deploy for ${name}"
}
}
}
parallel parts

代码非常简单,我们标记输入参数,声明一个映射来存储不同的分支。循环遍历这些名称,对于每个名称,我们在分支中分配一个元素,该元素带有一个定义流步骤的闭包。然后我们使用并行步骤执行分支。

编辑2019-11-25最近添加的矩阵指令(目前处于测试版(可以解决您的问题。我还没有尝试过,但如果可以在轴部分引用参数,那么你可以有一个动态的分支数量。

相关内容

最新更新