新手真的別再用過時(shí)的jenkins freestyle了,10分鐘教你搞定快速編寫jenksinfile,快速離線調(diào)試
Pipeline是一套運(yùn)行于jenkins上的工作流框架,將原本獨(dú)立運(yùn)行于單個(gè)或者多個(gè)節(jié)點(diǎn)的任務(wù)連接起來,實(shí)現(xiàn)單個(gè)任務(wù)難以完成的復(fù)雜流程編排與可視化。它通過Domain Specific Language(DSL)syntax定義Pipeline As Code并且實(shí)現(xiàn)持續(xù)交付的目的。
Pipeline是Jenkins2.X的最核心的特性,幫助Jenkins實(shí)現(xiàn)從CI到CD與DevOps的轉(zhuǎn)變、
注:Jenkins 1.0 只能通過UI界面手動(dòng)操作來“描述”流水線; Jenkins 2.0 開始支持pipeline as code.
為什么要使用pipeline
1.代碼: pipeline 以代碼的形式實(shí)現(xiàn),通過被撿入源代碼控制,使團(tuán)隊(duì)能夠編譯,審查和迭代其CD流程
2.可連續(xù)性: jenkins 重啟或者中斷后都不會(huì)影響pipeline job
3.停頓: pipeline 可以選擇停止并等待人工輸入或者批準(zhǔn),然后在繼續(xù)pipeline運(yùn)行
4.多功能: pipeline 支持現(xiàn)實(shí)世界的復(fù)雜CD要求, 包括fork、join子進(jìn)程,循環(huán)和并行執(zhí)行工作的能力
5.可擴(kuò)展: pipeline 插件支持其DSL的自動(dòng)擴(kuò)展以及其插件集成的多個(gè)選項(xiàng)。
Pipeline結(jié)構(gòu)快速解析
Jenlins Pipeline的腳本語法是由Groovy語言實(shí)現(xiàn),學(xué)習(xí)成本較低,簡(jiǎn)單易學(xué)。 目前Jenlins Pipeline支持兩種語法:
-
Declarative 聲明式(在Pipeline plugin 2.5中引入)
-
Scripted Pipeline 腳本式

image.png
聲明式pipeline 基本語法和表達(dá)式遵循 groovy語法,但是有以下例外:
-
聲明式pipeline 必須包含在固定格式的pipeline{} 塊內(nèi)
-
每個(gè)聲明語句必須獨(dú)立一行, 行尾無需使用分號(hào)
-
塊(Blocks{}) 只能包含章節(jié)(Sections),指令(Directives),步驟(Steps),或者賦值語句
-
屬性引用語句被視為無參數(shù)方法調(diào)用。 如input()
-
塊(Blocks{})
由大括號(hào)括起來的語句: 如 Pipeline{}, Sections{}, parameters{}, script{}
- 章節(jié)(Sections)
通常包括一個(gè)或者多個(gè)指令或步驟 如 agent,post,stages,steps
- 指令(Directives)
environment, options, parameters, triggers, stage, tools, when
- 步驟(steps)
執(zhí)行腳本式pipeline, 如script{}
Jenkins pipeline包含兩類元素:stages和steps。如下圖:

image.png
Stage:階段,一個(gè)Pipeline可以劃分成若干個(gè)Stage,每個(gè)Stage代表一組操作,例如:“Build”,“Test”,“Deploy”。 注意,Stage是一個(gè)邏輯分組的概念,可以跨多個(gè)Node
Step:步驟,Step是最基本的操作單元,小到創(chuàng)建一個(gè)目錄,大到構(gòu)建一個(gè)Docker鏡像,由各類Jenklins Plugin提供,例如:sh ‘make’ Node:節(jié)點(diǎn),一個(gè)Node就是一個(gè)Jenkins節(jié)點(diǎn),或者是Master,或者是Agent,是執(zhí)行Step的具體運(yùn)行環(huán)境。
pipeline{
agent any
stages {
stage('Build') {
steps{
echo 'This is a build step'
}
}
stage('Test') {
steps{
echo 'This is a test step'
}
}
stage('Deploy') {
steps{
echo 'This is a deploy step'
}
}
}
}
Pipeline編寫的輔助工具
Snipper Generator(代碼片段生成器,語法檢查器)

image.png
Replay Pipeline
重放pipeline,可以修改script,修改后的不存入config.xml
DSL Reference 語法參考手冊(cè)
- 全局變量引用

image.png
Jenkinsfile本地校驗(yàn)
Jenkins Pipeline Linter Connector (vscode 插件)

image.png
如下圖所示,插件按照后需要配置如下參數(shù):
-
jenkins.pipeline.linter.connector.url 是 Jenkins 期望的 POST 請(qǐng)求地址,包含你要校驗(yàn)的 Jenkinsfile 文件。通常為 http://<your_jenkins_server:port>/pipeline-model-converter/validate。
-
jenkins.pipeline.linter.connector.user 允許指定你的 Jenkins 用戶名。
-
jenkins.pipeline.linter.connector.pass 允許指定你的 Jenkins 密碼。
-
jenkins.pipeline.linter.connector.crumbUrl 當(dāng)你的 Jenkins 啟用了 CRSF 時(shí)必須指定。通常為 http://<your_jenkins_server:port>/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)。

Ctrl+Shift+P執(zhí)行如下命令,對(duì)編寫的Jenkinsfile進(jìn)行校驗(yàn)

Jenkins Declarative Parser
? jdp check data/valid/complex-deployment/Jenkinsfile
Checking: data/valid/complex-deployment/Jenkinsfile
Looks valid! Great work!

浙公網(wǎng)安備 33010602011771號(hào)