3.3 pipeline 內置基礎步驟
3.3.1 pipeline中使用腳本
? ? [作者:Surpassme]在實際專案,可能在某些步驟需要使用少量的腳本,這個時候可以使用script來實作,示例如下所示:
pipeline{
agent any
stages{
stage("Script demo"){
steps{
script{
def personInfo=["Surpass",28,"Shanghai"]
for(int i=0;i<personInfo.size();i++){
echo "current item is ${personInfo[i]}"
}
}
}
}
}
}
? ? [作者:Surpassme]script 里面實際運行就是Groovy代碼,如果script里面需要大量的代碼,需要進行拆分到不同的階段或者使用共享庫來實作,
3.3.2 pipeline內置步驟
3.3.2.1 目錄和檔案相關步驟
dir
? ? [作者:Surpassme]主要功能是切換目錄,默認pipeline是運行其作業目錄中,使用該dir可以切換到其他目錄
deleteDir
? ? [作者:Surpassme]主要功能是洗掉當前目錄,是一個無參步驟,通常與dir一起使用,示例如下所示:
pipeline{
agent any
stages{
stage("delete dir demo"){
steps{
dir("/var/log/jenkins"){
echo "delete dir /var/log/jenkins"
deleteDir()
}
}
}
}
}
fileExists
? ? [作者:Surpassme]主要功能是判斷檔案是否存在,支持絕對路徑和相對路徑,結果回傳boolean型別,示例如下所示:
pipeline{
agent any
stages{
stage("check file exists demo"){
when {
expression {
return fileExists("/etc/hosts")
}
}
steps{
echo "file /etc/hosts exists"
}
}
}
}
? 或
pipeline{
agent any
options {
timestamps()
}
stages{
stage("check file exists demo"){
steps{
script {
println "check /etc/hosts exists"
def ret=fileExists("/etc/hosts")
println "ret is ${ret}"
}
}
}
}
}
? ? 運行結果如下所示:

isUnix
? ? [作者:Surpassme]主要功能是判斷是否為UNIX系統,結果回傳boolean型別,示例如下所示:
pipeline{
agent any
options {
timestamps()
}
stages{
stage("check os type demo"){
steps{
script {
println "check os type"
def isUnix=isUnix()
println "isUnix:${isUnix}"
}
}
}
}
}
pwd
? ? [作者:Surpassme]主要功能是列印當前目錄,與Linux中pwd命令類似,示例如下所示:
pipeline{
agent any
options {
timestamps()
}
stages{
stage("print current workdir demo"){
steps{
script {
println "print current workdir "
def curDir=pwd()
println "current workdir is:${curDir}"
}
}
}
}
}
? ? 運行結果如下所示:

pwd還有一個boolean型別的
可選引數,示例為:pwd(tmp:true),用于列印與當前作業空間關聯的臨時目錄
writeFile
? ? [作者:Surpassme]主要功能是將指定內容寫入檔案,其主要引數如下所示:
? ? file:檔案路徑,支持絕對路徑和相對路徑
? ? text:寫入檔案的資料
? ? encoding:為可選引數,寫入檔案的編碼格式,如果為空,則默認使用系統默認的編碼,
readFile
? ? [作者:Surpassme]主要功能是將指定內容讀取檔案,其主要引數如下所示:
? ? file:檔案路徑,支持絕對路徑和相對路徑
? ? encoding:為可選引數,讀取檔案的編碼格式,如果為空,則默認使用系統默認的編碼,
? ? writeFile和readFile 示例如下所示:
pipeline{
agent any
options {
timestamps()
}
parameters{
string(name:"filePath",
defaultValue:"/var/log/surpass.log",
description:"read and write file demo"
)
}
stages{
stage("write and read file demo"){
steps{
script {
writeFile(
file:"${params.filePath}",
text:"name:Surpass\nage:28\nlocation:Shanghai\n",
encoding:"utf8"
)
def content=readFile(
file:"${params.filePath}",
encoding:"utf8"
)
println "read file:${params.filePath}\nContent is\n${content}"
}
}
}
}
}
? ? 運行結果如下所示:

3.3.2.2 命令相關步驟
? ? [作者:Surpassme]pipeline 支持的命令相關步驟主要涉及到命令sh、bat和powershell,sh主要用于Unix/Linux,bat和powershell主要用于Windows,三者支持引數一樣,我們主要以sh為例,主要引數如下所示:
- script: 要運行的腳本
- encoding: 腳本運行后輸出日志的編碼,默認為系統編碼
- returnStatus:
boolean型別,默認值為腳本回傳的狀態碼,如果回傳是非零值,則觸發pipeline運行失敗,如果returnStatus為true,則忽略回傳的狀態碼值,pipeline不受其影響 - returnStdout:
boolean型別,如果returnStdout為true,則標準輸出將做為回傳值,而不是列印到構建日志中,
returnStatus 和 returnStdout 兩個引數一般不會同時使用,如果同時使用,則只有 returnStatus 引數生效,示例如下所示:
pipeline{
agent any
options {
timestamps()
}
stages{
stage("run script cmd demo"){
steps{
script {
println "將sh的回傳值做為引數使用"
def getReturnResult=sh(
script:"date '+%Y%m%d-%H%M%S'",
encoding:"utf8",
returnStdout:true
)
println "getReturnResult is ${getReturnResult}"
sh(
script:"ls /var/log/suprass.txt",
encoding:"utf8",
returnStatus:false
)
}
}
}
}
}
? ? 運行結果如下所示:

? ? 為了做對比,修改returnStatus為true
pipeline{
agent any
options {
timestamps()
}
stages{
stage("run script cmd demo"){
steps{
script {
println "將sh的回傳值做為引數使用"
def getReturnResult=sh(
script:"date '+%Y%m%d-%H%M%S'",
encoding:"utf8",
returnStdout:true
)
println "getReturnResult is ${getReturnResult}"
sh(
script:"ls /var/log/suprass.txt",
encoding:"utf8",
returnStatus:true
)
}
}
}
}
}
? ? 運行結果如下所示:

3.3.2.3 其他相關步驟
error
? ? [作者:Surpassme]用于主動報錯,中止pipeline的運行,主要有一個引數message,示例如下所示:
pipeline{
agent any
options {
timestamps()
}
stages{
stage("throw error demo"){
steps{
script {
println "主動拋出例外示例"
error(
message:"主動拋出例外示例"
)
}
}
}
}
}
? ? 運行結果如下所示:

timeout
? ? [作者:Surpassme]用于為被timeout包含的代碼塊設定超時時間,主要支持的引數如下所示:
? ? time:整型,超時時間
? ? unit:可選引數,為時間單位,支持的值有NANOSECONDS、MICROSECONDS、MILLISECONDDS、
? ? ? ? SECONDS、MINUTES(默認)、HOURS、DAYS
? ? activity:可選引數,如果為true,則代表在日志沒有活動后,才算作超時,
? ? 示例如下所示:
pipeline{
agent any
options {
timestamps()
}
stages{
stage("timeout demo"){
steps{
script {
timeout(time:1,unit:"NANOSECONDS"){
sh(
script:"sleep 10",
encoding:"utf8",
returnStatus:true
)
}
}
}
}
}
}
? ? 運行結果如下所示:

waitUntil
? ? [作者:Surpassme]不斷重復運行waitUntil里面的代碼,直至條件為true,waitUntil不負責處理代碼里面的例外例外,若遇到錯誤,則直接拋出例外,
? ? 示例如下所示:
pipeline{
agent any
options {
timestamps()
}
stages{
stage("waitUntil demo"){
steps{
script {
timeout(time:1,unit:"SECONDS"){
waitUntil{
def statusCodes=sh(
script:"curl -X GET -o /dev/null -I -s -w %{http_code} https://www.baidu.com/",
encoding:"utf8",
returnStdout:true
)
println "status code is ${statusCodes}"
def ret=(statusCodes == 400)
println "ret is ${ret}"
return ret
}
}
}
}
}
}
}
? ? 運行結果如下所示:

waitUntil[作者:Surpassme]一般常與timeout一起使用,從而避免死回圈
retry
? ? [作者:Surpassme]將被retry包含的腳本按指定次數重復執行,如果其中某一次出現例外,則中止本次執行,再次進行下一次執行,示例如下所示:
pipeline{
agent any
options {
timestamps()
}
stages{
stage("retry demo"){
steps{
script {
retry(3){
sh(
script:"echo surpass",
encoding:"utf8",
returnStatus:true
)
error(
message:"throw error"
)
}
}
}
}
}
}
? ? 運行結果如下所示:

sleep
? ? [作者:Surpassme]sleep 與Linux中的sleep命令類似,一般用于暫停pipeline,其支持的引數如下所示:
? ? time:整型,超時時間
? ? unit:可選引數,為時間單位,支持的值有NANOSECONDS、MICROSECONDS、MILLISECONDDS、
? ? ? ? SECONDS(默認)、MINUTES、HOURS、DAYS
pipeline{
agent any
options {
timestamps()
}
stages{
stage("timeout demo"){
steps{
script {
sleep(
time:10,
unit:"SECONDS"
)
println "after pause 10s"
}
}
}
}
}
? ? 運行結果如下所示:

原文地址:https://www.jianshu.com/p/e99708a14aa0
本文同步在微信訂閱號上發布,如各位小伙伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:

作者: Surpassme
來源: http://www.jianshu.com/u/28161b7c9995/
http://www.cnblogs.com/surpassme/
宣告:本文著作權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出 原文鏈接 ,否則保留追究法律責任的權利,如有問題,可發送郵件 聯系,讓我們尊重原創者著作權,共同營造良好的IT朋友圈,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/540253.html
標籤:其他
上一篇:什么是計算機網路
