[英]How can I update a global Environment Variable using Groovy PostBuild in Jenkins permanently and use it in other subsequent builds?
我有一個要求,我只想在以前的類似事件關閉時才創建一個 Service Now 事件。 我正在使用 Jenkins 自由式工作。 我采取的方法如下:-
到目前為止,我已經通過使用各種插件實現了第 3 步。 為了實現第 4 步,我正在使用 groovy 構建后插件,這樣我就可以永久更新全局環境變量,以便在我的下一個構建中可用,這樣我就可以在創建新的之前檢查事件的狀態. 我想出了一個代碼,但它似乎並沒有永久更新變量(通過在后續構建中打印變量來驗證)。 根據我的要求,該腳本還有其他部分,但 SNOW_INC 是我想要永久更新的全局變量,直到下一次構建。
import groovy.json.JsonSlurper
import hudson.model.*
def workspace = manager.build.getEnvVars()["WORKSPACE"]
def console = manager.listener.logger.&println
build = Thread.currentThread().executable
String jobName = build.project.getName()
job = Hudson.instance.getJob(jobName)
my_env_var = job.getLastBuild().getEnvironment()["SNOW_INC"]
console(my_env_var)
try{
def inputFile = new File(workspace, 'response.json')
if (inputFile != null){
JsonSlurper slurper = new JsonSlurper()
parsedJson = slurper.parse(inputFile)
String number= parsedJson.result.number
console("${number}")
System.setProperty("hudson.model.ParametersAction.safeParameters", "INC_NUMBER")
manager.build.addAction(
new ParametersAction(
new StringParameterValue("INC_NUMBER", "${number}")
)
)
manager.build.addAction(
new ParametersAction(
new StringParameterValue("SNOW_INC", "${number}")
)
)
console("Environment Variable set")
}
} catch (Exception e){
println("response.json file was not ")
}
任何幫助,將不勝感激!
無論如何,幾天后找到了解決方案。 因此,為了修改可在任何作業或任何構建中使用的全局環境變量,如下所示(如前所述,在 Groovy Postbuild 中使用):
nodes = Jenkins.getInstance().getGlobalNodeProperties()
nodes.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
if ( nodes.size() != 1 ) {
console("error: unexpected number of environment variable containers: "
+ nodes.size()
+ " expected: 1")
} else {
envVars= nodes.get(0).getEnvVars()
envVars.put("SNOW_INC", "${number}")
Jenkins.getInstance().save()
}
因此,在創建新事件的任何運行之后,我將使用更新后的編號更新環境變量“SNOW_INC”。 然后在另一個工作中使用它來根據場景驗證該事件是否開放。 奇跡般有效!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.