在Jenkinsfile中使用加载的脚本

时间:2016-07-27 05:38:59

标签: jenkins groovy jenkins-pipeline jenkinsfile

我有一个正在作为jenkins管道执行的脚本,它运行正常。我想将它重用于多个环境,因此我将所有代码移动到函数中并从多个文件加载它们。

图书馆档案 - 健康检查

#!groovy

@NonCPS
def check(type) {
    stage "prepare"
    echo "TEST1"
    props = readProperties file:'build.properties'
    echo "TEST2"
    stage "queues"
    checkQueues()
}

@NonCPS
def checkQueues() {
    txt = "http://ltxl0207.sgdcelab.sabre.com:8161/api/jolokia/read/org.apache.activemq:brokerName=localhost,destinationName=!/tss!/trip_source_updates,destinationType=Queue,type=Broker/QueueSize".toURL().getText(requestProperties: [Authorization: "Basic " + "admin:admin".getBytes().encodeBase64().toString()])
    json = new groovy.json.JsonSlurper().parseText(txt)
    echo "Got response: " + txt
}
return this;

使用它的文件 - Healthcheck-dev

#!groovy

node {
    checkout scm
    healthcheck = load 'Healthcheck'
    healthcheck.check('DEV')
}

麻烦的是脚本没有通过readProperties而准备阶段就停在那里,忽略了队列阶段:

[Pipeline] load
[Pipeline] { (Healthcheck)
[Pipeline] }
[Pipeline] // load
[Pipeline] stage (prepare)
Entering stage prepare
Proceeding
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

我做错了什么?当我将代码移动到单个文件时,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

您是否尝试使用位于同一存储库中的2个文件(“Healthcheck”&“Healtcheck-dev”)执行管道?因为当您从另一个SCM仓库加载脚本时,Jenkins实际上会为您加载的脚本创建另一个目录@script

您可能需要执行以下操作才能从正确的工作区加载常规脚本:

node {
    checkout scm
    dir("${projectWorkspace}@script") {
        healthcheck = load 'Healthcheck'
        healthcheck.check('DEV')
    }
}

${projectWorkspace}是您构建的原始工作区。