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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 安装插件
技术图片
1.2.使用Role-Based Strategy插件
技术图片
1.3 添加全局角色和项目角色
技术图片
1.4 赋予用户权限
技术图片
2.master-slave 介绍
2.1解决jenkins单点构建任务多,负载高,性能不足的场景。
技术图片
2.2 构建项目的时候选择,构建这个项目的时候,就会在192.168.17.7服务器上来执行pipeline中的一系列操作。
技术图片

jenkins图像化界面设置:
1.设置保留构建历史(个数与天数)
技术图片
2.参数化构建,选取对应的tag来发版。(一般以日期时间分钟来命名tag版本,便于区分)
技术图片
3.pipeline编写
技术图片
详细内容参考:

node() 
stage(‘ Git clone ‘) 
git branch: ‘test‘, credentialsId: ‘dc404ee2-350e-4934-a668-da4aee1ba535‘, url: ‘git@xx.xx.xx.xx: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部署的时候可根据选择来部署。

技术图片
3.为了达到后端高可用及负载均衡,一般部署在两台上,因此用ansible来管理后端节点,如删除容器,拉取镜像,启动容器。

以上是关于jenkins+docker+gitlab+harbor+pipeline快速部署发版流程的主要内容,如果未能解决你的问题,请参考以下文章

docker部署gitlab与jenkins

gitlab + jenkins + docker + k8s

自动化部署之Gitlab+Jenkins+Docker

搭建Jenkins,Gitlab自动化打包部署项目

搭建Jenkins,Gitlab自动化打包部署项目

gitlab+jenkins+docker