并行 Jenkinsfile 任务中的局部变量
Local variables in parallel Jenkinsfile task
tasks = [:]
availableNodes.each { nodeName ->
final def ProfilesForThisNode = getProfilesForNode(args.Profiles, nodeName)
if (ProfilesForThisNode) {
tasks[nodeName] = {
node(nodeName) {
try {
final def workspace = path("$path123")
ws("$workspace") {
stage("$nodeName transmission") {
kw_job = "some_name"
if (isWindows()) {
if (!kw_job.contains("Windows")) {
kw_job = kw_job + "_Windows"
}
}
else {
if(!kw_job.contains("Linux")) {
kw_job = kw_job + "_Linux"
}
}
echo kw_job
}
}
} catch (hudson.model.Run.RunnerAbortedException e) {
currentBuild.result = 'FAILURE'
}
}
}
}
}
parallel(tasks)
我使用这段代码(Jenkinsfile 的一部分)两次:一次是在 Windows Slave 上,一次是在 Jenkins 的 Linux Slave 上。
我认为我想要的很明显:一个回显 "some_name_Windows",一个回显 "some_name_Linux",但我得到类似 "some_name_Windows" 和 "some_name_Windows_Linux" 的结果。
如何在使用 Jenkinsfile 管道的两个(或更多)并行进程中在一个从站上本地使用变量?
如果你声明一个变量时没有使用 def
关键字,它就具有全局作用域。改成
def kw_job = "some_name"
你应该很好。
tasks = [:]
availableNodes.each { nodeName ->
final def ProfilesForThisNode = getProfilesForNode(args.Profiles, nodeName)
if (ProfilesForThisNode) {
tasks[nodeName] = {
node(nodeName) {
try {
final def workspace = path("$path123")
ws("$workspace") {
stage("$nodeName transmission") {
kw_job = "some_name"
if (isWindows()) {
if (!kw_job.contains("Windows")) {
kw_job = kw_job + "_Windows"
}
}
else {
if(!kw_job.contains("Linux")) {
kw_job = kw_job + "_Linux"
}
}
echo kw_job
}
}
} catch (hudson.model.Run.RunnerAbortedException e) {
currentBuild.result = 'FAILURE'
}
}
}
}
}
parallel(tasks)
我使用这段代码(Jenkinsfile 的一部分)两次:一次是在 Windows Slave 上,一次是在 Jenkins 的 Linux Slave 上。
我认为我想要的很明显:一个回显 "some_name_Windows",一个回显 "some_name_Linux",但我得到类似 "some_name_Windows" 和 "some_name_Windows_Linux" 的结果。
如何在使用 Jenkinsfile 管道的两个(或更多)并行进程中在一个从站上本地使用变量?
如果你声明一个变量时没有使用 def
关键字,它就具有全局作用域。改成
def kw_job = "some_name"
你应该很好。