安徽建設(shè)廳網(wǎng)站杭州關(guān)鍵詞優(yōu)化外包
Jenkins簡介
Jenkins是一個開源項目,提供了一種易于使用的持續(xù)集成系統(tǒng),使開發(fā)者從繁雜的集成中解脫出來,專注于更重要的業(yè)務(wù)邏輯實現(xiàn)上。同時Jenkins能實時監(jiān)控集成中存在的錯誤,提供詳細(xì)的日志文件和提醒功能,還能用圖表的形式形象的展示項目構(gòu)建的趨勢和穩(wěn)定性。
如何配置
配置路線大體可以參考《Jenkins持續(xù)集成入門到精通》.pdf
鏈接:https://pan.baidu.com/s/1lGq0D1NhojqTaqLBnF8LPw 提取碼:6666
虛擬機(jī)安裝Jenkins
因為Jenkins是java語言寫的,所以首先在208機(jī)器上配置jdk,版本為11,然后下載配置Jenkins,maven,Git,完全按照《Jenkins持續(xù)集成入門到精通》上的可能會有版本過老導(dǎo)致Jenkins上面的可下載插件不兼容的問題,這個時候可以下載新的Jenkins配置一下就可以解決。
詳細(xì)配置可參考:《Jenkins持續(xù)集成入門到精通》中Jenkins安裝和持續(xù)集成環(huán)境配置
Jenkins憑證管理
《Jenkins持續(xù)集成入門到精通》上面是集成gitlab,集成云效跟教程里的效果一樣,具體操作:
一、點(diǎn)擊紅框處
二、
三、
四、
五、在下面具體配置:
類型我們一般選擇HTTPS賬戶密碼類型的或者ssh類型的(在項目中我是用的HTTPS類型的)
范圍默認(rèn)就行
用戶名和密碼需要填寫(取自云效)
1、點(diǎn)擊個人設(shè)置
2、設(shè)置賬戶密碼
3、回到第五步,將賬戶密碼設(shè)置上去點(diǎn)擊創(chuàng)建即可。
ID、描述可以不寫
六、至此,你的就會保存,同時生成唯一標(biāo)識。
測試憑證是否通過:可繼續(xù)參考 《Jenkins持續(xù)集成入門到精通》-> 持續(xù)集成環(huán)境(4)
Maven配置
參考**《Jenkins持續(xù)集成入門到精通》-> 持續(xù)集成環(huán)境(5)-Maven安裝和配置**
pipeline流水線
在此次平臺建設(shè)過程中,我們需要對項目進(jìn)行CICD,可以使用流水線來對項目進(jìn)行自動拉取,構(gòu)建,部署。
pipeline使用方式可直接參考:《Jenkins持續(xù)集成入門到精通》->Jenkins項目構(gòu)建類型(4)-Pipeline流水線項目構(gòu)建
具體使用
下面我利用Jenkins結(jié)合ns-service-support-user微服務(wù)進(jìn)行持續(xù)集成部署操作。
第一步、部署前,需要在項目中添加相關(guān)依賴以及文件。
1、springboot項目打包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.6</version>
</plugin>
2、添加dockerfile-maven-plugin依賴,添加此依賴后,可以通過dockerfile編譯生成鏡像
<plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.3.6</version><configuration><repository>${project.artifactId}</repository><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE><PRO_NAME>${project.build.finalName}</PRO_NAME></buildArgs></configuration>
</plugin>
3、當(dāng)前項目根目錄添加dockerfile文件(把當(dāng)前項目jar包生成docker鏡像)
FROM openjdk:11
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
COPY ./lib/skywalking-agent.jar ./lib/skywalking-agent.jar
EXPOSE 8098
ENTRYPOINT ["java","-javaagent:./lib/skywalking-agent.jar","-Dskywalking.agent.service_name=","-Dskywalking.collector.backend_service=192.168.192.168.xxx.xxx:11800","-jar","/app.jar"]
4、當(dāng)前項目根目錄添加Jenkinsfile文件對應(yīng)Jenkins流水線
node {stage('拉取代碼') {checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])echo "拉取完成"
}
stage('編譯構(gòu)建') {
def code = sh (script: "docker ps | grep ${Microservices}",returnStatus: true
)
// code 為0 代表 grep 找到 了 ${Microservices} 相關(guān) 的 container
if (code==0){
//首先停止并刪除一個容器xsh ("docker ps -f name=${Microservices} -q | xargs --no-run-if-empty docker container kill")sh ("docker ps -f name=192.168.xxx.xxx:5000/${Microservices} -q | xargs --no-run-if-empty docker container kill")sh ("sleep 10s")sh ("docker container ls -a -f name=${Microservices} -q | xargs -r docker container rm -f")sh ("docker container ls -a -f name=192.168.xxx.xxx:5000/${Microservices} -q | xargs -r docker container rm -f")sh ("sleep 10s")
//刪除鏡像
// sh ("docker rmi ${Microservices}")sh ("docker rmi -f 192.168.xxx.xxx:5000/${Microservices}")
}
//調(diào)用當(dāng)前微服務(wù)dockerfile
sh label: '', script: 'mvn clean package -e -X -U dockerfile:build'
sh "/mydata/hostmachine_jenkins/version/version_up.sh ${Microservices} ${NEW_VERSION}"
def PROJECT_VERSION = readFile "/mydata/hostmachine_jenkins/version/${Microservices}"
// def NEW_VERSION="${PROJECT_VERSION}"
//將當(dāng)前進(jìn)鏡像名修改為192.168.192.168.xxx.xxx:5000/${Microservices}:${NEW_VERSION}
sh ("docker tag ${Microservices}:latest 192.168.192.168.xxx.xxx:5000/${Microservices}:${PROJECT_VERSION}")
//push到私有倉庫中
sh ("docker push 192.168.192.168.xxx.xxx:5000/${Microservices}:${PROJECT_VERSION}")
echo "構(gòu)建完成"
}
stage('部署上線'){
//sh "docker run -d --net=swarm-test --name ${Microservices} -p ${port}:${port} ${Microservices}"
//sh ("docker stack deploy --compose-file=/mydata/hostmachine_jenkins/jenkins_deploy.yml api")
def PROJECT_VERSION = readFile "/mydata/hostmachine_jenkins/version/${Microservices}"
//按行讀取
def lines = PROJECT_VERSION.split("\n")[0]
echo "$lines"
sh "docker service update --image 192.168.192.168.xxx.xxx:5000/${Microservices}:${lines} qa_${Microservices}"
echo "部署完成"
sh ("sleep 10s")
sh ("java -jar /mydata/hostmachine_jenkins/dingding.jar jenkins ${deployer}在${publishTime}將${Microservices}模塊更新至${lines},部署已完成")
}
}
新建任務(wù),選擇流水線項目
創(chuàng)建完畢會跳到configuration配置界面,點(diǎn)擊流水線,
定義選擇pipeline script from SCM
Repository URL復(fù)制云效上項目的HTTPS
Credentials選擇之前創(chuàng)建的全局憑證
指定分支寫上你需要用的
繼續(xù)往下滑,會看到腳本路徑這個參數(shù),這個就是對應(yīng)你項目上的Jenkinsfile文件
繼續(xù)
點(diǎn)擊General,選擇參數(shù)化構(gòu)建過程并點(diǎn)擊添加參數(shù)
添加憑據(jù)參數(shù)
添加選項參數(shù)(這個只針對當(dāng)前項目其實可以在項目中寫死就夠了)
添加文本參數(shù)
添加選項參數(shù)(同樣只針對當(dāng)前項目可以寫死)
添加port,對應(yīng)項目中的port
添加部署人員,方便知道當(dāng)前是誰部署了項目
添加時間參數(shù),對應(yīng)釘釘消息提示
添加版本號,手動輸入更迭版本號
以上的參數(shù)就是對應(yīng)的Jenkinsfile文件中的${***},當(dāng)點(diǎn)擊構(gòu)建的時候?qū)?yīng)的參數(shù)就會映射到Jenkinsfile文件中。
構(gòu)建觸發(fā)器,作用是自動出發(fā)構(gòu)建項目
使用方式請直接參考:《Jenkins持續(xù)集成入門到精通》->Jenkins項目構(gòu)建細(xì)節(jié)(1)-常用的構(gòu)建觸發(fā)器
設(shè)置好后,可以先點(diǎn)擊應(yīng)用然后保存
進(jìn)入自己創(chuàng)建的項目,界面如下:
點(diǎn)擊build with parameter,選擇或者填寫對應(yīng)的參數(shù)
PROJECT_VERSION項目版本號參數(shù)如果不知道上一個版本,我們可以到portainer中查看對應(yīng)的服務(wù)后綴,此后綴就是對應(yīng)的當(dāng)前正在運(yùn)行的項目版本號。
此時PROJECT_VERSION可以設(shè)為1.0.5
所有參數(shù)設(shè)置好后,點(diǎn)擊開始構(gòu)建按鈕,等待他構(gòu)建完成
正常情況下會全流程走完,如下:
可以懸停在對應(yīng)位置并點(diǎn)擊logs查看當(dāng)前流程的日志
或者可以點(diǎn)擊console output查看全流程日志
驗證:
部署成功會有消息提醒
這個時候看portainer中的服務(wù)列表,可以看到服務(wù)正在運(yùn)行,而且版本已經(jīng)從1.0.4升級到1.0.5了
訪問當(dāng)前服務(wù)的驗證接口,查看是否能正常訪問
異常情況會在某個階段爆紅,這時候就需要查看日志定位具體報錯位置具體解決了
筆記:
添加定時任務(wù)腳本:/mydata/hostmachine_jenkins/images_clean.sh(208位置),定時每天10/12/14三個時間段清除虛懸鏡像以及當(dāng)前項目之前版本未使用的鏡像
添加版本自增腳本:/mydata/hostmachine_jenkins/version_up1.sh(208位置),當(dāng)點(diǎn)擊部署的時候,自動增加當(dāng)前項目版本號,并且對部署的服務(wù)進(jìn)行版本號賦值。