日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jenkins Pipeline 语法

發布時間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jenkins Pipeline 语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

聲明性pipeline

Sections

agent

pipeline與stage中的不同

參數

常用選項

發布 post

stages

steps

Directives

environment

options

可用選項

?stage options

parameters

可用參數

triggers

stage

tools

input

when

順序執行的stage(Sequential Stages)

并行的stage(Parallel)

Steps

script

Scripted Pipeline

Flow Control

Steps

與Groovy的區別

語法比較


Jenkins Pipeline是一套插件,支持在Jenkins中實施和集成持續交付管道。Pipeline提供了一套可擴展的工具,用于通過管道域特定語言(DSL)語法將“簡單到復雜”的交付管道使用“代碼”建模 。Pipeline優勢:

  • 可維護:管道是在代碼中實現的,并且通常會被簽入源代碼管理,從而使團隊能夠編輯,審閱和迭代他們的交付管道。
  • 可能出現:在繼續進行管道運行之前,管道可以選擇停止并等待人員輸入或批準。
  • 復雜場景:管道支持復雜的實際CD需求,包括分叉/連接,循環和并行執行工作的能力。
  • 可擴展性:Pipeline插件支持對其DSL的定制擴展 。
  • Pipeline代碼文件,可以使用兩個腳本模式去寫代碼:Declarative Pipeline 和 Scripted Pipeline. Declarative相對于Scripted有兩個優點。第一個是提供更豐富的語法功能,第二個是寫出來的腳本可讀性和維護性更好。

    參考文檔:?https://www.jenkins.io/doc/book/pipeline/syntax/

    ?

    pipeline包括以下幾個概念:

    • node:jenkins節點,包括master和agent。
    • stage:一段代碼塊,一般一個stage包含一個業務場景的自動化
    • step:步驟,

    聲明性pipeline

    pipeline {/* insert Declarative Pipeline here */ }

    所有有效的聲明性Pipeline必須包含在一個pipeline塊內,聲明性Pipeline中有效的基本語句和表達式遵循與Groovy語法相同的規則 ,但有以下例外:

    • Pipeline的頂層必須是塊,具體來說是:pipeline { }
    • 沒有分號作為語句分隔符。每個聲明必須在自己的一行
    • 塊只能包含章節, 指令,步驟或賦值語句。
    • 屬性引用語句被視為無參數方法調用。所以例如,輸入被視為input()

    Sections

    聲明性Pipeline中的Sections通常包含一個或多個指令或步驟。

    agent

    agent指定整個Pipeline或特定stage將在Jenkins環境中執行的位置,具體取決于該agent 部分的位置(在頂級pipeline塊或者每個stage塊中)。該部分必須在pipeline塊內的頂層定義,stage塊內的agent是可選的 。

    agent {... ... }

    pipeline與stage中的不同

    細微差別主要在options?指令的應用時機。pipeline中,options在進入agent之后應用;stage中,在進入agent之前應用,并且在所有when condition檢查之前。

    參數

    • any

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

    • none

    當在pipeline塊的頂層應用時,將不會為整個Pipeline運行分配全局代理,并且每個stage部分將需要包含其自己的agent部分。例如:agent none

    • label

    使用提供的標簽在Jenkins環境中可用的代理上執行Pipeline或stage性執行。例如:agent { label 'my-defined-label' }

    • node

    agent { node { label 'labelName' } }行為和 agent { label 'labelName' }相同,但node允許其他選項(如customWorkspace)。

    • docker

    用給定的容器執行Pipeline,或stage,將被動態地提供一個預先配置成基于Docker-based Pipelines的節點,或和label參數匹配的任選節點。 docker還可以接受一個args參數,可以直接將參數傳遞給docker run命令。例如:agent { docker 'maven:3-alpine' }或

    ?

    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' } }。您可以使用additionalBuildArgs選項將其他參數傳遞給docker build ...命令,如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。

    常用選項

    下面是可以用于兩個或多個agent的常用選項。在沒有明確說明的情況下選項是可選的。

    • label

      一個字符串。在這些標簽上運行Pipeline或每個stage。此選項可用于node,docker和dockerfile,并且 對于node是必需的。

    • customWorkspace

      一個字符串。運行Pipeline或每個stage, 在這個agent的自定義的工作空間內,而不是默認的。它可以是相對路徑,在這種情況下,自定義工作區將位于節點上的工作空間根目錄下,也可以是絕對路徑。例如:

    ?

    agent {node {label 'my-defined-label'customWorkspace '/some/other/path'} }
    • reuseNode

      一個布爾值,默認為false。如果為true,則在同一工作空間中,而不是完全在新節點上運行Pipeline頂層指定的節點上的容器。此選項適用于docker和dockerfile,并且僅在agent的每個stage內才有效果。

    例如:

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent { docker 'maven:3-alpine' } stages {stage('Example Build') {steps {sh 'mvn -B clean verify'}}} }

    在給定名稱和tag(maven:3-alpine)的新創建的容器中執行此Pipeline中定義的所有步驟。

    發布 post

    post定義將在Pipeline運行或stage結束時運行的操作。一些條件后 的塊的內支持post: always,changed,failure,success,unstable,和aborted。這些塊允許在Pipeline運行或stage結束時執行步驟,具體取決于Pipeline的狀態。

    條件

    • always

      無論Pipeline運行的完成狀態如何都會運行。

    • changed

      只有當前Pipeline運行的狀態與先前完成的Pipeline的狀態不同時,才能運行。

    • failure

      僅當當前Pipeline處于“失敗”狀態時才運行,通常在Web UI中用紅色指示表示。

    • success

      僅當當前Pipeline具有“成功”狀態時才運行,通常在具有藍色或綠色指示的Web UI中表示。

    • unstable

      只有當前Pipeline具有“不穩定”狀態,通常由測試失敗,代碼違例等引起,才能運行。通常在具有黃色指示的Web UI中表示。

    • aborted

      只有當前Pipeline處于“中止”狀態時,才會運行,通常是由于Pipeline被手動中止。通常在具有灰色指示的Web UI中表示。

    • cleanup

      無論管道或stage的狀態如何,在跑完所有其他的post條件后運行此條件下 的post步驟。

    例如:

    Jenkinsfile (Declarative Pipeline) pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'}}}post { always { echo 'I will always say Hello again!'}} }
  • 通常,該post部分應放在Pipeline末端

  • post條件塊包含的步驟和steps中的步驟用法相同

  • stages

    包含一個或多個stage指令的序列,該stages部分是Pipeline 描述的大部分“工作”所在的位置。建議stages至少為持續交付流程的每個獨立部分包含至少一個stage指令,例如構建,測試和部署。在pipeline內只有一次。stages部分一般跟在agent,?options等后面。

    steps

    steps部分定義了在給定stage指令中執行的一系列一個或多個步驟(Step),steps部分必須包含一個或多個步驟。允許出現在每個stage塊內。

    Directives

    environment

    environment指令指定一系列鍵值對,這些鍵值對將被定義為所有step或特定stage的step的環境變量,具體取決于environment指令位于Pipeline中的位置。

    該指令支持一種特殊的助手方法credentials(),可以通過Jenkins環境中的標識符來訪問預定義的憑據。對于類型為“Secret Text”的憑據,該 credentials()方法將確保環境變量中包含該Secret Text內容。對于“標準用戶名和密碼”類型的憑證,指定的環境變量將被設置為username:password并且將自動定義兩個附加的環境變量:MYVARNAME_USR和MYVARNAME_PSW。允許出現在pipeline塊內或stage內

    • environment頂級pipeline塊中使用的指令將適用于Pipeline中的所有步驟
    • 在一個stage中定義的environment指令只將給定的環境變量應用于該stage中的步驟
    • environment具有一個幫助方法credentials(),可用于在Jenkins環境中通過其標識符訪問預定義的憑據

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent anyenvironment { CC = 'clang'}stages {stage('Example') {environment { AN_ACCESS_KEY = credentials('my-prefined-secret-text') }steps {sh 'printenv'}}} }

    options

    options指令允許在Pipeline內配置Pipeline專用選項。Pipeline提供了許多這些選項,例如buildDiscarder,但它們也可能由插件提供,例如?timestamps。允許出現在pipeline塊內,只有一次

    可用選項

    • buildDiscarder

      持久化工件和控制臺輸出,用于保存Pipeline最近幾次運行的數據。例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }

    • checkoutToSubdirectory

      在工作區的子目錄中執行源代碼檢出。例如:options { checkoutToSubdirectory('foo') }

    • disableConcurrentBuilds

      不允許并行執行Pipeline。可用于防止同時訪問共享資源等。例如:options { disableConcurrentBuilds() }

    • preserveStashes

      保留已完成構建的存儲,用于stage重新啟動。例如:options { preserveStashes() }保存最近完成的構建中的stash,或者options { preserveStashes(5) }保留最近五個完成的構建中的stash。

    • quietPeriod

      設置管道的靜默期(以秒為單位),覆蓋全局默認值。例如:options { quietPeriod(30) }

    • retry

      如果失敗,請按指定的次數重試整個管道。例如:options { retry(3) }

    • skipDefaultCheckout

      在agent指令中默認跳過源代碼檢出。例如:options { skipDefaultCheckout() }

    • skipStagesAfterUnstable

      一旦構建狀態進入了“不穩定”狀態,就跳過stage。例如:options { skipStagesAfterUnstable() }

    • timeout

      設置Pipeline運行的超時時間,之后Jenkins應該中止Pipeline。例如:options { timeout(time: 1, unit: 'HOURS') }

    • timestamps

      當執行時,預處理由Pipeline生成的所有控制臺輸出運行時間。例如:options { timestamps() }

    例如:

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent anyoptions {timeout(time: 1, unit: 'HOURS') }stages {stage('Example') {steps {echo 'Hello World'}}} }

    指定一個小時的全局執行超時,之后Jenkins將中止Pipeline運行。

    ?stage options

    stage的options指令類似于Pipeline根目錄中的options指令。但是,stage的 options只能包含與stage相關的步驟,如retry,timeout或timestamps,或聲明性選項,如skipDefaultCheckout。

    在stage內,options在進入agent或檢查任何when條件之前調用指令中的步驟。

    可用的stage選項

    • skipDefaultCheckout

      默認情況下,在agent指令中跳過檢查源代碼管理中的代碼。例如:options { skipDefaultCheckout() }

    • timeout

      設置此stage的超時時間,之后Jenkins應該中止該stage。例如:options { timeout(time: 1, unit: 'HOURS') }

    • retry

      如果失敗,請重試此stage指定次數。例如:options { retry(3) }

    • timestamps

      當執行時,預處理由Pipeline生成的所有控制臺輸出運行時間。例如:options { timestamps() }

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

    為stage?Example指定一小時的執行超時,之后Jenkins將中止Pipeline運行。

    parameters

    parameters指令提供用戶在觸發Pipeline時應提供的參數列表。這些用戶指定的參數的值通過該params對象可用于Pipeline步驟。允許出現在pipeline塊內,只有一次。

    可用參數

    • string

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

    • 文本

      一個text參數,可以包含多行,例如: parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }

    • booleanParam

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

    • choice

      選擇參數,例如: parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }

    • file

      一個文件參數,指定用戶在計劃構建時要提交的文件,例如: parameters { file(name: 'FILE', description: 'Some file to upload') }

    • password

      密碼參數,例如: parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') }

    例如:

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent anyparameters {string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')file(name: "FILE", description: "Choose a file to upload")}stages {stage('Example') {steps {echo "Hello ${params.PERSON}"echo "Biography: ${params.BIOGRAPHY}"echo "Toggle: ${params.TOGGLE}"echo "Choice: ${params.CHOICE}"echo "Password: ${params.PASSWORD}"}}} }

    triggers

    triggers指令定義了Pipeline應重新觸發的自動化方式。對于與源代碼集成的Pipeline,如GitHub或BitBucket,triggers可能不需要基于webhook的集成可能已經存在。目前只有兩個可用的觸發器是cron和pollSCM。允許出現在pipeline塊內,只有一次。

    • cron

      接受一個cron風格的字符串來定義Pipeline應重新觸發的常規間隔,例如: triggers { cron('H 4/* 0 0 1-5') }

    • pollSCM

      接受一個cron風格的字符串來定義Jenkins應該檢查新的源更改的常規間隔。如果存在新的更改,則Pipeline將被重新觸發。例如:triggers { pollSCM('H 4/* 0 0 1-5') }

    ?

    該pollSCM觸發器僅在Jenkins 2.22或更高版本可用

    例如:

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent anytriggers {cron('H 4/* 0 0 1-5')}stages {stage('Example') {steps {echo 'Hello World'}}} }

    Jenkins cron 語法

    Jenkins cron語法遵循cron實用程序的語法 (略有不同)。具體來說,每行包含由TAB或空格分隔的5個字段:

    分鐘小時DOM月DOW
    一小時內的分鐘數(0-59)一天中的小時(0-23)每月的某一天(1-31)</ td>月(1-12)星期幾(0-7),其中0和7是星期日。

    要為一個字段指定多個值,可以使用以下運算符。按優先順序排列,

    • * 指定所有有效值
    • M-N 指定一系列值
    • M-N/X或者按照指定范圍或整個有效范圍的*/X間隔步長X
    • A,B,…,Z 枚舉多個值

    為了允許定期計劃的任務在系統上產生均勻負載,應盡可能使用符號H(“哈希”)。例如,使用0 0 * * *十幾個日常工作將導致午夜大量飆升。相比之下,使用H H * * *仍然會每天執行一次,但不能同時執行,更好地使用有限的資源。

    所述H符號可以與范圍內使用。例如,H H(0-7) * * * 表示從凌晨12:00(午夜)到早上7:59之間的某個時間段。您也可以使用H帶有或不帶范圍的步長間隔。

    H符號可以被認為是在一定范圍內的隨機值,但它實際上是作業名稱的hash值,而不是隨機函數的哈希值,所以對于給定的項目該值仍然是穩定的。

    請注意,對于月份日期字段,由于月份長度可變,短期周期(例如/3或 H/3)將不會在大多數月份結束時始終如一地工作)。例如,/3 將在第1st, 4th, …31st 天運行, 然后在下個月的第一天運行。 哈希總是在1-28的范圍內運行, 所以 H/3在一個月末將產生3到6天的空隙。(更長的周期也會有不一致的長度,但效果可能相對不太明顯。)

    以#開頭的行和空行將被當做注釋忽略。

    此外,還有如下方便的別名:@yearly,@annually,@monthly, @weekly,@daily,@midnight,和@hourly。這些使用哈希系統進行自動平衡。例如,@hourly和H * * * *都意味著在一小時內的任何時間。 @midnight實際上意味著在凌晨12:00到凌晨2:59之間的某個時間。

    每十五分鐘(也許在:07,:22,:37,:52) triggers{ cron('H/15 * * * *') }每小時上半場每十分鐘一次(三次,也許在:04,:14,:24) triggers{ H(0-29)/10 * * * *) }從上午9:45開始每小時45分鐘一次,每個工作日下午3:45結束。 triggers{ 45 9-16/2 * * 1-5) }每個工作日上午9點到下午5點之間每兩小時一次(可能在上午10:38,下午12點38分,下午2點38分,下午4點38分) triggers{ H H(9-16)/2 * * 1-5) }除了12月之外,每個月的1日和15日每天一次 triggers{ H H 1,15 1-11 *) }

    stage

    stage指令在stages部分中,應包含步驟部分,可選agent部分或其他特定于stage的指令。實際上,Pipeline完成的所有實際工作都將包含在一個或多個stage指令中。

    tools

    定義自動安裝和放置工具的部分PATH。如果指定agent none,這將被忽略。允許出現在?? ?在pipeline塊內或stage內。

    支持的工具

    • maven
    • jdk
    • gradle

    例如:

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent anytools {maven 'apache-maven-3.0.1' }stages {stage('Example') {steps {sh 'mvn --version'}}} }

    工具名稱必須在Jenkins 管理Jenkins → 全局工具配置中預置。

    input

    stage的input指令允許您使用input步驟提示輸入 。在進入stage的agent或評估其when狀態之前,stage將處于暫停狀態。如果input 獲得批準,stage則將繼續。作為input提供的任何參數將在stage的剩下部分的環境中可用 。

    配置選項

    • message

      必填。這將在用戶提交input時呈現給用戶。

    • id

      這是一個可選的標識符input。默認為stage名稱。

    • ok

      input表單上“ok”按鈕的可選文本。

    • submitter

      允許提交此input選項的用戶或外部組名列表,用逗號分隔。默認允許任何用戶。

    • submitterParameter

      要使用submitter名稱設置的環境變量的名稱,可選(如果存在)。

    • parameters

      用于提示提供的可選參數列表。有關更多信息,請參閱參數

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent anystages {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."}}} }

    when

    when指令允許Pipeline根據給定的條件確定是否執行該stage。when指令必須至少包含一個條件。如果when指令包含多個條件,則所有子條件必須都返回true,stage將會執行。這與子條件嵌套在一個allOf條件中相同(見下面的例子)。

    更復雜的條件結構可使用嵌套條件建:not,allOf或anyOf。嵌套條件可以嵌套到任意深度。

    內置條件

    • branch

      當正在構建的分支與給出的分支模式匹配時執行stage,例如:when { branch 'master' }。請注意,這僅適用于多分支Pipeline。

    • environment

      當指定的環境變量設置為給定值時執行stage,例如: when { environment name: 'DEPLOY_TO', value: 'production' }

    • expression

      當指定的Groovy表達式求值為true時執行stage,例如: when { expression { return params.DEBUG_BUILD } }

    • not

      當嵌套條件為false時執行stage。必須包含一個條件。例如:when { not { branch 'master' } }

    • allOf

      當所有嵌套條件都為真時,執行舞臺。必須至少包含一個條件。例如:when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }

    • anyOf

      當至少一個嵌套條件為真時執行舞臺。必須至少包含一個條件。例如:when { anyOf { branch 'master'; branch 'staging' } }

    例如:

    Jenkinsfile (Declarative Pipeline) pipeline {agent anystages {stage('Example Build') {steps {echo 'Hello World'}}stage('Example Deploy') {when {branch 'production'environment name: 'DEPLOY_TO', value: 'production'}steps {echo 'Deploying'}}} }

    ?

    ?

    順序執行的stage(Sequential Stages)

    聲明性Pipeline中的stage可以按順序聲明待運行的stage列表。需要注意的是一個stage有且只能有一個 steps,parallel或者stages,stages是順序執行的。stage內的stage無法進一步含有parallel或stages ,但他們允許使用stage的所有其他功能,包括 agent,tools,when等等。

    ?

    pipeline {agent nonestages {stage('Non-Sequential Stage') {agent {label 'for-non-sequential'}steps {echo "On Non-Sequential Stage"}}stage('Sequential') {agent {label 'for-sequential'}environment {FOR_SEQUENTIAL = "some-value"}stages {stage('In Sequential 1') {steps {echo "In Sequential 1"}}stage('In Sequential 2') {steps {echo "In Sequential 2"}}}}} }

    并行的stage(Parallel)

    聲明性Parallel中的stage可以在parallel塊中聲明多個嵌套stage,這些stage將并行執行。需要注意的是一個stage有且只能有一個steps,stages或parallel。嵌套的stages本身不能包含其他parallelstage,但在其他方面的行為與stage相同,包括順序執行的stage列表stages。任何包含parallel的stage都不能包含agent或者tools,因為那些和steps沒有關系。

    此外,您可以通過添加failFast true到包含parallel的stage中,使得其中一個失敗時中止所有parallel內的stage。

    ?

    pipeline {agent anystages {stage('Non-Parallel Stage') {steps {echo 'This stage will be executed first.'}}stage('Parallel Stage') {when {branch 'master'}failFast trueparallel {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"}}stage('Branch C') {agent {label "for-branch-c"}stages {stage('Nested 1') {steps {echo "In stage Nested 1 within Branch C"}}stage('Nested 2') {steps {echo "In stage Nested 2 within Branch C"}}}}}}} }

    Steps

    聲明性Pipeline可以使用“ Pipeline步驟”引用中記錄的所有可用步驟 ,其中包含一個完整的步驟列表,并附加以下列出的步驟,僅在聲明性Pipeline中支持。

    script

    script步驟需要一個script Pipeline,并在聲明性Pipeline中執行。對于大多數場景,聲明Pipeline中的script步驟不是必須的,但它可以提供一個有用的“escape hatch”。量大的或者復雜的script塊應該轉移到共享庫中。

    例如:

    ?

    Jenkinsfile (Declarative Pipeline) pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'script {def browsers = ['chrome', 'firefox']for (int i = 0; i < browsers.size(); ++i) {echo "Testing the ${browsers[i]} browser"}}}}} }

    Scripted Pipeline

    Scripted Pipeline,如聲明式Pipeline,構建在底層Pipeline子系統之上。不像聲明式Pipeline,Scripted Pipeline是一個基于Groovy構建的,通用、高效的DSL。由Groovy語言提供的大多數功能都提供給Scripted Pipeline的用戶,這意味著它是一個非常富有表現力和靈活性的工具,可以通過這些工具來創建持續構建的Pipeline。

    Flow Control

    Scripted Pipeline從頂部順序執行,與Jenkinsfile Groovy或其他語言中的大多數傳統Scripted一樣。因此,提供流量控制取決于Groovy表達式,例如 if/else條件,例如:

    ?

    Jenkinsfile (Scripted Pipeline) node {stage('Example') {if (env.BRANCH_NAME == 'master') {echo 'I only execute on the master branch'} else {echo 'I execute elsewhere'}} }

    可以管理Scripted Pipeline流控制的另一種方式是使用Groovy的異常處理支持。當步驟由于任何原因而導致異常時。處理錯誤行為必須使用Groovy 中的try/catch/finally塊,例如:

    ?

    Jenkinsfile (Scripted Pipeline) node {stage('Example') {try {sh 'exit 1'}catch (exc) {echo 'Something failed, I should sound the klaxons!'throw}} }

    Steps

    如“ 入門指南 ”所述,Pipeline最基本的部分是“步驟”。從根本上說,步驟告訴Jenkins 要做什么,并且作為Declarative和Scripted Pipeline語法的基本構建塊。

    Scripted Pipeline并沒有介紹這是專門針對它的語法的任何步驟; Pipeline步驟參考 ,其中包含Pipeline和插件提供的完整步驟列表。

    與Groovy的區別

    為了提供持久性(運行中的Pipeline可以在重新啟動Jenkins主站后保留),Scripted Pipeline必須將數據序列化到master節點。由于這個設計要求,一些Groovy語法如collection.each { item -> /* perform operation */ }沒有完全支持。有關 更多信息,請參見 JENKINS-27421和 JENKINS-26481。

    語法比較

    當Jenkins Pipeline首次創建時,Groovy被選為執行引擎。Jenkins已經使用嵌入式Groovy引擎很長時間,為管理員和用戶提供高級腳本功能。此外,Jenkins Pipeline的實現者發現Groovy是建立“Scripted Pipeline”DSL的堅實基礎。

    由于它是一個功能齊全的編程環境,Scripted Pipeline為Jenkins用戶提供了極大的靈活性和可擴展性。Groovy學習曲線通常不適用于給定團隊的所有成員,因此,創建聲明性Pipeline是為了創作Jenkins Pipeline提供一個更簡單和更有見解的語法。

    兩者基本上是底層相同的Pipeline 子系統。它們都是“Pipeline代碼”的持久實現。他們都能夠使用Pipeline內置的插件或插件提供的步驟。兩者都可以利用共享庫

    不同之處在于語法和靈活性。聲明性限制了用戶具有更嚴格和預定義結構的可用性,使其成為更簡單連續輸送Pipeline的理想選擇。腳本化提供了極少的限制,因為Groovy本身只能對結構和語法進行限制,而不是任何Pipeline專用系統,使其成為高級用戶和具有更復雜要求的用戶的理想選擇。顧名思義,Declarative Pipeline鼓勵聲明式編程模型。 盡管Scripted Pipeline遵循更命令性的編程模型。

    ?

    ?

    總結

    以上是生活随笔為你收集整理的Jenkins Pipeline 语法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。