美文网首页
docker+gitlab+jenkins+harbor实现CI

docker+gitlab+jenkins+harbor实现CI

作者: zhaojian821 | 来源:发表于2018-11-13 15:22 被阅读0次

    首先确保如下工具已经安装完成:

    ① docker-ce

    ② gitlab

    ③ jenkins

    ④ harbor

    这样,就可以开始了!

    首先,需要有一个java的项目,本次采用solo,从github上很容易就下载下来,本次采用solo 2.7版本!将该项目添加到gitlab中去,如下:

    然后是配置jenkins:

    在jenkins中,创建一个自由风格的项目,起名为:blog-solo。配置如下:

    配置gitlab中项目的连接信息:

    maven构建:

    通过Dockerfile构建image,并推送至harbor中:

    此步骤需要注意,由于solo是java项目,需要搭载到tomcat中运行,所以需要先创建一个tomcat的镜像(tomcat:v1),在此基础上,将maven构建出的solo.war包COPY到容器中,最终启动容器。通过Dockerfile构建出的image,需要push到远端的harbor中,所以这里还需要先连接harbor,然后build image,最后push到harbor。

    补充一下tomcat:v1的构建过程,Dockerfile-tomcat:

    FROM centos:7

    MAINTAINER zhaojian

    ENV VERSION=8.0.53

    RUN yum installjava-1.8.0-openjdk wget curl unzip iproute net-tools -y && \

        yum clean all && \

        rm -rf /var/cache/yum/*

    RUN wgethttp://mirrors.hust.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/test&& \

        echo "ok" >/usr/local/tomcat/webapps/test/status.html && \

        sed -i '1aJAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"'/usr/local/tomcat/bin/catalina.sh && \

        ln -sf /usr/share/zoneinfo/Asia/Shanghai/etc/localtime

    ENV PATH$PATH:/usr/local/tomcat/bin

    WORKDIR /usr/local/tomcat

    EXPOSE 8080

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

    通过以上Dockerfile就可以构建出tomcat的image,是基于centos:7镜像的,所以一个tomcat镜像,包含centos:7镜像中的内容,所以可以在tomcat镜像中使用centos:7的命令;而solo项目,又是基于tomcat:v1,所以solo项目也包含centos:7镜像中的内容!

    记住一句:基于基础镜像,构建项目镜像

    即将solo.war包从宿主机COPY到tomcat容器中,而tomcat镜像又是通过基础镜像centos:7构建出来的!

     

    因为是通过jenkins做的CI,所以还需要jenkins制作镜像,最后再通过jenkins实现CD,整个过程都是通过jenkins来完成的,所以编写Dockerfile和build image就都需要jenkins来做,因此,上面就需要在shell中实现所有功能,而非在宿主机上单独执行。

    在远程服务器上执行docker run,生成容器:

    正常情况下,jenkins是没有“Execute shell script on remote host using ssh”的,需要添加插件:

    然后在jenkins的“系统管理”--“系统设置”中,配置如下内容,完成ssh:

    这样,就可以在具体项目的配置中,找到“Execute shell script on remote host using ssh”了。

    选定ssh服务器后,填写command,完成docker容器构建即可!

    通过以上配置,就完成了docker+gitlab+jenkins+harbor实现CI/CD过程!

    还需要补充一下,就是关于webhook实现gitlab+jenkins 的联动,即gitlab中修改了内容后,jenkins可以实现自动构建,无需手动执行:

    在gitlab具体项目中,找到:

    该信息是由jenkins中生成的:

    gitlab添加webhook可能会报错:

    原因:

    大致意思 gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,如果想向本地网络发送webhook请求,则需要使用管理员帐号登录,登录之后,点击Configure Gitlab,进行如下修改。

    解决办法:

    在Admin area中,在settings标签下面,找到OutBound Request,勾选上Allow

    requests to the local network from hooks and services ,保存更改即可解决问题

    成功配置后,就可以切换回普通的gitlab账号,到具体的项目中,重新配置一遍webhook就可以了!

    相关文章

      网友评论

          本文标题:docker+gitlab+jenkins+harbor实现CI

          本文链接:https://www.haomeiwen.com/subject/qkklfqtx.html