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

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

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

一、发布流程设计


工作流程:

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

环境规划如下:

| 角色

|

IP

Jenkins/Docker

|

192.168.0.217

| |

Docker

|

192.168.0.218

| |

Git/Registry

|

192.168.0.219

|

操作系统:CentOS7.4

二、部署Git仓库

# yum install git -y

  1. 创建Git用户并设置密码
  2. # useradd git

# passwd git

  1. 创建仓库
  2. # su - git
  3. # mkdir solo.git
  4. # cd solo.git

# git --bare init

  1. 访问创建的这个仓库

# git clone git@192.168.0.212:/home/git/solo.git

三、准备Jenkins环境

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于代码编译、部署、测试等工作。 Jenkins也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署war包方式安装它。 
官网下载地址:https://jenkins.io/download/ 
如图点击下载最后一个Generic Java package(war):

在安装前需要具备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/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME PATH CLASSPATH

# source /etc/profile

在192.168.0.217主机安装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:http://ip:8080

第一步:输入上面日志输出的密码:a5f1f7c167fd4b8ab62f9497d32d97db,或者从本机/root/.jenkins/secrets/initialAdminPassword文件获取,点击继续
第二步:点击“选择插件来安装”
第三步:保持默认,点击继续
第四步:创建管理员用户,保存并完成
第五步:设置Jenkins访问地址,保持默认,点击保存完成

安装完成,开始使用Jenkins:

四、部署私有镜像仓库

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

# 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主机(192.168.0.217,192.168.0.218)添加HTTP可信任:

# vi /etc/docker/daemon.json

{"insecure-registries":["192.168.0.219:5000"]}

# service docker restart

五、安装****Docker

在192.168.0.217/192.168.0.218/192.168.0.219主机安装Docker,如下:

  1. 安装依赖包

# yum install -y yum-utils device-mapper-persistent-data lvm2

  1. 添加Docker软件包源:

*# yum-config-manager *

--add-repo \

https://download.docker.com/linux/centos/docker-ce.repo

  1. 安装Docker CE

# yum install docker-ce -y

  1. 配置加速器

# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io

  1. 启动并开机启动
  2. # systemctl start docker

# systemctl enable docker

六、构建Tomcat基础镜像

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

# tar zxvf jdk-8u45-linux-x64.tar.gz

# mv jdk-8u45-linux-x64 /usr/local/jdk1.8

Tomcat基础镜像Dockerfile:

# cat Dockerfile

FROM centos:7

MAINTAINER linzhuangrong

ENV VERSION=8.5.32

ENV JAVA_HOME /usr/local/jdk

RUN yum install wget -y

RUN 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/ROOT

EXPOSE 8080

CMD ["catalina.sh", "run"]

构建镜像并上传到registry:

# docker build -t 192.168.0.219:5000/tomcat-85 -f Dockerfile .

# docker push 192.168.0.219:5000/tomcat-85

七、Jenkins配置全局工具配置

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

指定JDK、Maven路径,Git保持默认:

如果Jenkins主机没有git命令,需要安装Git:
# yum install git -y

八、Jenkins安装必要插件

1. Jenkins****安装必要插件
主页面 -> 系统管理 ->管理插件:

安装SSH与Git Parameter插件。

插件说明:

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

2. 配置SSH插件
第一步:先创建一个用于连接Docker主机的凭据。
主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:

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

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

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

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

# git clone https://github.com/b3log/solo

# cd solo

移除旧的推送地址,添加新的:

# git remote remove origin

# git remote add origin git@192.168.0.219:/home/git/solo.git

提交代码到Git仓库并创建tag:

# touch src/main/webapp/a.html

# git add .

# git commit -m “a”

创建分支:

# git branch dev

# git checkout dev

推送到Git服务器:

# git push origin dev

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

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

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

动态获取Git仓库branch ,与用户交互选择branch 分支进行发布:

指定项目Git仓库地址:

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

设置maven构建命令选项:

利用pom.xml文件构建项目。
在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器:

上图中,在Jenkins主机执行的Shell命令如下:

REPOSITORY=172.20.4.10:5000/solo:${ImageVersion}

WAR=ROOT.war

# 构建镜像

cat > Dockerfile << EOF

FROM 172.20.4.10:5000/tomcat-85:latest

RUN rm -rf /docker/local/tomcat8/webapps/$WAR

COPY $WAR /docker/local/tomcat8/webapps/$WAR

CMD ["catalina.sh", "run"]

EOF

sudo docker build -t $REPOSITORY .

# 上传镜像

sudo docker push $REPOSITORY

上图中,SSH远程Docker主机执行的Shell命令如下:

REPOSITORY=172.20.4.10:5000/solo:${ImageVersion}

# 部署

sudo docker rm -f blog-solo |true

sudo docker image rm $REPOSITORY |true

sudo docker container run -d --name blog-solo  -p 88:8080 $REPOSITORY

注:容器名称blog-solo,暴露宿主机端口88,即使用宿主机IP:88访问blog-solo项目。
blog-solo项目已配置完成,开始构建:

选择分支branch ,开始构建:



点击左下角构建历史里,右击第一个查看控制台输出:

浏览器访问solo项目:http://172.20.4.10:88

转载于:https://my.oschina.net/u/4135913/blog/3055102

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值