首先确保如下工具已经安装完成:
① 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就可以了!