一铃慷、流水線自動化構(gòu)建
??Jenkins Pipeline是一套插件,支持將連續(xù)輸送Pipeline實施和整合到Jenkins蜕该。Pipeline提供了一組可擴展的工具犁柜,用于通過PipelineDSL為代碼創(chuàng)建簡單到復(fù)雜的傳送Pipeline。
?? 對于單個項目來說堂淡,使用這樣的Pipeline來構(gòu)建能夠滿足絕大部分需求馋缅,但是這樣做也有很多缺陷,包括:
多個項目的Pipeline打包腳本不能公用淤齐,導(dǎo)致一個項目寫一份腳本股囊,維護比較麻煩。
??Jenkins提供了一個更優(yōu)雅的管理Pipeline腳本的方式更啄,在配置項目Pipeline的時候稚疹,選擇Pipeline script from SCM。
??這樣祭务,Jenkins在啟動job的時候内狗,首先會去倉庫里面拉取腳本,然后再運行這個腳本义锥。在腳本里面柳沙,我們規(guī)定的構(gòu)建方式和流程,就會按部就班地執(zhí)行拌倍。
二赂鲤、Pipeline的幾個基本概念
Stage: 階段,一個Pipeline可以劃分為若干個Stage柱恤,每個Stage代表一組操作数初。注意,Stage是一個邏輯分組的概念梗顺,可以跨多個Node泡孩。
Node: 節(jié)點,一個Node就是一個Jenkins節(jié)點寺谤,或者是Master仑鸥,或者是slave,是執(zhí)行Step的具體運行期環(huán)境变屁。
Step: 步驟眼俊,Step是最基本的操作單元,小到創(chuàng)建一個目錄敞贡,大到構(gòu)建一個Docker鏡像泵琳,由各類Jenkins Plugin提供。
三誊役、PIpeline語法
1.Pipeline支持兩種語法:Declarative Pipeline(在Pipeline 2.5中引入获列,結(jié)構(gòu)化方式)和Scripted Pipeline,兩者都支持建立連續(xù)輸送的Pipeline蛔垢。
共同點:
兩者都是pipeline代碼的持久實現(xiàn)击孩,都能夠使用pipeline內(nèi)置的插件或者插件提供的steps,兩者都可以利用共享庫擴展鹏漆。
區(qū)別:
兩者不同之處在于語法和靈活性巩梢。Declarative pipeline對用戶來說,語法更嚴格艺玲,有固定的組織結(jié)構(gòu)括蝠,更容易生成代碼段,使其成為用戶更理想的選擇饭聚。但是Scripted pipeline更加靈活忌警,因為Groovy本身只能對結(jié)構(gòu)和語法進行限制,對于更復(fù)雜的pipeline來說秒梳,用戶可以根據(jù)自己的業(yè)務(wù)進行靈活的實現(xiàn)和擴展法绵。
Declarative Pipeline:
pipeline {
agent any // 在可用的節(jié)點運行
stages{
stage ('Prepare'){
steps{ // 清空發(fā)布目錄
bat '''if exist D:\\publish\\LoginServiceCore (rd/s/q D:\\publish\\LoginServiceCore)
if exist C:\\Users\\Administrator\\.nuget (rd/s/q C:\\Users\\Administrator\\.nuget) exit''' } }
// 拉取git代碼倉庫
stage ('Checkout'){
steps{
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'c6d98bbd-5cfb-4e26-aa56-f70b054b350d',
url: 'http://xxx/xxx/xxx']]])
}
}
// 構(gòu)建
stage ('Build'){
steps{
bat '''cd "D:\\Program Files (x86)\\Jenkins\\workspace\\LoginServiceCore\\LoginApi.Hosting.Web"
dotnet restore
dotnet build
dotnet publish --configuration Release --output D:\\publish\\LoginServiceCore'''
}
}
// 部署
stage ('Deploy'){
steps{
bat '''cd D:\\PipelineScript\\LoginServiceCore
python LoginServiceCore.py'''
}
}
// 自動化測試(python代碼實現(xiàn))
stage ('Test'){
steps{
bat'''cd D:\\PipelineScript\\LoginServiceCore
python LoginServiceCoreApitest.py'''
}
}
}
}
Scripted Pipeline:
node('master') { // master節(jié)點運行,以下stage也可指定節(jié)點
stage 'Prepare' // 清空發(fā)布目錄
bat '''if exist D:\\publish\\LoginServiceCore (rd/s/q D:\\publish\\LoginServiceCore)
if exist C:\\Users\\Administrator\\.nuget (rd/s/q C:\\Users\\Administrator\\.nuget)
exit'''
// 拉取git代碼倉庫
stage 'Checkout'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [],
submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'c6d98bbd-5cfb-4e26-aa56-f70b054b350d',
url: 'http://xxx/xxx/xxx']]])
// 構(gòu)建
stage 'Build'
bat '''cd "D:\\Program Files (x86)\\Jenkins\\workspace\\LoginServiceCore\\LoginApi.Hosting.Web"
dotnet restore
dotnet build
dotnet publish --configuration Release --output D:\\publish\\LoginServiceCore'''
// 部署
stage 'Deploy'
bat '''
cd D:\\PipelineScript\\LoginServiceCore
python LoginServiceCore.py
'''
// 自動化測試(python代碼實現(xiàn))
stage 'Test'
bat'''
cd D:\\PipelineScript\\LoginServiceCore
python LoginServiceCoreApitest.py
'''
}
四酪碘、Pipeline配置
1.新建一個“流水線”的job
-
配置Pipeline腳本
-
執(zhí)行結(jié)果