博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jenkins与Docker的自动化CI/CD实战
阅读量:5884 次
发布时间:2019-06-19

本文共 5675 字,大约阅读时间需要 18 分钟。

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题

  • 发布流程设计
  • 部署Git仓库
  • 准备Jenkins环境
  • 部署私有镜像仓库
  • 安装Docker
  • 构建Tomcat基础镜像
  • Jenkins配置全局工具配置
  • Jenkins安装必要插件
  • 上传JAVA项目代码到Git仓库
  • Jenkins创建项目并发布测

一、发布流程设计

Jenkins与Docker的自动化CI/CD实战

Jenkins与Docker的自动化CI/CD实战

工作流程:

  1. 开发人员提交代码到Git版本仓库;
  2. Jenkins人工/定时触发项目构建;
  3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
  4. Jenkins在Docker主机创建容器并发布。

环境规划如下:

角色 IP
Jenkins/Docker 10.201.1.140
Docker 10.201.1.141
Git/Registry 10.201.1.142

操作系统:CentOS7.4

二、部署Git仓库

  • 安装git
yum install git -y
  • 创建Git用户并设置密码
useradd gitpasswd git
  • 创建仓库
su - gitmkdir solo.gitcd solo.gitgit --bare init
  • 访问创建的这个仓库
git clone git@10.201.1.142:/home/git/solo.git

三、准备Jenkins环境

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于代码编译、部署、测试等工作。 Jenkins也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署war包方式安装它。

官网下载地址:
如图点击下载最后一个Generic Java package(war):
Jenkins与Docker的自动化CI/CD实战

  • 在安装前需要具备Java环境,安装方式如下:
# 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/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH# source /etc/profile
  • 在10.201.1.140主机安装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 ...
  • 部署成功,访问Jenkins:

第一步:输入上面日志输出的密码:a5f1f7c167fd4b8ab62f9497d32d97db,或者从本机/root/.jenkins/secrets/initialAdminPassword文件获取,点击继续

第二步:点击“选择插件来安装”
第三步:保持默认,点击继续
第四步:创建管理员用户,保存并完成
第五步:设置Jenkins访问地址,保持默认,点击保存完成

  • 安装完成,开始使用Jenkins:

Jenkins与Docker的自动化CI/CD实战

四、部署私有镜像仓库

Docker Hub作为Docker默认官方公共镜像;如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单。

在10.201.1.142部署:

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry

接下来测试registry可用性。

由于Docker CLI默认以HTTPS访问,而部署的registry并未提供HTTPS,因此,需要在pull镜像的Docker主机(10.201.1.140,10.201.1.141)添加HTTP可信任:

# vi /etc/docker/daemon.json {"insecure-registries":["10.201.1.142:5000"]}# service docker restart

五、安装Docker

在三台主机安装Docker,如下:

  • 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
  • 添加Docker软件包源:
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
  • 安装Docker CE
yum install docker-ce -y
  • 配置加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io
  • 启动并开机启动
# systemctl start docker# systemctl enable docker

六、构建Tomcat基础镜像

JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用。

  • 在140,141机器上安装JDK:
# tar zxvf jdk-8u45-linux-x64.tar.gz # mv jdk-8u45-linux-x64 /usr/local/jdk1.8
  • Tomcat基础镜像Dockerfile:
# cat DockerfileFROM centos:7MAINTAINER lxdENV VERSION=8.5.38ENV JAVA_HOME=/usr/local/jdkENV PATH=$PATH:$JAVA_HOME/binENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarRUN export JAVA_HOME PATH CLASSPATHRUN yum -y install wgetRUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \    tar zxf apache-tomcat-${VERSION}.tar.gz && \    mv apache-tomcat-${VERSION} /usr/local/tomcat && \    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \    mkdir /usr/local/tomcat/webapps/ROOTEXPOSE 8080CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
  • 构建镜像并上传到registry:
# docker build -t 10.201.1.142:5000/tomcat-85 -f Dockerfile .# docker push 10.201.1.142:5000/tomcat-85

七、Jenkins配置全局工具配置

主页面 -> 系统管理 -> 全局工具配置

指定JDK、Maven设置为自动安装,Git保持默认:

Jenkins与Docker的自动化CI/CD实战

Jenkins与Docker的自动化CI/CD实战

如果Jenkins主机没有git命令,需要安装Git:

yum install git -y

八、Jenkins安装必要插件

  • Jenkins安装必要插件

主页面 -> 系统管理 ->管理插件:

Jenkins与Docker的自动化CI/CD实战

安装SSH与Git Parameter插件。

插件说明:

SSH:用于SSH远程Docker主机执行Shell命令
Git Parameter:动态获取Git仓库Branch、Tag

  • 配置SSH插件

第一步:先创建一个用于连接Docker主机的凭据。

主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:
Jenkins与Docker的自动化CI/CD实战

输入连接Docker主机的用户名和密码:

Jenkins与Docker的自动化CI/CD实战

第二步:添加SSH远程主机

主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:
Jenkins与Docker的自动化CI/CD实战

九、上传JAVA项目代码到Git仓库

从Github拉取开源JAVA博客系统solo:

# git clone https://github.com/b3log/solo# cd solo移除旧的推送地址,添加新的:# git remote remove origin # git remote add origin git@10.201.1.142:/home/git/solo.git提交代码到Git仓库并创建tag:# touch src/main/webapp/a.html# git add .# git commit -m “a”创建标签:# git tag 1.0.0推送到Git服务器:# git push origin 1.0.0

十、Jenkins创建项目并发布测试

  • 主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目:

Jenkins与Docker的自动化CI/CD实战

注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration plugin”插件。

  • 配置Git参数化构建:

Jenkins与Docker的自动化CI/CD实战

动态获取Git仓库tag,与用户交互选择Tag发布:

Jenkins与Docker的自动化CI/CD实战

指定项目Git仓库地址:

Jenkins与Docker的自动化CI/CD实战

修改/master为$Tag,Tag是上面动态获取的变量名,表示根据用户选择打代码版本。

设置maven构建命令选项:

Jenkins与Docker的自动化CI/CD实战

利用pom.xml文件构建项目。

在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器:

Jenkins与Docker的自动化CI/CD实战

  • 上图中,在Jenkins主机执行的Shell命令如下:
REPOSITORY=10.201.1.142:5000/solo:${Tag}# 构建镜像cat > Dockerfile << EOFFROM 10.201.1.142:5000/tomcat:latestRUN rm -rf /usr/local/tomcat/webapps/ROOTCOPY target/*.war /usr/local/tomcat/webapps/ROOT.warCMD ["/usr/local/tomcat/bin/catalina.sh", "run"]EOFdocker build -t $REPOSITORY .# 上传镜像docker push $REPOSITORY
  • 上图中,SSH远程Docker主机执行的Shell命令如下:
REPOSITORY=10.201.1.142:5000/solo:${Tag}# 部署docker rm -f blog-solo |truedocker image rm $REPOSITORY |truedocker container run -d --name blog-solo -v /usr/local/jdk1.8:/usr/local/jdk -p 88:8080 $REPOSITORY

注:容器名称blog-solo,暴露宿主机端口88,即使用宿主机IP:88访问blog-solo项目。

  • blog-solo项目已配置完成,开始构建:

Jenkins与Docker的自动化CI/CD实战

Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战

  • 浏览器访问solo项目:

Jenkins与Docker的自动化CI/CD实战

如果输出上述页面说明是正常的,页面没有加载成功样式,需要修改下项目里访问地址。

至此,自动化CI环境搭建完成,你可以模拟提交代码并打tag测试自动化发布流程。

若你在容器运维中,遇到容器方面的问题,可以给我微信↓。同样,若发现有任何纰漏,还请随时指正,相互学习,共同进步!

转载于:https://blog.51cto.com/lingxudong/2363626

你可能感兴趣的文章
SDL如何嵌入到QT中?!
查看>>
P1026 统计单词个数
查看>>
[js高手之路] html5 canvas系列教程 - 状态详解(save与restore)
查看>>
poi excel 常用api
查看>>
AD提高动态的方法(附SNR计算)
查看>>
[转]轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统
查看>>
五 数组
查看>>
也谈跨域数据交互解决方案
查看>>
EntityFramework中使用Include可能带来的问题
查看>>
面试题28:字符串的排列
查看>>
css important
查看>>
WPF 实现窗体拖动
查看>>
来自维基百科程序员Brandon Harris
查看>>
NULL不是数值
查看>>
CentOS 5 全功能WWW服务器搭建全教程
查看>>
scala111
查看>>
模块化服务规范——OSGI
查看>>
劣质代码评析——猜数字问题(上)
查看>>
纸上谈兵: 栈 (stack)
查看>>
Windows phone8 基础篇(三) 常用控件开发
查看>>