并行 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"

你应该很好。