7. Jenkins 其他功能
[作者:Surpassme]本篇主要介紹日常使用Jenkins過程中一些比較實用的功能。
7.1 Jenkins內部調用另一個job
[作者:Surpassme]假設在一個Jenkins中有兩個彼此獨立的任務,但隨着迭代不斷更新,兩個彼此獨立的任務需要相互調用。這時候我們可以在一個任務中,添加另一個任務的步驟。除這種方法,還有沒有其他的辦法呢?
[作者:Surpassme]既然在Jenkins存在參數化的pipeline,則應該是可以支持在一個pipeline中調用另一個pipeline。而要實現這個功能,在pipeline中可以使用build
步驟來實現。看起來是不是與upsteam非常相似,主要區別如下所示:
- build 步驟是上游使用,而upstream是下游使用
- build 可以帶參數,而upsteam屬於被動觸發且不能帶參數
[作者:Surpassme]build 使用用法示例如下所示:
steps{
build(
job:"jobName",
parameters:[
paramsType(name:"name",value:"value")
],
propagate:true,
quietPeriod:3,
wait:true
)
}
[作者:Surpassme]build 步驟的兩個基本參數如下所示:
- job:
必填參數
,目標任務的名稱 - parameters:
可選參數
,目標任務的傳入參數列表,使用方法與參數化命令parameters
類似。 - propagate:
可選參數
,布爾類型。若值爲true
,則只有當下遊pipeline的運行結果狀態爲SUCCESS
時,上游pipeline纔算成功,若值爲false
,則忽略下游pipeline的運行結果狀態,上游pipeline都忽略。默認爲true
- quietPeriod:
可選參數
,整型。觸發下游pipeline後,下游pipeline等待多久執行。如果不設置,則等待時長由下游pipeline確定,單位爲秒
- wait:
可選參數
,布爾類型,是否等待下游pipeline運行完成。默認爲true
choice類型的參數沒有對應的傳參方法,使用
string
傳參方法代替
[作者:Surpassme]假設現在有兩個job,分別爲SurpassA
和SurpassB
,上游爲SurpassA,下游爲SurpassB
- SurpassB的任務pipeline腳本如下所示:
pipeline{
agent any
options{
timestamps()
}
parameters{
string(
name:"stringDemo",
defaultValue:"job string SurpassB",
description:"job SurpassB string demo"
)
text(
name:"textDemo",
defaultValue:"job text SurpassA\njob text SurpassB\njob text SurpassC",
description:"job SurpassB text demo"
)
booleanParam(
name:"booleanDemo",
defaultValue:true,
description:"job SurpassB boolean demo"
)
choice(
name:"choiceDemo",
choices:["SurpassA","SurpassB","SurpassC"],
description:"job SurpassB choice demo"
)
password(
name:"passwdDemo",
defaultValue:"job passwd SurpassB",
description:"job SurpassB password demo"
)
}
stages{
stage("job SurpassB demo"){
steps{
echo "job SurpassB demo"
}
}
}
}
- SurpassA的任務pipeline腳本如下所示:
pipeline{
agent any
options{
timestamps()
}
stages{
stage("call inner jobs demo"){
steps{
echo "call inner job SurpassB"
build(
job:"39-SurpassB",
parameters:[
string(name:"stringDemo",value:"input text by SurpassA"),
text(name:"textDemo",value:"input text by SurpassB"),
booleanParam(name:"booleanDemo",value:false),
string(name:"choiceDemo",value:"SurpassB"),
password(name:"passwdDemo",value:"Surpass")
]
)
}
}
}
}
最終運行結果如下所示:
7.2 Jenkins調用外部Jenkins
[作者:Surpassme]前面演示的在同一個Jenkins,內部相互調用不同任務的pipeline,那如果是兩個不同服務節點的Jenkins有沒有相互調用呢?答案是可以的。
通過遠程Jekins調用本地Jenkins,演示的環境如下所示:
Jenkins Server | 描述信息 |
---|---|
192.168.188.133 | 本地Jenkins |
192.168.188.132 | 遠程Jenkins |
操作步驟如下所示:
- [作者:Surpassme]1.在本地Jenkins開啓
觸發遠程構建
,並設置相應的Token,如下所示:
- [作者:Surpassme]2.在本地Jenkins新建一個用戶,並以該用戶進行登錄,查看並複製對應的API Token信息,如下所示:
- [作者:Surpassme]3.通過接口工具(如Postman)發送HTTP請求,檢驗是否能成功調用
運行結果如下所示:
- [作者:Surpassme]4.在遠程pipeline中添加以下步驟即可實現遠程調用
pipeline{
agent any
options{
timestamps()
}
stages{
stage("remote call pipeline demo"){
steps{
script{
def url="Surpass:[email protected]:9090/job/39-SurpassB/buildWithParameters?token=surpass-local&stringDemo=SurpassRemote&textDemo=SurpassRemote&booleanDemo=true&choiceDemo=SurpassB&passwdDemo=SurpassRemote"
sh(
script:"curl -X POST \'${url}\'",
returnStatus:true
)
}
}
}
}
}
[作者:Surpassme]運行結果如下所示:
7.3 Jenkins 備份
[作者:Surpassme]Jenkins 的所有數據都是存放在文件中。因此Jenkins備份也就是備份JENKINS_HOME
目錄。其目錄結構大致如下所示:
- config.xml: Jenkins系統配置文件
- *.xml: 部分插件配置文件
- plugins:插件安裝路徑
- jobs: job存放路徑
其中jobs的文件目錄結構如下所示:
jobName: 以Jenkins 項目名稱做爲文件夾名稱
- config.xml: 該項目對應的配置文件,裏面存儲有相應的pipeline
- nextBuildNumber:存放下一次構建的構建號,爲文本文件
- builds:每次構建內容
- workspace: 工作空間目錄
[作者:Surpassme]並不是所有內容都需要備份,一般來講,只需要備份jobs
和plugins
目錄即可。
原文地址:https://www.jianshu.com/p/56aeeaa39fa4
本文同步在微信訂閱號上發佈,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注: