Jenkins高級篇之Pipeline語法篇-8-Declarative Pipeline指令:input/when


轉自:https://blog.csdn.net/u011541946/article/details/83589588

指令1:input

該input指令允許在一個stage{…}顯示提示輸入等待。在inpt{…}寫一些條件,然后用戶觸發構建這個job,但是這個時候沒有接收到有效的input, job會一直在等待中,你可以在例如job #1的output console中,點擊這個input條件,提供input,構建才會繼續。

下面解釋input{…}里面支持寫那些option。

message

這個option是必須的,這個message會在用戶提交構建的頁面顯示,提示用戶提交相關的input條件。

id

這個id是一個可選的option,可以作為這個input的標記符,默認的標記符是這個stage的名稱。

ok

這個ok也是一個可選的option, 主要是在ok按鈕上顯示一些文本,在input表單里。

submitter

這個submitter也是一個可選的option,里面可以寫多個用戶名稱或者組名稱,用逗號隔開。意思就是,只有這寫名稱的對應用戶登陸jenkins,才能提交這個input動作,如果不寫,默認是任何人都可以提交input。

parameters

這個也是一個可選的option, 和我們前面學的parameters沒有區別,就是定義一些參數的地方。

 

這個input看到這里,估計不好理解,那么下面,結合代碼和jenkins環境,你自己操作一下就明白怎么一回事。

代碼舉例:

  1.  
    pipeline {
  2.  
    agent any
  3.  
    stages {
  4.  
    stage( 'Example') {
  5.  
    input {
  6.  
    message "Should we continue?"
  7.  
    ok "Yes, we should."
  8.  
    submitter "admin,anthony"
  9.  
    parameters {
  10.  
    string( name: 'PERSON', defaultValue: 'Mr Anthony', description: 'Who should I say hello to?')
  11.  
    }
  12.  
    }
  13.  
    steps {
  14.  
    echo "Hello, ${PERSON}, nice to meet you."
  15.  
    }
  16.  
    }
  17.  
    }
  18.  
    }

上面代碼的意思:運行之前,需要提供input,而且這個input提交,只有admin和anthony這兩個用戶可以,其他用戶提交會失敗。把這段代碼拷貝到一個pipeline類型的job設置的pipeline tab頁面。

保存之后,如果在我jenkins環境(第二篇文章提供url和賬號),用anthony登陸,點擊build now,這個時候,你需要去你觸發這個構建號下的output console,可以看到有一個input requested。

點擊上面的Input requested, 出現如下頁面,點擊 Yes, we should, 這個就是一個ok button

然后這個job才會繼續執行下去。好了,input是一個比較新的指令,可能有些舊版本的jenkins不支持,這個指令我在實際工作中沒有使用到,我的建議,了解下有這個指令就好。

 

指令2: when

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

更復雜的條件結構可使用嵌套條件建:not,allOf或anyOf。嵌套條件可以嵌套到任意深度。When{…}是寫在stage{…}里面一層條件控制,下面來看看when{…}支持的一些內置條件命令。

 

branch

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

environment

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

expression

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

not

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

allOf

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

anyOf

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

舉例一個 使用expression條件的when的代碼示例。

  1.  
    pipeline {
  2.  
    agent any
  3.  
    environment {
  4.  
    quick_test = false
  5.  
    }
  6.  
    stages {
  7.  
    stage('Example Build') {
  8.  
    steps {
  9.  
    script {
  10.  
    echo 'Hello World'
  11.  
    }
  12.  
    }
  13.  
    }
  14.  
    stage('Example Deploy') {
  15.  
    when {
  16.  
    expression {
  17.  
    return (quick_test == “true” )
  18.  
     
  19.  
    }
  20.  
    }
  21.  
    steps {
  22.  
    echo 'Deploying'
  23.  
    }
  24.  
    }
  25.  
    }
  26.  
    }

解釋一下,我在environment里面定義了一個鍵值對“quick_test = false”, 如果就這么跑,第二個stage('Example Deploy') 是不會被執行的,因為不滿足when{…}里面的條件。所以,跑的結果分別從Stage view UI和output console就是這樣的。

從控制台和Stage view UI看到,第二個Deploy的stage確實沒有執行,也沒有輸出相關打印語句。下面我們去config里面,把quick_test = false 改成quick_test = true,再跑一個構建。結果應該是如下圖。

本篇就介紹input和when這兩個指令到這里,建議把when里面支持的這幾個指令都寫一個pipeline代碼進行測試下,官網文檔還有google都可以找到一些例子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM