簡體   English   中英

詹金斯未能建立下游工作

[英]jenkins fails on building a downstream job

我正試圖從我目前的工作中觸發下游工作

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

目的是等待工作結果,然后根據結果失敗或成功。 Jenkins總是失敗並且Waiting for non-job items is not supported的消息。 上面提到的工作沒有任何參數,並且使用multibranch管道插件定義為我的其余工作。

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

如果是這樣,有人可以提出任何變通方法嗎?

謝謝

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

此外,與問題無關但與手頭的問題有關,請確保jenkins機器上至少還有一個執行器可用,因為等待語法將占用等待作業的一個線程,等待作業的一個線程在,你很容易發現自己處於資源飢餓類型的情況。

希望這可以幫助

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

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

但它也提供了解決方法:

只要解決方案仍在進行中,我就在這里包含我們的解決方法。 它基於rtp(Rich Text Publisher)插件 ,您應該已安裝它以使其工作:

在我們的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 ,使得Workflow無法參與上游/下游關系(例如,在需要作業鏈接的情況下,例如由於安全性限制)。

它引用了RFE(請求增強) JENKINS-37718 ,基於另一個(未答復的) Stack Overflow問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM