Die*_*uin 3 jenkins jenkins-groovy jenkins-pipeline
我正在尝试运行具有多台服务器的管道。选择选择参数时,我想一次在多个服务器中执行一些操作。我的想法是选择一个选择参数“APPLICATION”并在 4 个不同的服务器上依次执行一些操作(一次一个服务器)。我试图将环境变量分配给一个数组中的服务器的值,然后请求环境变量来执行操作。
pipeline {
agent {
node {
label 'master'
}
}
environment {
APPLICATION = ['veappprdl001','veappprdl002','veappprdl003','veappprdl004']
ROUTER = ['verouprdl001','verouprdl002']
}
parameters {
choice(name: 'SERVER_NAME', choices: ['APPLICATION','ROUTER'], description: 'Select Server to Test' )
}
stages {
stage ('Application Sync') {
steps {
script {
if (env.SERVER_NAME == 'APPLICATION') {
sh """
curl --location --request GET 'http://${SERVER_NAME}//configuration-api/localMemory/update/ACTION'
"""
}
}
}
}
} }
Run Code Online (Sandbox Code Playgroud)
如果在“带参数的构建”中选择了“应用程序”参数,我想在“应用程序”变量的所有服务器上执行操作。
任何帮助将不胜感激。
谢谢
您不能在环境变量中存储数组类型的值。您尝试分配给 env 变量的任何内容都会自动转换为字符串类型。(我在下面的博客文章或这个视频中更详细地解释了它。)所以当你尝试分配一个数组时,你分配的是它的toString()表示。
但是,您可以以不同的方式解决此问题。您可以使用公共分隔符(,例如)存储一串值,而不是尝试分配数组。然后在希望使用元素列表的部分中,您只需调用tokenize(",")方法来生成字符串元素列表. 有了它,您就可以迭代并按顺序执行操作。
请考虑以下说明此替代解决方案的示例。
pipeline {
agent any
environment {
APPLICATION = "veappprdl001,veappprdl002,veappprdl003,veappprdl004"
}
stages {
stage("Application Sync") {
steps {
script {
env.APPLICATION.tokenize(",").each { server ->
echo "Server is $server"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当你运行这样的管道时,你会得到这样的东西:
| 归档时间: |
|
| 查看次数: |
1937 次 |
| 最近记录: |