Jenkins管道脚本变量被覆盖吗?

时间:2019-11-12 16:14:42

标签: jenkins jenkins-pipeline jenkins-groovy

我有一个jenkins管道脚本,可以在多个节点上并行运行各种测试套件。我不是詹金斯专家-大部分是从我们拥有的其他工作中复制粘贴。

有时我会遇到失败,因为archiveArtefacts命令以某种方式获得了错误的'tar_file'变量。

通常,套件名称内置在日志的tar文件中,然后将该tar文件存档到Jenkins,但是对于某些运行,该tar文件使用一个套件名称创建,然后存档步骤使用另一个名称(我已经看到其中并行步骤中的2或3个失败并出现这种错误的运行,而有些情况中只有1个失败。

以某种方式,在sh("tar -czf ${tar_file} ${host_logs}/*")archiveArtifacts artifacts: tar_file之间,tar_file的值已更改为另一个套件的值。

关于如何更改此设置以使tar_file在每个步骤中保持不变的任何想法吗?

try {
    stage('cuke_regression') {
        def stepsForCuke = [:]
        stepsForCuke['cuke_api'] = sectionCukeRegressionTests("api")
        stepsForCuke['cuke_admin'] = sectionCukeRegressionTests("admin")
        stepsForCuke['cuke_notification'] = sectionCukeRegressionTests("notification")
        stepsForCuke['cuke_public'] = sectionCukeRegressionTests("public")
        stepsForCuke['cuke_project'] = sectionCukeRegressionTests("project")
        stepsForCuke['cuke_group'] = sectionCukeRegressionTests("group")
        stepsForCuke['cuke_review'] = sectionCukeRegressionTests("review")
        stepsForCuke['cuke_workflow'] = sectionCukeRegressionTests("workflow")
        stepsForCuke['cuke_review_comment'] = sectionCukeRegressionTests("review_comment")
        parallel stepsForCuke
    }
} 

def sectionCukeRegressionTests(suite) {
    section = 'cukes'
    return {
        section: {
            node('docker-node') {
                tar_file = "cukes-"+suite+"-logs.tgz "
                try {
                        sh("docker-compose exec ... run the tests \"")
                        sh("tar -czf ${tar_file} ${host_logs}/*")
                } finally {
                    sh("docker-compose down")
                    archiveArtifacts artifacts: tar_file
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Dibakar关于将tar_file变量设为“ def”变量的建议已经解决了我的问题。