Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)
前言
在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。
本文基于Jenkins+Docker+Git\Svn实现一套CI自动化发布流程,同时支持撤回。
一、发布流程设计

工作流程:
- 开发人员提交代码到Git或Svn版本仓库;
- Jenkins人工/定时触发项目构建;
- Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
- Jenkins在Docker主机创建容器并发布。
二、环境设计
1、服务器部署信息
| 服务器 | 主机名 | IP | 运行服务 |
|---|---|---|---|
| jenkins服务器 | jenkins | 10.0.xxx.100 | 安装docker、 运行jenkins容器、git客户端、jdk、maven |
| docker服务器 | docker | 10.0.xxx.103 | 安装docker、创建镜像运行java项目:bsm |
| Git和私有仓库服务器 | git_registry | 10.0.xxx.104 | 安装docker、git服务、运行registry私有仓库容器 |
2、版本信息
| 名称 | 版本 | 软件包 | 说明 |
|---|---|---|---|
| 服务器 | Centos 7.4 | 无 | linux系统 |
| docker | 17.12.0-ce | yum安装 | docker引擎服务 |
| jdk | 1.8.0_45 | jdk-8u45-linux-x64.tar.gz | 运行jenkins需要的JDK环境 |
| maven | 3.5.0 | apache-maven-3.5.0-bin.tar.gz | 构建java项目需要的工具 |
| jenkins | 最新版本 | docker hub下载最新jenkins镜像 | 持续集成工具 |
| registry | 最新版本 | docker hub下载最新registry镜像 | docker私有仓库 |
jdk官方下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
maven官方下载地址:https://maven.apache.org/download.cgi
jenkins官方镜像地址:https://hub.docker.com/_/jenkins/
registry官方镜像地址:https://hub.docker.com/_/registry/
3、操作系统信息
CentOS7.4
三、部署Git或Svn仓库
在【git_registry】主机安装r。
具体方法请参考网上教程
四、部署Jenkins
在【jenkins】主机安装Jenkins。
安装方法请参考:https://www.cnblogs.com/caoweixiong/p/12306340.html
五、安装Docker
在【jenkins、docker、git_registry】3台主机安装Docker。
安装方法请参考:https://www.cnblogs.com/caoweixiong/p/12186736.html
六、部署私有镜像仓库
Docker Hub作为Docker默认官方公共镜像;这里搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单。
在【git_registry】主机上搭建私有镜像仓库,具体方法请参考:https://www.cnblogs.com/caoweixiong/p/12197602.html
七、构建Tomcat基础镜像
项目需要使用tomcat,这里使用Dockerfile来制作镜像。
具体方法请参考:https://www.cnblogs.com/caoweixiong/p/12230725.html
八、Jenkins配置全局工具配置
- 主页面 -> 系统管理 -> 全局工具配置
指定JDK、Git、Maven路径:


如果Jenkins主机没有git命令,需要安装Git:
# yum install git -y
九、Jenkins安装必要插件
- 主页面 -> 系统管理 ->管理插件:

安装SSH与Git Parameter插件。
插件说明:
- SSH:用于SSH远程Docker主机执行Shell命令
- Git Parameter:动态获取Git仓库Branch、Tag
- 配置SSH插件
第一步:先创建一个用于连接Docker主机的凭据。
主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:


第二步:添加SSH远程主机
主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:

十、Jenkins创建项目并发布测试
自己准备1个web项目,我这里的项目名字为bsm,通过svn管理代码。
- 主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目

注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration”插件。
- 设置参数化构建过程:

- 设置源码管理

注:这里使用svn管理源码
- 设置maven构建命令选项:

利用pom.xml文件构建项目。
- 在Jenkins本机,构建镜像并推送到私有镜像仓库:

上述命令说明:
- 根据参数 type 来判断是部署还是撤回;
- 部署项目:创建Dockerfile文件,使用当前编译序号做为镜像的版本号;
- 基于私有镜像仓库的 tomcat 镜像;
- 先删除webapps目录下的war包;
- 将jenkins编译好的war包,复制到tomcat镜像中的webapps目录下
- 启动tomcat
- 部署项目:构建镜像;
- 部署项目:上传镜像到私有仓库;
- 部署项目:删除本地镜像;
- 撤回项目:什么也不做;
- 在Jenkins本机,通过SSH远程连接到Docker主机,下载并使用推送的镜像创建容器

上述命令说明:
- 根据参数 type 来判断是部署还是撤回;
- 部署项目:获取当前编译版本号,从私有镜像仓库下载镜像进行部署;
- 停止容器;
- 删除容器;
- 删除本地历史镜像
- 启动容器,并暴露端口
- 撤回项目:参数【version】为空,默认返回到上一版本;
- 撤回项目:参数【version】不为空,撤回到指定版本;
- 部署项目:删除本地镜像;
- 撤回项目:什么也不做;
- 选择tag,开始构建:

注:type=deploy,部署项目;type=rollback,撤回项目




十一、验证
浏览器访问bsm项目:http://10.0.xxx.103:8888

参考:
https://blog.51cto.com/lizhenliang/2159817
Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)的更多相关文章
- 用Jenkins构建Django持续集成环境
用Jenkins构建Django持续集成环境 - V2EX https://www.v2ex.com/t/32054
- 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境
作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
前言 上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...
- Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库文件和版本,以 ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境
前言 但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子.假如一个项目,由A.B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端.A和B都习 ...
- Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境
使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一) 2015-01-14 20:28 by 飘扬的红领巾, 4322 阅读, 5 评论, 收藏, 编辑 ...
- 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境
使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...
- jenkins+git+maven搭建自动化部署项目环境
简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...
- ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成
为什么不用gitlab? 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置.采用go语言开发的gogs来代替,搭建方便(不到10分钟就能安装完成),资源消耗低,功能也比较强大,也 ...
随机推荐
- 【Azure 事件中心】EPH (EventProcessorHost) 消费端观察到多次Shutdown,LeaseLost的error信息,这是什么情况呢?
问题详情 使用EPH获取Event Hub数据时,多次出现连接shutdown和LeaseLost的error ,截取某一次的error log如: Time:2021-03-10 08:43:48 ...
- 学习笔记-cordova 限制app横屏
禁止手机app横竖屏幕转换,只需在根目录下的 config.xml 中添加如下内容 <preference name="orientation" value="po ...
- Mysql多表合并以及连接问题
目的 1.为了备战过两天的面试,我又重新给孙老师的课件看了一遍,学累了,就写写自己的新的体会,和遇到的问题,来进行一个记录,这是知识产出的过程,据说可以帮助我学习,看视频什么的都是被动学习,不进行及时 ...
- SVN讲解
1.SVN是什么? 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历史版本 恢复到已经删除的文件 2.SVN和Git相比,有什么优势? 使用简单,上手快 git没有目录级权限控 ...
- 【1.0 Regular Expressions 正则表达式】
[概念] RegEx 正则表达式是一种特殊的字符序列,可帮助您使用专门的模板语法,来匹配对应的匹配方法或字符串组 它们可用于搜索,编辑或操纵文本和数据 正则表达式通常用于验证输入和检索信息 比如我们要 ...
- Unity2D项目-平台、解谜、战斗! 1.2战斗组件Defence、Attack
各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 接上文,我们定义了两个分别具有"攻击"和"被攻击"语义的组件CanFight和CanB ...
- Java第三章基础学习课后题练习
小结:final 类型 变量名 = 数值 定义常量使用 变量的原则*** 一定要"先声明,后使用",变量使用前必须先声明.这点就没php好玩:两种键盘输入方式InputStream ...
- kernel base
基础知识 学习网址:ctfwiki 安全客 Kernel:又称核心 维基百科:在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理 ...
- k8s在线和离线批量修改镜像地址的两种方式
背景介绍 有时往k8s集群里部署一堆服务的时候,需要拷贝一堆yaml文件,当然还有其他方式部署,例如通过建立一个一个的流水线等方式,但是这太慢了,虽然是一劳永逸,但是如果说仅仅是部署一次那就可太费劲了 ...
- Hadoop完整搭建过程(三):完全分布模式(虚拟机)
1 完全分布模式 完全分布模式是比本地模式与伪分布模式更加复杂的模式,真正利用多台Linux主机来进行部署Hadoop,对集群进行规划,使得Hadoop各个模块分别部署在不同的多台机器上,这篇文章介绍 ...