2016-09-17 61 views
17

我想了解如何構建我的Jenkins 2.7管道groovy腳本。我已閱讀pipeline tutorial,但覺得它可以擴展更多的這些主題。Jenkins管道中的節點,階段和步驟之間的區別是什麼?

我可以理解,一個管道可以有多個stage s,每個stage可以有多個step s。但step();stage內的方法調用之間有什麼區別,比如sh([script: "echo hello"]);node是否應該在stage之內或之外?作業的整體屬性應該在node之內還是之外?

這裏是我的Ubuntu的主節點上目前的結構:

#!/usr/bin/env groovy 

node('master') { 
    properties([ 
     [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']] 
    ]); 

    stage 'Checkout' 
     checkout scm 

    stage 'Build' 
     sh([script: "make build"]); 

    archive("bin/*"); 
} 

回答

4

這要看情況。任何node聲明都會分配一個執行器(在Jenkins主控器或從控器上)。這要求您的工作空間爲stashunstash,因爲另一個執行程序沒有檢出的可用源。

Pipeline DSL的幾個步驟在flyweight執行程序中運行,因此不需要位於node塊內。 這可能是一個有用的例子如下面,你需要反正分配多個節點:

stage("Checkout") { 
    checkout scm 
} 

stage("Build") { 
    node('linux') { 
    sh "make" 
    } 
    node('windows') { 
    bat "whatever" 
    } 
} 

stage("Upload") { 
    ... 

另一種(也許更現實的例子)將在parallel分配多個節點。然後不需要讓stage調用在另一個分配的執行器中執行(又名node)。

你的例子看起來不錯。沒有必要在單個stage之內分配多個node,因爲這只是額外的開銷。

15

nodestagestep的概念是不同的:

  • node指定其中東西應發生。你給一個名字或一個標籤,詹金斯在那裏運行該塊。

  • stage將腳本構建爲高級序列。階段顯示爲「管線階段」視圖中的列,階段結果的平均階段時間和顏色。

  • step是指定什麼應發生的一種方式。 sh具有相似的質量,它是一種不同的行爲。 (您也可以使用build對於已指定爲項目的事情。)

所以step S能夠駐留在node S,(如果他們不這樣做,他們是在主執行),並node小號和step s可以被構造成具有stage s的整體序列。

+0

最後一個詞是否是'舞臺'? – IronSean

+0

是的,你是對的。 –

相關問題