轉自: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環境,你自己操作一下就明白怎么一回事。
代碼舉例:
-
pipeline {
-
agent any
-
stages {
-
stage( 'Example') {
-
input {
-
message "Should we continue?"
-
ok "Yes, we should."
-
submitter "admin,anthony"
-
parameters {
-
string( name: 'PERSON', defaultValue: 'Mr Anthony', description: 'Who should I say hello to?')
-
}
-
}
-
steps {
-
echo "Hello, ${PERSON}, nice to meet you."
-
}
-
}
-
}
-
}
上面代碼的意思:運行之前,需要提供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的代碼示例。
-
pipeline {
-
agent any
-
environment {
-
quick_test = false
-
}
-
stages {
-
-
steps {
-
script {
-
echo 'Hello World'
-
}
-
}
-
}
-
-
when {
-
expression {
-
return (quick_test == “true” )
-
-
}
-
}
-
steps {
-
echo 'Deploying'
-
}
-
}
-
}
-
}
解釋一下,我在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都可以找到一些例子。