是否可以将变量从Jenkins管道作业脚本传播到加载的Jenkins文件脚本?
我想知道是否有可能将jenkins管道作业中的变量define传递给加载的脚本,如。 加载的脚本 管道作业是否可以将变量从Jenkins管道作业脚本传播到加载的Jenkins文件脚本?,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我想知道是否有可能将jenkins管道作业中的变量define传递给加载的脚本,如。 加载的脚本 管道作业 node { // Some declaration and code stage('Prepare deploy') { // Create a talbe for the servers lists def servers = [:] // For each server know, if deployment i
node {
// Some declaration and code
stage('Prepare deploy') {
// Create a talbe for the servers lists
def servers = [:]
// For each server know, if deployment is enabled
// deploy resources
params.each { srv, value ->
if ("$value" == "true"){
// add the current current to the enabled servers
servers["Server ${srv}"] = {
// Define specific variable
String SERVER=props."SRV_${srv}"
String CONF=env.DEPLOY_HOME + "/${srv}"
// Install server - the SERVER and CONF variable need to be propagate to the others scripts
load env.JENKINSFILES_DIRECTORY + "/server-configuration"
load env.JENKINSFILES_DIRECTORY + "/server-deploiement"
load env.JENKINSFILES_DIRECTORY + "/server-postconfig"
load env.JENKINSFILES_DIRECTORY + "/server-start"
}
}
}
parallel servers
}
}
服务器配置文件
#!/usr/bin/env groovy
node{
// Some declaration
stage('configure serveur'){
// The variable SERVER and CONF must be visible here
// is it possible ?
sh "ssh -X " + env.USER +"@${SERVER} 'sh echo \"${CONF}\"'"
}
}
谢谢,您正在寻找的是withEnv
node {
// Some declaration and code
stage('Prepare deploy') {
// Create a talbe for the servers lists
def servers = [:]
// For each server know, if deployment is enabled
// deploy resources
params.each { srv, value ->
if ("$value" == "true"){
// add the current current to the enabled servers
servers["Server ${srv}"] = {
// Install server - the SERVER and CONF variable need to be propagate to the others scripts
withEnv(["SERVER=props.SRV_${srv}","CONF=env.DEPLOY_HOME + ${srv}"]){
load env.JENKINSFILES_DIRECTORY + "/server-configuration"
load env.JENKINSFILES_DIRECTORY + "/server-deploiement"
load env.JENKINSFILES_DIRECTORY + "/server-postconfig"
load env.JENKINSFILES_DIRECTORY + "/server-start"
}
}
}
}
parallel servers
}
}
服务器配置
#!/usr/bin/env groovy
node{
// Some declaration
stage('configure serveur'){
// The variable SERVER and CONF must be visible here
// is it possible ?
sh "ssh -X " + env.USER +"@${env.SERVER} 'sh echo \"${env.CONF}\"'"
}
}
非常感谢你。我试过使用env,效果很好。我正要写一篇评论,这时我看到了你的答案。我在你的脚本上得到了另一个提示:因为加载的脚本有自己的节点块,所以不应该在节点块内进行并行调用,因为这只会无缘无故地阻塞一个节点。如果运行时间只有几秒钟,这不会有什么影响。但是,如果节点不足,您可以阻止一个节点,直到另一个节点空闲。。。只是说:)哼。。。谢谢如果我能理解你说的话,我还是那样做好吗?def服务器。。。。节点{}。。。。parralel服务器?(parralel调用在节点内?)或者我在加载的脚本中抑制节点块?这将取决于您的需要。如果您能够重用该节点,我更愿意这样做,因为对于大型Jenkins实例,打开新节点块可能需要几分钟的时间。谢谢您的回答。我做了一些尝试。因此,出于我的需要,最好删除服务器配置文件中的节点块。谢谢