Jenkins:申明式腳本基本組成(二)

2基本組成

下面針對幾個核心概念,逐一進行說明

  1. Pipeline

指令說明:代表整條流水線,包含整條流水線的邏輯。Pipeline{}表示申明式腳本模塊。

作用域:應用於全局最外層,表明該腳本爲聲明式pipeline
是否必須:必須
參數:無

  1. Agent

指令說明:agent部分指定整個Pipeline或特定階段將在Jenkins環境中執行的位置,具體取決於該agent 部分的放置位置。該部分必須在pipeline塊內的頂層定義 ,但stage級使用是可選的。

 

作用域:可用在全局與stage內
是否必須:是,
參數:any,none, label, node,docker,dockerfile

爲了支持Pipeline可能擁有的各種用例,該agent部分支持幾種不同類型的參數。這些參數可以應用於pipeline塊的頂層,也可以應用在每個stage指令內。

參數說明:

參數any:在任何可用的agent 上執行Pipeline或stage。例如:agent any


pipeline{

    agent any  //全局必須帶有agent表明此pipeline執行節點

    stages{

        stage("first stage"){

            agent { label 'master' }  //具體執行的步驟節點,非必須

            steps{

                echo "this is first step"

            }

        }

    }

 

 

參數None:當在pipeline塊的頂層使用none時,將不會爲整個Pipeline運行分配全局agent ,每個stage部分將需要包含其自己的agent部分。
參數label:使用提供的label標籤,在Jenkins環境中可用的代理上執行Pipeline或stage。例如:agent { label 'my-defined-label' }

參數node:agent { node { label 'labelName' } },等同於 agent { label 'labelName' },但node允許其他選項(如customWorkspace)。
參數docker:定義此參數時,執行Pipeline或stage時會動態供應一個docker節點去接受Docker-based的Pipelines。 docker還可以接受一個args,直接傳遞給docker run調用。例如:agent { docker 'maven:3-alpine' }或

docker

agent {

    docker {

        image 'maven:3-alpine'

        label 'my-defined-label'

        args  '-v /tmp:/tmp'

    }

}

 

Dockerfile:使用從Dockerfile源存儲庫中包含的容器來構建執行Pipeline或stage 。爲了使用此選項,Jenkinsfile必須從Multibranch Pipeline或“Pipeline from SCM"加載。
默認是在Dockerfile源庫的根目錄:agent { dockerfile true }。如果Dockerfile需在另一個目錄中建立,請使用以下dir選項:agent { dockerfile { dir 'someSubDir' } }。您可以通過docker build ...使用additionalBuildArgs選項,如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。

參數示例:

//運行在任意的可用節點上

agent any

//全局不指定運行節點,由各自stage來決定

agent none

//運行在指定標籤的機器上,具體標籤名稱由agent配置決定

agent { label 'master' }

//node參數可以擴展節點信息

agent {

     node {

         label 'master'

         customWorkspace 'xxx'

}

}

//使用指定運行的容器

agent { docker 'python'  }

 

常用設置:

這些是可以應用於兩個或多個agent的選項。除非明確定義,否則不需要。
label
    一個字符串。標記在哪裏運行pipeline或stage
    此選項適用於node,docker和dockerfile,並且 node是必需的。
customWorkspace
    一個字符串。自定義運行的工作空間內。它可以是相對路徑,在這種情況下,自定義工作區將位於節點上的工作空間根目錄下,也可以是絕對路徑。例如:

agent {

    node {

        label 'my-defined-label'

        customWorkspace '/some/other/path'

    }

}

reuseNode
    一個布爾值,默認爲false。如果爲true,則在同一工作空間中。
    此選項適用於docker和dockerfile,並且僅在 individual stage中使用agent纔有效。

3.stages

指令說明:包含一個或多個stage的序列,Pipeline的大部分工作在此執行。建議stages至少包含至少一個stage指令,用於連接各個交付過程,如構建,測試和部署等。

作用域:全局或者stage階段內,每個作用域內只能使用一次
是否必須:全局必須
參數:無

pipeline{

    agent any

    stages{

        stage("first stage"){

            stages{  //嵌套在stage裏

                stage("inside"){

                    steps{

                        echo "inside"

                    }

                }

            }

        }

        stage("stage2"){

            steps{

                echo "outside"

            }

        }

}

}

看下運行結果,發現嵌套的stage也是能夠展現在視圖裏面的:

 

  1. stage

指令說明:代表流水線的階段。每個階段都必須有名稱。

作用域:被stages包裹,作用在自己的stage包裹範圍內
是否必須:必須
參數:需要一個string參數,表示此階段的工作內容
備註:stage內部可以嵌套stages,內部可單獨制定運行的agent

5.steps

指令說明:代表階段中的一個或多個具體步驟(step)的容器。steps部分至少包含一個步驟,本例中,echo就是一個步驟。在一個stage中有且只有一個steps。

作用域:被stage包裹,作用在stage內部
是否必須:必須
參數:無

6.post

指令說明:定義Pipeline或stage運行結束時的操作。post-condition塊支持post部件:always,changed,failure,success,unstable,和aborted。這些塊允許在Pipeline或stage運行結束時執行步驟,具體取決於Pipeline的狀態。

作用域:作用在pipeline結束後者stage結束後
條件:always、changed、failure、success、unstable、aborted

參數說明:
參數always:運行,無論Pipeline運行的完成狀態如何。
參數changed:只有當前Pipeline運行的狀態與先前完成的Pipeline的狀態不同時,才能運行。

參數fixed:上一次完成狀態爲失敗或不穩定(unstable),當前完成狀態爲成功時執行。

參數regression:上一次完成狀態爲成功,當前完成狀態爲失敗、不穩定或中止(aborted)時執行。
參數failure:僅噹噹前Pipeline處於“失敗”狀態時才運行,通常在Web UI中用紅色指示表示。
參數success:僅噹噹前Pipeline具有“成功”狀態時才運行,通常在具有藍色或綠色指示的Web UI中表示。
參數unstable:只有當前Pipeline具有“不穩定”狀態,通常由測試失敗,代碼違例等引起,才能運行。通常在具有黃色指示的Web UI中表示。
參數aborted只有當前Pipeline處於“中止”狀態時,纔會運行,通常是由於Pipeline被手動中止。通常在具有灰色指示的Web UI中表示。

參數cleanup:清理條件塊。不論當前完成狀態是什麼,在其他所有條件塊執行完成後都執行。post部分可以同時包含多種條件塊。以下是post部分的完整示例。

示例:

pipeline {

    agent any

 

    stages {

        stage('Build') {

            steps {

                sh 'echo Build stage ...'

            }

            post {

                always {

                    echo "post condition executed: always ..."

                }

                changed {

                    echo "post condition executed: changed ..."

                }

                aborted {

                    echo "post condition executed: aborted ..."

                }

                regression {

                    echo "post condition executed: regression ..."

                }

            }

        }

 

        stage('Test'){

            steps {

                sh 'echo Test stage ...'

            }

            post {

                aborted {

                    echo "post condition executed: aborted ..."

                }

                failure {

                    echo "post condition executed: failure ..."

                }

                success {

                    echo "post condition executed: success ..."

                }

            }

        }

 

        stage('Deploy') {

            steps {

                sh 'echo Deploy stage ...'

            }

        }

    }

        post {

        unstable {

            echo "post condition executed: unstable ..."

        }

        unsuccessful {

            echo "post condition executed: unsuccessful ..."

        }

        cleanup {

            echo "post condition executed: cleanup ..."

        }

    }

  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章