2016-04-26 65 views
29

Please note: the question is based on the old, now called "scripted" pipeline format. When using "declarative pipelines", parallel blocks can be nested inside of stage blocks (see Parallel stages with Declarative Pipeline 1.2).與詹金斯工作流程/流水線並行運行的階段

我想知道如何並行步驟應該與詹金斯工作流程/管道插件,特別是如何工作。如何將它們與構建階段混合使用。我知道的一般模式:

parallel(firstTask: { 
    // Do some stuff 
}, secondTask: { 
    // Do some other stuff in parallel 
}) 

不過,我想在並行運行幾個階段(在同一個節點,其中有多個執行人),因此我嘗試添加階段是這樣的:

stage 'A' 
// Do some preparation stuff 

parallel(firstTask: { 
    stage 'B1' 
    // Do some stuff 
}, secondTask: { 
    stage 'B2' 
    // Do some other stuff in parallel 
}) 

stage 'C' 
// Finalizing stuff 

這不起作用。 「do stuff」任務是並行執行的,但並行階段立即結束,不包含他們應該包含的內容。因此,Stage View不會顯示正確的結果,也不會鏈接日誌。

我可以並行構建不同的階段,還是僅在單個階段內使用「並行」步驟?

+0

什麼exaclty不起作用?我在幾分鐘前在Jenkins試過了你的代碼片段,它似乎工作得很好。 –

+0

正如我所說的,工作步驟並非真正作爲階段的一部分,即階段視圖不顯示花費的時間,也沒有日誌。如果你不平行地做同樣的步驟,你會看到不同之處。 – ami

+0

我明白了 - 所以這個問題只能在舞臺視圖中看到,對吧? –

回答

37

您可能不會在parallel中放置不推薦使用的非塊範圍的stage(如原始問題中)。

JENKINS-26107開始,stage取塊參數。您可以將parallel放入stagestage的內部,parallelstage的內部,stage的內部等等。但是構建的可視化不能保證支持所有的嵌套;特別

  • 內置管道步驟(「樹表」,列出了構建運行的每一步)顯示任意stage嵌套。
  • Pipeline Stage View plugin目前只會按照它們開始的順序顯示一個線性的階段列表,而不管其嵌套結構如何。
  • Blue Ocean將顯示頂層階段,加上parallel分支在頂層階段,但目前沒有更多。

JENKINS-27394,如果實現,將顯示任意嵌套的stage s。

+1

我剛剛閱讀[這裏](https://wiki.jenkins-ci.org/display/JENKINS/Pipeline + Stage + Step + Plugin),從2.1版開始,並行中的階段步驟是不可用的,因爲它沒有被支持。你能告訴我這是什麼現狀嗎? – dhiller

+0

在流水線階段插件階段的版本2.2中,需要塊。雖然它仍然有檢查它是否在平行內部,但我沒有看到它拋出異常。通常我會使用一個塊,並行([thingA:{stage('A'){echo('A')}}])''。請注意,它在標準用戶界面和藍色海洋中看起來都很奇怪。參見[JENKINS-38442](https://issues.jenkins-ci.org/browse/JENKINS-27394) – ZombieDev

+0

@ZombieDev,v2.2使用聲明式管道爲我引發異常。這種用法不會傳遞聲明式linter。 – Yichun

3

我剛纔測試了以下的管道和它的作品

parallel firstBranch: { 
    stage ('Starting Test') 
    { 
     build job: 'test1', parameters: [string(name: 'Environment', value: "$env.Environment")] 
    } 
}, secondBranch: { 
    stage ('Starting Test2') 
    { 
     build job: 'test2', parameters: [string(name: 'Environment', value: "$env.Environment")] 
    } 
} 

這個工作命名爲「觸發測試」接受一個名爲「環境」

工作「測試1」和「測試2」是簡單的一個參數工作:

示例 'test1的'

  • 一個參數名爲 '環境'
  • 流水線:echo「$ env。環境TEST1"

在執行時,我能看到在同一時間運行兩個階段

+1

Jenkins的哪個版本? –

+0

根據@ joao-cenoura - 我真的想要這個工作,但它在2.58中不起作用,我沒有在2.61的發行說明中看到任何東西,或者當前的插件聽起來像會使它工作。你使用的是什麼版本的Jenkins和管道插件? – Typhlosaurus

+0

Mine是「Jenkins版本2.46.2」 – OlivierTerrien

6

這種語法現在已經過時了,你會得到這樣的錯誤:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
WorkflowScript: 14: Expected a stage @ line 14, column 9. 
     parallel firstTask: { 
    ^

WorkflowScript: 14: Stage does not have a name @ line 14, column 9. 
     parallel secondTask: { 
    ^

2 errors 

你應該這樣做:

stage("Parallel") { 
    steps { 
     parallel (
      "firstTask" : { 
       //do some stuff 
      }, 
      "secondTask" : { 
       // Do some other stuff in parallel 
      } 
     ) 
    } 
} 
相關問題