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,或掃描下面的二維碼添加關注: