Jenkins与Docker的自动化CI/CD实战(二)
一、发布流程设计
操作流程:
开发push代码到github,触发jenkins自动pull代码,通过maven编译打包,执行shell脚本使docker构建镜像并push到私人服务器仓库,此操作完成后jenkins服务器再执行SSH命令登录到部署服务器,docker从仓库拉取镜像,启动容器。
二、服务器软件环境配置
角色 | IP |
Jenkins | 192.168.253.156 |
Docker/Registry | 192.168.253.158 |
三、jenkins配置
3.1 安装插件
Docker plugin
docker-build-step
SSH plugin ---用于ssh远程Docker主机执行shell命令
3.2 添加ssh远程主机
添加访问的凭据:
系统管理--系统配置
3.3 开启Docker Remote API
在192.168.253.158上执行:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
重新加载配置文件
systemctl daemon-reload
systemctl restart docker
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3.4 docker配置
四、部署私有镜像仓库
Docker Hub作为Docker默认官方公共镜像;如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单。
在192.168.253.158部署:
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
为了更快的获取镜像,这里使用了阿里云的镜像加速器。
由于Docker CLI客户端默认以HTTPS访问,而部署的registry并未提供HTTPS,因此,需要在pull镜像的Docker主机,添加HTTP可信任:
[root@localhost ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://sopn42m9.mirror.aliyuncs.com"], "insecure-registries":["192.168.253.158:5000"] }
五、构建tomcat基础镜像
编写dockerfile
[root@localhost ~]# cat Dockerfile FROM centos:7 MAINTAINER www.aliangedu.com ENV VERSION=8.5.56 ENV JAVA_HOME /usr/local/jdk RUN yum install wget -y RUN wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.56/bin/apache-tomcat-8.5.56.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/* EXPOSE 8080 CMD ["catalina.sh", "run"]
构建镜像并push到192.168.253.158仓库:
docker build -t 192.168.253.158:5000/tomcat-8.5 . docker push 192.168.253.158:5000/tomcat-8.5
六、新建任务
配置出门左拐参照 https://www.cnblogs.com/lanist/p/13158085.html
在Jenkins本机服务器构建镜像并推送到镜像仓库,并SSH远程连接到Docker主机(这里可以新增一台单独的服务器来拉取仓库中的镜像)
在之前构建的镜像上拷贝打包好REPOSITORY=192.168.253.158:5000/zpzc
# 构建镜像 cat > Dockerfile << EOF FROM 192.168.253.158:5000/tomcat-8.5:latest RUN rm -rf /usr/local/tomcat/webapps/*.war COPY target/*.war /usr/local/tomcat/webapps CMD ["/usr/local/tomcat/bin/catalina.sh", "run"] EOF
docker build -t $REPOSITORY . # 上传镜像 docker push $REPOSITORY
镜像构建完成后, 使用ssh远程登录部署服务器(192.168.253.158)上删除已经存在的容器和拉取的部署镜像,重新部署新的容器。
SSH远程Docker主机执行的Shell命令如下:
REPOSITORY=192.168.253.158:5000/zpzc
docker rm -f zpzc
docker rmi $REPOSITORY
docker run -d --name zpzc -p 28888:8080 -v /usr/local/jdk:/usr/local/jdk $REPOSITORY
注意,此处需要在部署服务器上安装jdk环境,挂载jdk目录到容器中,因为tomcat镜像文件
[root@localhost ~]# whereis java
java: /usr/local/jdk/bin/java /usr/local/jdk/jre/bin/java
七、构建任务
控制台输出:
八、测试
在docker服务器上查看镜像
查看容器:
访问页面:
问题:解析不了css文件,正在解决。。。