docker 安装jenkins从而实现自动编译、打包、构建镜像、容器部署

千万不要把2375端口开放出来,容易被挖kuang

docker 安装
环境配置
在这里插入图片描述

Docker 安装 Jenkins

docker pull jenkins/jenkins:lts //最新版

在这里插入图片描述

查看 Jenkins 镜像

docker images
docker inspect jenkins镜像ID

在这里插入图片描述

创建一个 Jenkins 目录

mkdir -p /data/jenkins_home;

安装启动 Jenkins 容器

docker run -d --name jenkins -p 8081:8080 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts;
备注:
-d //启动在后台
--name //容器名字
-p //端口映射(8081:宿主主机端口,8080:容器内部端口)
-v //数据卷挂载映射(/data/jenkins_home:宿主主机目录,另外一个即是容器目录)
enkins/jenkins:lts //Jenkins镜像(最新版)

查看 Jenkins 启动情况

docker ps | grep jenkins;

在这里插入图片描述

安装过程遇到的小问题
Jenkins 容器 docker run 之后状态总是 Exited

查看docker日志 :
docker logs jenkins  
发现是目前权限问题
因为/data/jenkins_home 目录是root权限

在这里插入图片描述
解决:
chown -R 1000:1000 /data/jenkins_home //用户组改变
宿主主机端口要开启 因为本操作是在阿里云ECS上进行安装的,需要在安全组里开放8081此端口。

访问 Jenkins

http://120.26.50.165:8081 //ip:端口号

在这里插入图片描述
安装插件
在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

开发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 docker
开启防火墙的端口

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 V E R S I O N / b i n / a p a c h e − t o m c a t − {VERSION}/bin/apache-tomcat- VERSION/bin/apachetomcat{VERSION}.tar.gz &&
tar zxf apache-tomcat-KaTeX parse error: Expected 'EOF', got '&' at position 18: …ERSION}.tar.gz &̲& \ mv apac…{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接口测试:

在这里插入图片描述

九、遇到的异常

在这里插入图片描述

解决:在192.168.1.237上执行 sudo gpasswd -a jenkins root;sudo service jenkins restart。将jenkins用户加入到root用户组中获取管理员权限。详见:https://www.cnblogs.com/informatics/p/8276172.html。

在这里插入图片描述

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

在这里插入图片描述

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

改为:

在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值