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仓库
具体方法请参考:
四、部署Jenkins
1、部署JDK
由于jenkins需要jdk环境,jdk如果放在容器中运行容器又相当重,所以就在宿主机上部署jdk。部署jdk很简单,解压就行:
# tar zxf jdk-8u45-linux-x64.tar.gz # mv jdk-8u45-linux-x64 /usr/local/jdk1.8 # vi /etc/profile JAVA_HOME=/usr/local/jdk1.8 PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH # source /etc/profile
2、部署maven
由于本文后期是通过jenkins运行java项目,所以我们还需要maven工具,maven也和jdk部署一样,也不想在容器中运行maven,所以也是部署在宿主机上然后挂载到容器中。也是直接解压:
# tar -zxvf apache-maven-3.5.0-bin.tar.gz -C /usr/local/
3、部署jenkins
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于代码编译、部署、测试等工作。 Jenkins也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署war包方式安装它。
官网下载地址:https://jenkins.io/download/
如图点击下载最后一个Generic Java package(war):
在【jenkins】主机安装Jenkins,下载Tomcat二进制包将war包到webapps下即可:**
# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war # wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz # tar zxf apache-tomcat-8.5.32.tar.gz # mv apache-tomcat-8.5.32 /usr/local/tomcat-jenkins # rm /usr/local/tomcat-jenkins/webapps/* -rf # unzip jenkins.war -d /usr/local/tomcat-jenkins/webapps/ROOT # cd /usr/local/tomcat-jenkins/bin/ # ./startup.sh # tail ../logs/catalina.out -f
日志输出:
... Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: a5f1f7c167fd4b8ab62f9497d32d97db This may also be found at: /root/.jenkins/secrets/initialAdminPassword ...
4、配置jenkins
- 第一步:设置密码
通过http://ip:8080 来访问jenkins服务;
从上图给出的提示,需要从/var/jenkins_home/secrets/initialAdminPassword获取密码
[ /]# cat /var/jenkins_home/secrets/initialAdminPassword dff1d41be2254f87ad80a65eac621cb8
- 第二步:点击“选择插件来安装”
登录成功后回让你选择插件的安装,可以选择建议的安装也可以自己进行选择,不清楚的话可以使用建议的安装。由于建议安装的插件比较多,安装的过程有点慢,多等待一会;
- 第三步:创建管理员用户
安装完成后最好新创建一个管理员账户代替之前的临时自动生成的密码账户;
- 第四步:设置Jenkins访问地址
保持默认,点击保存完成,安装完成,开始使用Jenkins:
五、安装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、Maven路径,Git保持默认:
如果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 plugin”插件。
- 设置参数化构建过程:
- 设置源码管理
注:这里使用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
参考: