2016-07-27 76 views
1

我有一個腳本正在作爲jenkins管道執行,它工作正常。我想在多個環境中重複使用它,所以我將所有代碼移到了函數中,並從多個文件中加載它們。在Jenkinsfile中使用加載的腳本

庫文件 - 健康檢查

#!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; 

文件使用它 - 健康檢查-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 

我在做什麼錯?當我將代碼移動到單個文件時,它可以正常工作。

回答

0

您是否嘗試使用2個文件(「Healthcheck」&「Healtcheck-dev」)在同一個存儲庫中執行管道?因爲當你從另一個SCM回購中加載腳本時,你似乎正在做的是,Jenkins實際上爲你的加載腳本創建了另一個目錄@script等等。

你可能需要做這樣的事情來加載從正確的工作區的一般腳本:

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

${projectWorkspace}爲您打造的原創工作區。

+0

我對這些文件使用相同的回購,他們坐在旁邊。 –

+0

你試圖讀取屬性的'build.properties'文件如何?您正在使用'checkout scm',但是包含groovy腳本的初始工作空間和包含'build.properties'文件的簽出工作空間可能並不相同,因此導致您的屬性文件找不到。 您可以嘗試從'$ {projectWorkspace} @ script/build.properties'訪問您的屬性文件嗎? – Pom12

+0

但是爲什麼當我只有一個Healthcheck文件時它工作? '結帳scm'需要構建工作(它需要簽出完整的git回購) –