1.在jenkins所在服务器上创建Dockerfile文件
FROM centos:centos7.9.2009
MAINTAINER liuzhibin
# 安装JDK
COPY jdk1.8.0_251 /var/local/jdk1.8.0_251
ENV JAVA_HOME /var/local/jdk1.8.0_251
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& yum install epel-release -y \
&& yum install kde-l10n-Chinese -y \
&& yum install glibc-common -y \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& export LANG=zh_CN.UTF-8 \
&& echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
注:需将jenkins服务器上的jdk1.8.0_251拷贝至Dockerfile同目录下,因执行docker build时以当前所在目录作为根目录
2.执行命令docker build centosjdk8,创建基础镜像
3.在springboot项目下创建Dockerfile文件(做成各个环境通用的镜像)
FROM centosjdk8
MAINTAINER liuzhibin
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone
ADD /target/api.oarelate-1.0.0.jar / ADD app.sh / CMD ["bash","app.sh"] ENV CE=$CE
4.在springboot项目下创建app.sh(正常应该可以直接继承在上面的文件中,但尝试时docker运行一直报Could not find main class,用此方式可正常运行)
java -jar api.oarelate-1.0.0.jar --spring.profiles.active=$CE
5.在springboot项目下添加dockerbuild.sh文件(额外创建latest的tag,这样获取时不再关注version,避免每次构建多处改动)
version="1.0.5" docker build -t 192.168.10.89:8008/jmgo/api.oarelate:$version . docker tag 192.168.10.89:8008/jmgo/api.oarelate:$version 192.168.10.89:8008/jmgo/api.oarelate:latest docker push 192.168.10.89:8008/jmgo/api.oarelate:latest docker push 192.168.10.89:8008/jmgo/api.oarelate:$version
6.在jenkins上安装插件ssh
添加用户密码
添加ssh节点
7.在jenkins上添加构建项目
通过shell:添加构建项目,创建docker,推送dockerhub
mvn package spring-boot:repackage
bash dockerbuild.sh
通过远程shell:自动更新docker并运行
docker rm -f api_oarelate docker pull 192.168.10.89:8008/jmgo/api.oarelate docker run -d -p 9199:9199 -v /home/api.oarelate/logs:/logs --privileged=true --restart=always -e CE="dev" --name api_oarelate 192.168.10.89:8008/jmgo/api.oarelate
示意图
8.Gitlab触发器设置
在jenkins中指定通过GITlabwebhook触发
在Gitlab中配置webhook及触发条件并保存
9.配置邮件通知
邮件内容:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> 本邮件由系统自动发出,无需回复!<br/> 各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br> <td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td> </tr> <tr> <td><br /> <b><font color="#0B610B">构建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>项目名称 : ${PROJECT_NAME}</li> <li>构建编号 : 第${BUILD_NUMBER}次构建</li> <li>触发原因: ${CAUSE}</li> <li>构建状态: ${BUILD_STATUS}</li> <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> <li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> <li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> </ul> <h4><font color="#0B610B">失败用例</font></h4> <hr size="2" width="100%" /> $FAILED_TESTS<br/> <h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4> <hr size="2" width="100%" /> <ul> ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"} </ul> 详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/> </td> </tr> </table> </body> </html>
在项目中配置通知