1 CI/CD 持續(xù)集成/持續(xù)部署
持續(xù)集成(Continuous integration)呜象,開發(fā)團(tuán)隊(duì)經(jīng)常集成他們的工作,每天發(fā)生多次集成碑隆。每次集成通過自動化構(gòu)建(包括編譯恭陡、發(fā)布、自動化測試)來驗(yàn)證上煤,從而盡早地發(fā)現(xiàn)集成錯誤休玩。
持續(xù)部署(Continuous Deployment)通過自動化的構(gòu)建、測試和部署循環(huán)來快速交付高質(zhì)量產(chǎn)品劫狠。
持續(xù)交付(Continuous Delivery)頻繁地將軟件的新版本拴疤,交付給質(zhì)量團(tuán)隊(duì)或者用戶,以供評審盡早發(fā)現(xiàn)生產(chǎn)環(huán)境中存在的問題独泞;如果評審?fù)ㄟ^遥赚,代碼就進(jìn)入生產(chǎn)階段。
2 Pipeline概念
Pipeline是一個(gè)用戶定義的CD流水線模式阐肤。Pipeline代碼定義了通常包含構(gòu)建、測試和發(fā)布步驟的完整構(gòu)建過程讲坎。
Node
Node是一個(gè)機(jī)器孕惜,它是Jenkins環(huán)境的一部分,并且能夠執(zhí)行Pipeline晨炕。同時(shí)衫画,node代碼塊也是腳本式Pipeline語法的關(guān)鍵特性。
Stage
Stage塊定義了在整個(gè)Pipeline中執(zhí)行的概念上不同的任務(wù)子集(例如“構(gòu)建”瓮栗,“測試”和“部署”階段)削罩。
Step
一項(xiàng)任務(wù),一個(gè)Stage包含多個(gè)Step费奸。一個(gè)步驟告訴Jenkins在特定的時(shí)間點(diǎn)要做什么弥激。例如,使用sh step:sh 'make'可以執(zhí)行make這個(gè)shell命令愿阐。
3 Pipeline 腳本式語法
pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code from scm"
}
}
stage("package"){
steps{
echo "package code"
}
}
stage("deploy"){
steps{
echo "deploy package to node1"
}
}
}
}
4 Pipeline示例
4.1 簡單示例
Pipeline 腳本包含3步微服,每一步只進(jìn)行輸出
pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code from scm"
}
}
stage("package"){
steps{
echo "package code"
}
}
stage("deploy"){
steps{
echo "deploy package to node1"
}
}
}
}
4.1.1 具體步驟
在Jenkins中新建一個(gè)pipeline項(xiàng)目
寫入Pipeline腳本
立即構(gòu)建后,出現(xiàn)流水線
查看log可以查看每一步的詳細(xì)信息
4.2 使用代碼包中的Jenkinsfile
Jenkins可以配置識別git代碼包中的Pipeline腳本
Gitlab的項(xiàng)目中上傳Pipeline腳本
Pipeline腳本的具體內(nèi)容:在
package
階段進(jìn)行代碼打包缨历,deploy
階段進(jìn)行代碼到web服務(wù)器上線以蕴。Jenkins項(xiàng)目的工作目錄是/var/lib/jenkins/workspace/項(xiàng)目名稱
pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code from scm"
}
}
stage("unit test"){
steps{
echo "unit test"
}
}
stage("package"){
steps{
sh 'tar -zcf /tmp/web-$BUILD_ID.tar.gz ./* --exclude=.git --exclude=Jenkinsfile'
}
}
stage("deploy"){
steps{
sh 'ssh root@10.0.0.7 "cd /html && mkdir web-$BUILD_ID"'
sh 'scp /tmp/web-$BUILD_ID.tar.gz root@10.0.0.7:/html/web-$BUILD_ID'
sh 'ssh root@10.0.0.7 "cd /html/web-$BUILD_ID && tar xf web-$BUILD_ID.tar.gz && rm -rf web-$BUILD_ID.tar.gz"'
sh 'ssh root@10.0.0.7 "cd /html && rm -rf www && ln -s web-$BUILD_ID www"'
sh 'ssh root@10.0.0.7 "chown -R nginx:nginx /html/web-$BUILD_ID"'
}
}
}
}
Pipeline腳本中的$BUILD_ID變量是Jenkins的構(gòu)建ID
配置后進(jìn)行構(gòu)建測試