Параллельный конвейер DSL: смешивание между деталями заданий (в нисходящем направлении) из-за параллельного - PullRequest
0 голосов
/ 23 июня 2019

Когда мы выполняем задание DSL с использованием pipline, иногда возникают случаи, когда параллельно некоторые задания содержат неверные данные, например, неправильные URL-адреса подключаемых модулей artifcats, возможно, из-за параллельного выполнения,

Детали задания иногда не отображаются правильно и не смешиваются с другими заданиями, когда мы работаем параллельно на одной и той же линии трубопровода, обычно когда мы выполняем ~ 100 заданий

на этапе я определил массив задач, включая задание сборки >> v2_Core_Task_Runner_Slack (downStream), copyAtrifcate и отчеты, наконец, мы используем команду параллельного задания для его параллельного выполнения, но иногда задания смешиваются с другими заданиями (параметр pJob ) см. код ниже

stage ("Run Tests") {

        steps {

            script {

                tasks = [:]
                products_set = [].toSet()

                features_list.each {

                    def featureName = it.key

                    tasks[featureName] = {

                        withEnv(["FEATURE_NAME=${featureName}"]) {


                            def valArr = it.value.split(",")
                            def productName = valArr[0]
                            def productPath = valArr[1]


                                println "Run test startTime : " + metaData["tests"][it.key]['phases']['Run Tests']["startTime"]

                            println "Calling build for feature '${featureName}' in job '${productName}'"
                            pJob = build job: "v2_Core_Task_Runner_Slack", propagate: false, parameters: [
                                [$class: 'StringParameterValue', name: 'FeatureName', value: "${featureName}"],
                                [$class: 'StringParameterValue', name: 'FeaturePath', value: "${productPath}"],
                                [$class: 'StringParameterValue', name: 'TagName', value: "${params.TagName}"],
                                [$class: 'StringParameterValue', name: 'Environment', value: "${params.Environment}"],
                                [$class: 'BooleanParameterValue', name: 'CreateTenant', value: params.CreateTenant],
                                [$class: 'StringParameterValue', name: 'TagNameCondition', value: "${params.TagNameCondition}"],
                                [$class: 'StringParameterValue', name: 'TenantTemplate', value: "${params.TenantTemplate}"],
                                [$class: 'StringParameterValue', name: 'ClientLabel', value: "${params.ClientLabel}"],
                                [$class: 'StringParameterValue', name: 'SlackChannel', value: "${params.SlackChannel}"]
                            ]
                            metaData["tests"][it.key]['phases']['Run Tests']["endTime"] = getEpochTime();
                            metaData["tests"][it.key]['consoleUrl'] = pJob.getAbsoluteUrl();
                            metaData["tests"][it.key]['result'] = pJob.getResult();

                            println "Job result = " + pJob.getResult() + ", Url: " + pJob.getAbsoluteUrl()

                            println "Copy artificats to 'allreports/${productName}/${featureName}'"

                            copyArtifacts(
                                projectName: 'v2_Core_Task_Runner_Slack',
                                filter: '**/report.json',
                                fingerprintArtifacts: true,
                                target: "allreports/${productName}/${featureName}",
                                flatten: true,
                                selector: specific(pJob.getId()),
                                optional: true
                            )



                            products_set.add(productName)

                        }
                    }
                }

                parallel tasks
                metaData["endTime"] = getEpochTime()
                metDataStr = new JsonBuilder(metaData).toPrettyString()
            }

}

}

see problem below in LOGS: same URLs (1576 X 2) are pointing to the same runner job path, issues with parallelization 

*[CreateDeleteObjectHistory] Job result = SUCCESS, Url: http://TestServerJenkins_Auto1:8080/job/v2_Core_Task_Runner_Slack/1576/
[Pipeline] [CreateDeleteObjectHistory] echo
[CreateDeleteObjectHistory] Copy artificats to 'allreports/MobileNative/CreateDeleteObjectHistory'
[Pipeline] [CreateDeleteObjectHistory] step
[CreateDeleteObjectHistory] Copied 1 artifact from "v2_Core_Task_Runner_Slack" build number 1576
[Pipeline] [Sanity-RightClickSchedule] echo
[Sanity-RightClickSchedule] 20190617-13:16:05.697
[Pipeline] [Sanity-RightClickSchedule] echo
[Sanity-RightClickSchedule] Job result = SUCCESS, Url: http://TestServerJenkins_Auto1:8080/job/v2_Core_Task_Runner_Slack/1576/
[Pipeline] [Sanity-RightClickSchedule] echo
[Sanity-RightClickSchedule] Copy artificats to 'allreports/Sanity/Sanity-RightClickSchedule'
[Pipeline] [Sanity-RightClickSchedule] step
[Sanity-RightClickSchedule] Copied 1 artifact from "v2_Core_Task_Runner_Slack" build number 1576
[Pipeline] [Sanity-ScheduleUpdate] readFile*
...