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: ‘[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部署的时候可根据选择来部署。


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

原文地址:https://blog.51cto.com/12191723/2433555

时间: 2024-10-06 19:30:08

jenkins+docker+gitlab+harbor+pipeline快速部署发版流程的相关文章

Jenkins+Docker+Git+Harbor流水线打包

环境: CentOS Linux release 7.6.1810 (Core) 192.168.247.214 Jenkins+docker 192.168.247.215 git+harbor [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# systemctl disable firewalld Step1: 安装jdk环境(214) 下载地址:https://www.oracle.com/tech

jenkins+docker+docker-compose完整发版流程

首先搭建jenkins+maven+nexus这一套自动化打包工具,并配置好相应配置,这里就不再赘述了. 其次,搭建好docker集群和私有仓库,以及安装好docker-compose工具,配置好相应的yaml配置文件 以下是增加新工程流程 1,在jenkins中新建maven或者其他工程. 2,需要jenkins中配置,相关信息,如svn路径,maven打包的参数,以及打包成功后需要执行的命令 以上是打包成功后需要执行的命令,需要注意的有以上4个地址,1,2,是把当前工程名和镜像名称这些变量放

jenkins docker

jenkins docker 持续集成实现自动部署,方案有好多,最常用的就是打包部署(只说流程) A君: 1.jenkins 拉取代码(手动或自动),编译打包,生成要部署的安装包或者文件 2.将生成的包推送到放到dockerfile的上下文目录,进行dockerfile的 build 3.将build好的镜像文件tag标签,push到自己的docker私有仓库 4.目标主机将老的容器stop或者rm,然后pull下新的镜像启动 B君: 1.jenkins 拉取代码(手动或自动),编译打包,生成要

项目开发和发版前的工作整理

最近做了一个项目,只负责前端部分,总结一下做项目中的坑. 首先是定位问题,我之前接到的通知是分析一下前端的工作量,进行一下人力安排排期,天真的我没有了解项目架构,仅仅是算了一下页面开发工作量和联调时间.事实证明,这个想法误导了我,后期吃亏了很多.在一个项目中,不管负责的内容多少,都要对项目的架构等有个整体的了解,对接多少项目组,什么样的架构,如何提测发版等对后期的开发很重要. 1.开发之前: 1.需求文档:接到需求之前需要仔细阅读,首先确定逻辑是否通,提出疑问.其次看一下处理流程,对需要对接的项

客户端单周发版下的多分支自动化管理与实践

背景 目前,互联网产品呈现出高频优化迭代的趋势,需求方希望尽早地看到结果,并给予及时反馈,所以技术团队需要用"小步快跑"的姿势来做产品,尽早地交付新版本.基于以上背景,美团客户端研发平台适时地推行了单周发版的迭代策略.单周版本迭代的优点可以概括为三个方面:更快地验证产品创意是否符合预期,更灵活地上线节奏,更早地修复线上Bug. 首先说一下美团平台的发版策略,主要变更点是由之前的每四周发一版改为每周都有发版.具体对比如下: (旧)三周迭代指的是2周开发+1周半测试,依赖固定的排期和测试时

Gitlab+Harbor+Jenkins pipeline实现利用tag部署docker容器

环境 测试部署主机IP:192.168.1.1 Jenkins主机IP:192.168.1.2 Harbor主机IP:192.168.1.3 Gitlab主机IP:192.168.0.10 系统信息: 系统:CentOS 7.5 内核:4.18.7-1.el7.elrepo.x86_64 Docker版本:18.09 docker-compose版本:1.23.1 有道笔记原文,为了防止复制粘贴出来的代码格式有误~~~~ 所有主机的Docker安装方式 wget -O /etc/yum.repo

部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了

部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 ? momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Docker+Harbor(或 Pouch 等同类平台)之上都不好意思说自己的互联网公司.当然这些技术也不适用于全部公司,技术在迭代,平台也一样,把我使用的工具和大家分享下,一起成长(文章中扩展可按需Google). Docker docker的架构图如下: 从图中可以看出几个组成部分 docker c

基于Jenkins Pipeline自动化部署

最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置,也可以在每个项目中直接写Pipeline脚本,但像我那么优秀,那么追求极致的程序员来说,这些方案都打动不了我那颗骚动的心,下面我会跟你们讲讲我是如何通过Pipeline脚本实现自动化部署方案的,并且实现多分支构建,还实现了所有项目共享一个Pipeline脚本. 使用Jenkins前的一些设置 为了

基于Jenkins+Gitlab+Harbor+Rancher架构的CICD实现

在讲正文开始前先回顾一下以往传统的代码部署方式. 通常运维人员在接到代码(新项目)上线的任务前都要做大量的准备工作,包括:物理主机.虚拟机.代码运行环境.数据库安装配置.各种帐号创建,.运行后期的系统监控.应用的日志收集,性能优化等一系列的工作. 想一想这个流程不是很复杂,但是很繁琐,效率低下,如需要调试还需要给开发人员提供线上系统权限等等,细节没有注意的话,还会造成解决问题的难度等各种问题. OK,说完以上的问题,那接下来就有相对应的解决方案. 在经过两个月的不间断的测试下,一套我自认为比较好