springboot项目基于jenkins、docker自动构建发布
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>
在项目中配置通知


浙公网安备 33010602011771号