jenkins - 如何将数组分配给Jenkinsfile中的Env变量
问题描述
我正在尝试运行具有多个服务器的管道。选择选择参数时,我想一次在多个服务器中执行一些操作。我的想法是选择一个选择参数“应用程序”并在 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'
"""
}
}
}
}
} }
如果在“使用参数构建”中选择了“APPLICATION”参数,我想在“APPLICATION”变量的所有服务器上执行该操作。
任何帮助将不胜感激。
谢谢
解决方案
您不能在环境变量中存储数组类型的值。无论您尝试分配给 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"
}
}
}
}
}
}
当你运行这样的管道时,你会得到这样的东西:
推荐阅读
- java - firebase 逻辑的问题
- spring-boot - Spring Boot 数据源实现
- c - 不使用 WriteProcessMemory 写入进程内存
- c# - 使用 IValueConverter C# 的字符串到双倍转换器
- java - 根据视频长度倒计时
- jquery - 如何使用 Ajax 和 Asp.net 返回对象列表?
- angular - Karma tests using a Docker image of Chrome
- angular - 在 ionic 4 中为不同的 html 共享相同的控制器访问权限
- octave - 如何修复我的代码以正确检测和删除异常值
- ionic3 - ionic 3 地理位置无法在真实设备上运行