• jenkins+docker实现自动编译、打包、构建镜像、容器部署


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

     

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

    二、服务器软件环境配置

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

    三、jenkins配置

     3.1 安装插件

     

     

    Docker plugin :   =  Docker

    docker-build-step:

    SSH:用于SSH远程Docker主机执行Shell命令  和 SSH plugin一样

    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${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用户组中获取管理员权限。详见:https://www.cnblogs.com/informatics/p/8276172.html。

    2.

     

    解决: 这个问题可能是由于客户端采用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

    3.

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

    改为:

     

    我们只需要努力,然后剩下的交给时间。
  • 相关阅读:
    算法和编程面试题
    递归,排序等算法编程题
    webservice部分和J2EE相关面试题
    有关线程的面试题
    JavaWeb部分面试题
    Html和JS的一些面试题
    pageContext,request,session,application四大作用域的区别
    企业架构研究总结(17)——联邦企业架构之我见
    企业架构研究总结(19)——TOGAF架构开发方法(ADM)之准备阶段
    企业架构研究总结(18)——TOGAF总论及架构开发方法(ADM)概述
  • 原文地址:https://www.cnblogs.com/lgj8/p/14549948.html
Copyright © 2020-2023  润新知