歡迎關注我公眾號呀~「測試游記」「zx94_11」
文件目錄相關操作
deleteDir:刪除當前目錄
-
dir:切換到目錄
- 默認流水線工作在工作空間目錄下,dir步驟可以讓我們切換到其他目錄
dir('/tmp'){ deleteDir() }
fileExists:判斷文件是否存在,結果返回布爾值
isUnix:判斷是非為UNIX系統,如果是則返回true
pwd:返回當前所在目錄
有一個布爾類型的可選參數tmp,如果為true,則返回與當前工作空間關聯的臨時目錄
-
writeFile:將內容寫入指定文件中
- file:文件路徑,可以是絕對路徑,也可以是相對路徑
- text:要寫入的文件內容
- encoding:目標文件的編碼。如果為空,則使用操作系統默認的編碼
-
readFile:讀取文件
- file:路徑,同上
- encoding:編碼,同上
script{
writeFile(file:"base64File", text:"amVua2lucyBib29r", encoding:"Base64")
def content = readFile(file:"base64File", encoding: "UTF-8")
echo "${content}"
}
amVua2lucyBib29r
是jenkins book
的Base64編碼
制品相關步驟
-
stash:保存臨時文件
將文件保存起來,以便同一次構建的其他步驟或階段使用。
如果整個流水線在同一臺機器上執行,那stash是多余的,一般用于跨Jenkins node使用。
stash步驟會將文件存儲在tar文件中,對于大文件的stash操作會消耗Jenkins master的計算資源。
name:字符串類型,保存文件的集合的唯一標識
allowEmpty:布爾類型,允許stash內容為空
excludes:字符串類型,排除文件,如果排除多個使用「逗號」分隔
includes:字符串類型,stash文件,留空表示全部
useDefaultExcludes:布爾類型,true:使用Ant風格路徑默認排除文件
Ant風格
| 通配符 | 說明 |
| ------ | ----------------------- |
| `?` | 匹配任何單字符 |
| `*` | 匹配0或者任意數量的字符 |
| `**` | 匹配0或者更多的目錄 |
| URL路徑 | 說明 |
| ------------------------ | ------------------------------------------------------------ |
| /project/`*`.a | 匹配**項目根路徑**下所有在project路徑下的.a文件 |
| /project/p`?`ttern | 匹配**項目根路徑**下 /project/pattern 和 /app/pXttern等,但是不包括/app/pttern |
| /`**`/example | 匹配項目根路徑下 /project/example, /project/foow/example, 和 /example等 |
| /app/`**`/dir/file.`*` | 匹配(Matches) /app/dir/file.jsp, /app/foo/dir/file.html,/app/foo/bar/dir/file.pdf, 和 /app/dir/file.java等 |
| /`**`/`*`.jsp | 匹配(Matches)任何的.jsp 文件 |
最長匹配原則:
/project/dir/file.jsp,現在存在兩個路徑匹配模式`/**/*.jsp`和`/project/dir/*.jsp`,那么會根據模式`/project/dir/*.jsp`來匹配
-
unstash:取出之前stash的文件
pipeline { agent none stages { stage('stash') { agent {label "master"} steps { writeFile file: "a.txt",text: "$BUILD_NUMBER" stash(name: "abc", includes: "a.txt") } } stage('unstash') { agent {label "node2"} steps { script { unstash("abc") def content = readFile("a.txt") echo "${content}" } } } } }
命令相關
-
sh:執行shell命令
script:要執行的shell腳本
encoding:腳本執行后輸出日志的編碼,默認為系統編碼
returnStatus:布爾類型,默認返回狀態碼,如果是非零則流水線執行失敗。設置為true后,無論什么狀態碼,流水線執行都不受影響
-
returnStdout:布爾類型,如果為true,任務的標準輸出將作為步驟的返回值,而不是打印到構建日志中(如果有錯誤,則依舊會打印到日志中)
??returnStatus和returnStdout同時使用,只有returnStatus生效
-
bat,powershell步驟
- bat步驟執行Windows的批處理命令
- 支持參數類型sh
- powershell執行的是PowerShell腳本
- 支持參數類似sh
- bat步驟執行Windows的批處理命令
其他步驟
-
error:主動報錯,中止pipeline
error(“there is a error”)
-
tool:使用預定義的工具
name:工具名稱
type(可選):工具類型,指該工具安裝類的全路徑類名
-
在Global Tool Configuration(全局工具配置)中配置了工具
全局工具配置image-20190712222337303
-
timeout:代碼塊超時時間
- time:整型
- unit(可選):時間單位,默認分鐘。支持NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES(默認),HOURS,DAYS
- activity(可選):布爾類型,true時 只有當日志沒活動才算真正的超時
-
waitUntil:等待條件滿足
timeout(50) { waitUntil{ script{ def r = sh script: 'curl http://exmple',return Status: true return (r == 0) } } }
-
retry:重復執行塊
steps { retry(20){ script{ sh script: 'curl http://exmple',return Status: true } } }
??如果某次retry拋出異常,只中止當次,不會中止整個retry的執行
在執行retry的過程中,用戶是無法中止流水線的
-
sleep:休眠一段時間
- time:整型,休眠時間
- unit(可選):時間單位,默認秒,與
timeout
類似 - 示例:
sleep(120) // 休眠120秒
,sleep(time:'2',unit:"MINUTES") // 休眠2分鐘
編寫Jenkinsfile
推薦VS Code擴展:Jenkins Pipeline Linter Connector
- 安裝
- 配置擴展
- 配置Jenkins服務器
- 運行
故意寫錯了進行校驗:
Errors encountered validating Jenkinsfile:
WorkflowScript: 14: unexpected token: } @ line 14, column 1.
}
^