docker+gitlab+jenkins+harbor实现CI/CD

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

① 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/CD)