[英]JenkinsFile: How to set env.variable at runtime from a script?
[英]How to assign an array to a Env variable in Jenkinsfile
我正在嘗試運行具有多個服務器的管道。 選擇選擇參數時,我想一次在多個服務器中執行一些操作。 我的想法是 select 選擇參數“應用程序”並在 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"
}
}
}
}
}
}
當你運行這樣的管道時,你會得到這樣的東西:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.