并行Jenkinsfile任务中的局部变量

时间:2019-10-08 09:13:43

标签: variables jenkins parallel-processing jenkins-pipeline pipeline

    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上,一次在Linux Jenkins Slave上。

我想我想要的东西很明显:一个与“ some_name_Windows”回显,和一个与“ some_name_Linux”回显,但是我得到类似“ some_name_Windows”和“ some_name_Windows_Linux”的信息。

在Jenkinsfile管道的两个(或多个)并行过程中,如何在一个从站上本地使用变量?

1 个答案:

答案 0 :(得分:0)

如果声明的变量不带def关键字,则该变量具有全局范围。更改为

def kw_job = "some_name"

你应该很好。