2.2 Jenkins流水線語法

您好,本模塊主要學習聲明式流水線的核心語法,掌握核心語法便於編寫Jenkinsfile 😀

目錄


聲明式流水線

聲明式Pipleine是官方推薦的語法,聲明式語法更加簡潔。所有的聲明式Pipeline都必須包含一個 pipeline塊中,比如:

pipeline {
    //run
}

在聲明式Pipeline中的基本語句和表達式遵循Groovy的語法。但是有以下例外:

  • 流水線頂層必須是一個塊,特別是pipeline{}。
  • 不需要分號作爲分割符,是按照行分割的。
  • 語句塊只能由階段、指令、步驟、賦值語句組成。例如: input被視爲input()。

agent代理

agent指定了流水線的執行節點。

agent { node { label 'labelname' }}

aget { label ' labelname '}

參數:

  • any 在任何可用的節點上執行pipeline。none 沒有指定agent的時候默認。
  • label 在指定標籤上的節點上運行Pipeline。 node 允許額外的選項(自定義workspace)。

post運行後處理

當流水線完成後根據完成的狀態做一些任務。例如:構建失敗後郵件通知

post { 
    always { 
        echo 'I will always say Hello again!'
    }

    failure{
        email : [email protected]
    }
}

常用的狀態:

  • always 無論流水線或者階段的完成狀態。
  • changed 只有當流水線或者階段完成狀態與之前不同時。
  • failure 只有當流水線或者階段狀態爲”failure”運行。
  • success 只有當流水線或者階段狀態爲”success”運行。
  • unstable 只有當流水線或者階段狀態爲”unstable”運行。例如:測試失敗。
  • aborted 只有當流水線或者階段狀態爲”aborted “運行。例如:手動取消。

stages階段

stages是流水線的整個運行階段,包含一個或多個 stage , 建議 stages 至少包含一個 stage

stages { 
    stage('Example') {
        steps {
            echo 'Hello World'
        }
    }
}

environment環境變量

定義流水線環境變量,可以定義在全局變量或者步驟中的局部變量。這取決於 environment 指令在流水線內的位置。

agent any

//全局變量
environment { 
    activeEnv = 'dev'
}
stages {
    stage('Example') {

        //局部變量
        environment { 
            AN_ACCESS_KEY = credentials('my-prefined-secret-text') 
        }
        steps {
            sh 'printenv'
        }
    }
}

options運行選項

定義流水線運行時的配置選項,流水線提供了許多選項, 比如buildDiscarder,但也可以由插件提供, 比如 timestamps。

agent any
options {
    timeout(time: 1, unit: 'HOURS') 
}
stages {
    stage('Example') {
        steps {
            echo 'Hello World'
        }
    }
}

其他部分參數:

  • buildDiscarder: 爲最近的流水線運行的特定數量保存組件和控制檯輸出。
  • disableConcurrentBuilds: 不允許同時執行流水線。 可被用來防止同時訪問共享資源等。
  • overrideIndexTriggers: 允許覆蓋分支索引觸發器的默認處理。
  • skipDefaultCheckout: 在agent 指令中,跳過從源代碼控制中檢出代碼的默認情況。
  • skipStagesAfterUnstable: 一旦構建狀態變得UNSTABLE,跳過該階段。
  • checkoutToSubdirectory: 在工作空間的子目錄中自動地執行源代碼控制檢出。
  • timeout: 設置流水線運行的超時時間, 在此之後,Jenkins將中止流水線。
  • retry: 在失敗時, 重新嘗試整個流水線的指定次數。
  • timestamps 預測所有由流水線生成的控制檯輸出,與該流水線發出的時間一致。

parameters參數

爲流水線運行時設置項目相關的參數,就不用在UI界面上定義了,比較方便。

//string 字符串類型的參數, 例如:
parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }

//booleanParam 布爾參數, 例如:
parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }

agent any
parameters {
    string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
stages {
    stage('Example') {
        steps {
            echo "Hello ${params.PERSON}"
        }
    }
}

trigger觸發器

構建觸發器

//cron 計劃任務定期執行構建。
triggers { cron('H */4 * * 1-5') }


//pollSCM 與cron定義類似,但是由jenkins定期檢測源碼變化。
triggers { pollSCM('H */4 * * 1-5') }




agent any
triggers {
    cron('H */4 * * 1-5')
}
stages {
    stage('Example') {
        steps {
            echo 'Hello World'
        }
    }
}

tool構建工具

構建工具maven、ant、gradle,獲取通過自動安裝或手動放置工具的環境變量。支持maven/jdk/gradle。工具的名稱必須在系統設置->全局工具配置中定義。

agent any
tools {
    maven 'apache-maven-3.0.1' 
}
stages {
    stage('Example') {
        steps {
            sh 'mvn --version'
        }
    }
}

input交互輸入

input用戶在執行各個階段的時候,由人工確認是否繼續進行。

agent any
stages {
    stage('Example') {
        input {
            message "Should we continue?"
            ok "Yes, we should."
            submitter "alice,bob"
            parameters {
                string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
            }
        }
        steps {
            echo "Hello, ${PERSON}, nice to meet you."
        }
    }
}

參數解釋:

  • message 呈現給用戶的提示信息。
  • id 可選,默認爲stage名稱。
  • ok 默認表單上的ok文本。
  • submitter 可選的,以逗號分隔的用戶列表或允許提交的外部組名。默認允許任何用戶。
  • submitterParameter 環境變量的可選名稱。如果存在,用submitter 名稱設置。
  • parameters 提示提交者提供的一個可選的參數列表。

when條件判斷

when 指令允許流水線根據給定的條件決定是否應該執行階段。 when 指令必須包含至少一個條件。

//branch: 當正在構建的分支與模式給定的分支匹配時,執行這個階段,這隻適用於多分支流水線例如:
when { branch 'master' }


//environment: 當指定的環境變量是給定的值時,執行這個步驟,例如:
when { environment name: 'DEPLOY_TO', value: 'production' }

//expression 當指定的Groovy表達式評估爲true時,執行這個階段, 例如:
when { expression { return params.DEBUG_BUILD } }

//not 當嵌套條件是錯誤時,執行這個階段,必須包含一個條件,例如:
when { not { branch 'master' } }

//allOf 當所有的嵌套條件都正確時,執行這個階段,必須包含至少一個條件,例如:
when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }

//anyOf 當至少有一個嵌套條件爲真時,執行這個階段,必須包含至少一個條件,例如:
when { anyOf { branch 'master'; branch 'staging' } }


stage('Example Deploy') {
    when {
        branch 'production'
        environment name: 'DEPLOY_TO', value: 'production'
    }
    steps {
        echo 'Deploying'
    }
}

parallel並行

聲明式流水線的階段可以在他們內部聲明多隔嵌套階段, 它們將並行執行。 注意,一個階段必須只有一個 steps 或 parallel的階段。 嵌套階段本身不能包含 進一步的 parallel 階段, 但是其他的階段的行爲與任何其他 stageparallel 的階段不能包含 agent 或 tools階段, 因爲他們沒有相關 steps。

 stage('Parallel Stage') {
    when {
        branch 'master'
    }
    failFast true
    parallel {
        stage('Branch A') {
            agent {
                label "for-branch-a"
            }
            steps {
                echo "On Branch A"
            }
        }
        stage('Branch B') {
            agent {
                label "for-branch-b"
            }
            steps {
                echo "On Branch B"
            }
        }
    }
}

failFast true 當其中一個進程失敗時,強制所有的 parallel 階段都被終止。

script腳本標籤

可以通過此標籤嵌入腳本式語法。

stage("Build"){
    steps{
        script{
            println("運行構建")
        }
    }
}

 

 掃碼關注,獲取課程:

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