您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
jenkins+docker实现自动编译、打包、构建镜像、容器部署
 
作者: FinelyYang
   次浏览      
 2020-7-16
 
编辑推荐:
本文主要介绍了整个持续集成、自动部署流程以及jenkins和服务器软件的坏境配置,并通过解决遇到的异常,完成测试,希望对您的学习有所帮助。
本文来自于CSDN,由火龙果软件Alice编辑、推荐。

一、整个持续集成、自动部署流程

开发push代码到gitlab,触发jenkins自动pull代码,通过maven编译、打包,然后通过执行shell脚本使docker构建镜像并push到私服(或者阿里云)仓库,此操作完成后jenkins服务器上再执行SSH命令登录到部署服务器,docker从仓库(私服)拉取镜像,启动容器。整个操作流程完成。

二、服务器软件环境配置

由于条件所限,故只用两台机器作为搭建环境。

三、jenkins配置

3.1 安装插件

SSH:用于SSH远程Docker主机执行Shell命令

3.2 添加SSH远程主机

添加访问的凭据:

系统管理-系统配置

3.3 开启Docker Remote API

在192.168.1.121上执行:

vim /lib/systemd/system/docker.service

重新加载配置文件

systemctl daemon-reload
systemctl restart docke

开启防火墙的端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=2375/tcp

3.4 docker 配置

系统管理-系统设置-云 新增

四、部署私有镜像仓库

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

在192.168.1.121部署:

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.1.237,192.168.1.121)添加HTTP可信任:

vi /etc/docker/daemon.json

五、构建Tomcat基础镜像

vim Dockerfile

添加如下内容:


FROM centos:7
MAINTAINER www.aliangedu.com

ENV VERSION=8.5.39
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/*

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

?构建镜像并push到192.168.1.121仓库:

docker build -t 192.168.1.121:5000/hxkg-tomcat-8.5 .
docker push 192.168.1.121:5000/hxkg-tomcat-8.5

六、新建任务

任务配置

在Jenkins本机服务器(192.168.1.237)构建镜像并推送到镜像仓库(192.168.1.121),并SSH远程连接到Docker主机(192.168.1.121,这里可以新增一台单独的服务器来拉取仓库中的镜像)

使用推送的镜像创建容器:

获取仓库中构建的tomcat镜像,基于此镜像将编译打包后的war包拷贝到tomcat webapps目录,构建镜像并推送192.168.1.121仓库。

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

REPOSITORY=192.168.1.121:5000/zpzc
# 构建镜像
cat > Dockerfile << EOF
FROM 192.168.1.121:5000/hxkg-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.1.121)上删除已经存在的容器和拉取的部署镜像,重新部署新的容器。

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

REPOSITORY=192.168.1.121:5000/zpzc
# 部署
docker rm -f zpzc
docker rmi $REPOSITORY
docker run -d --name zpzc -p 28888:8080 -v /usr/java/jdk1.8.0_171:/usr/local/jdk $REPOSITORY

注意,此处需要在部署服务器上安装jdk环境,挂载jdk目录到容器中,因为tomcat镜像文件Dockerfile没有配置jdk环境:

七、构建任务

执行日志:

八、测试

在192.168.1.121上查看镜像:

查看容器:

postman接口测试:

九、遇到的异常

1.

解决:在192.168.1.237上执行?sudo gpasswd -a jenkins root;sudo service jenkins restart。将jenkins用户加入到root用户组中获取管理员权限。

2.

解决:?这个问题可能是由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“192.168.1.121:5000”请求改为http。在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:{ "insecure-registries":["192.168.1.121:5000"] }

3.

解决:这是因为我在jenkins配置shell脚本的时候没有写全路径导致找不到tomcat catalina.sh脚本。

改为:

 

   
次浏览       
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]
 
最新文章
云原生架构概述
K8S高可用集群架构实现
容器云管理之K8S集群概述
k8s-整体概述和架构
十分钟学会用docker部署微服务
最新课程
云计算、微服务与分布式架构
企业私有云原理与构建
基于Kubernetes的DevOps实践
云平台架构与应用(阿里云)
Docker部署被测系统与自动化框架实践
更多...   
成功案例
北京 云平台与微服务架构设计
通用公司GE Docker原理与实践培训
某军工研究单位 MDA(模型驱动架构)
知名消费金融公司 领域驱动设计
深圳某汽车企业 模型驱动的分析设计
更多...