jenkins+docker+gitlab+harbor+pipeline快速部署發版流程

介紹
隨着業務的增長,需求也開始增多,每個需求的大小,開發週期,發佈時間都不一致。基於微服務的系統架構,功能的疊加,對應的服務的數量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化。因此,傳統的人工部署已經心有餘而力不足。
持續集成,持續部署,持續交互對於微服務開發來說,是提高團隊整體效率不可或缺的一環。合理的使用CI,CD能夠極大的提高了生產效率,也提高了產品的交互質量。
流程梳理:

1.開發人員對上線版本在gitLab上打了一個tag
2.jenkins獲取tag版本.
3.編寫pipeline
3.1 拉取代碼 git clone
3.2 maven 構建jar包
3.3 編寫dockerfile文件
3.4 創建鏡像並推送到本地harbor鏡像倉庫
3.5 首先刪除容器,拉取鏡像並啓動容器

jenkins準備:(相關插件使用)
1.1 安裝插件
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
1.2.使用Role-Based Strategy插件
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
1.3 添加全局角色和項目角色
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
1.4 賦予用戶權限
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
2.master-slave 介紹
2.1解決jenkins單點構建任務多,負載高,性能不足的場景。
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
2.2 構建項目的時候選擇,構建這個項目的時候,就會在192.168.17.7服務器上來執行pipeline中的一系列操作。
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程

jenkins圖像化界面設置:
1.設置保留構建歷史(個數與天數)
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
2.參數化構建,選取對應的tag來發版。(一般以日期時間分鐘來命名tag版本,便於區分)
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
3.pipeline編寫
jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
詳細內容參考:

node() {
stage(' Git clone ') {
git branch: 'test', credentialsId: 'dc404ee2-350e-4934-a668-da4aee1ba535', url: '[email protected]:meiyeyun/backend/xxxx/yx_${service_name}.git'
}

stage('maven buid'){
def mvnhome = '/usr/local/maven/'
def jdkhome = '/usr/local/jdk1.8.0_161'
env.PATH = "${mvnhome}/bin:${jdkhome}/bin:${env.PATH}"
sh "mvn clean package -Dmaven.test.skip=true"
}
stage("Create Dockerfile"){
sh '''cat << EOF > Dockerfile
FROM java
ADD target/${service_name}-0.0.1-SNAPSHOT.jar app.jar
enter ["java","-Djava.library.path=/usr/local/lib -server -XX:ReservedCodeCacheSize=64m -XX:TLABWasteTargetPercent=10 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UnlockDiagnosticVMOptions -XX:ParallelGCThreads=8 -XX:ConcGCThreads=4 -Xss256k -server -Xms2g -Xmx2g -XX:MaxDirectMemorySize=256m -XX:MaxTenuringThreshold=3 -XX:NewRatio=1 -XX:SurvivorRatio=8 -XX:+UnlockDiagnosticVMOptions -XX:ParGCCardsPerStrideChunk=32768 -XX:+AlwaysPreTouch","-jar","/app.jar","--spring.profiles.active=test"]
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
'''
sh 'cat Dockerfile'
}
stage("build images and push to harbor"){
sh '''
containerPool=172.10.2.10/myy_test
docker build -t ${service_name}:v1 .
docker tag ${service_name}:v1 ${containerPool}/${service_name}:v1
docker login -u admin -p 124356 172.10.2.10
docker push ${containerPool}/${service_name}:v1
'''
}
stage("pull images and deploy"){
sh '''
containerPool=172.10.2.10/myy_test
ansible myy_test -a "docker rm -f ${service_name}"
ansible myy_test -a "docker login -u admin -p 124356 172.10.2.10"
ansible myy_test -a "docker pull ${containerPool}/${service_name}:v1"
ansible myy_test -a "docker run -d -p 8991:8991 --name ${service_name} -v /data/${service_name}/:/data/ --network=host ${containerPool}/${service_name}:v1"
ansible myy_test -m shell -a "docker ps |grep ${service_name}"
'''
} 
}

註明:

1.172.10.2.10爲harbor地址。
2.微服務較多,可以在gitlab定義多個,如yx_oms.git;yx_ums.git; jenkins部署的時候可根據選擇來部署。

jenkins+docker+gitlab+harbor+pipeline快速部署發版流程
3.爲了達到後端高可用及負載均衡,一般部署在兩臺上,因此用ansible來管理後端節點,如刪除容器,拉取鏡像,啓動容器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章