2017-09-28 241 views
5

我想從我目前的工作,引發下游的工作,像這樣詹金斯失敗建設

pipeline { 
    stages { 
    stage('foo') { 
     steps{ 
     build job: 'my-job', propagate: true, wait: true 
     } 
    } 
    } 
} 

的目的是爲了等待工作結果和失敗或成功,根據該結果下游的工作。詹金斯總是失敗,信息Waiting for non-job items is not supported。上面提到的工作沒有任何參數,並且使用多分支管道插件將其定義爲其餘工作。

我所能想到的是,這種類型的jenkins項目不被支持作爲構建步驟輸入,但這似乎違反直覺並會被證明是對我的阻擋。任何人都可以證實這是否確實如此?

如果是這樣,任何人都可以提出任何解決方法?

謝謝

+1

我在這裏處理幾乎相同的問題。不幸的是,我可以在這個主題上找到唯一的其他材料是從四月份的另一個StackOverflow帖子:https://stackoverflow.com/questions/43337070/how-to-invoke-a-jenkins-pipeline-a-in-another-jenkins- pipeline-b –

回答

1

這看起來像JENKINS-45443其中包括評論

管道具有上游/下游的作業系統不支持,部分原因是由於技術的限制,部分原因是由於這樣的事實:除了通過檢查最近的構建元數據之外,沒有任何靜態作業配置可以實現這一點。

但它也提供瞭解決方法:

只要解決方案還在進行中,我在這裏包括我們的解決方法。它基於rtp (Rich Text Publisher) plugin,您應該已經安裝它以使其正常工作:

在我們的Jenkins文件的末尾,在觸發作業之後,我們等待它完成。在這種情況下,build()返回用於運行下游作業的對象。我們從中獲取信息。

警告:getAbsoluteUrl()函數是一個關鍵的函數。需要您自擔風險使用它!

def startedBld = build(
    job: YOUR_DOWNSTREAM_JOB, 
    wait: true, // VERY IMPORTANT, otherwise build() does not return expected object 
    propagate: true 
) 

// Publish the started build information in the Build result 
def text = '<h2>Downstream jobs</h2>Started job <a href="' + startedBld.rawBuild.getAbsoluteUrl() + '">' + startedBld.rawBuild.toString() + '</a>' 
rtp (nullAction: '1',parserName: 'HTML', stableText: text) 

這個問題的JENKINS-29913部分,打開了在過去兩年:

目前DependencyGraph僅限於AbstractProject,使其無法工作流程參與上游/下游關係(在需要工作鏈的情況下,例如由於安全限制)。

它指基於另一個(未回答)Stack Overflow question的RFE(請求增強)JENKINS-37718

7

我實際上設法通過更多地關注構建步驟的定義來解決這個問題。由於我所有的下游作業都被定義爲多分支管道作業,因此它們的結構就像文件夾一樣,文件夾中的每個項目都代表一個單獨的作業。因此,調用下游作業的正確方式不是build job: 'my-job', propagate: true, wait: true,而是build job: "my-job/my-branch-name", propagate: true, wait: true

此外,與問題無關但與手頭問題有關,請確保您始終在jenkins機器上始終有至少一個免費的執行程序,因爲等待語法會佔用一個線程用於等待作業,另一個用於等待的工作,你可以很容易地發現自己處於資源匱乏的情況。

希望這會有幫助

+0

那麼我提到的錯誤在這裏不適用?無論如何。 – VonC