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>  

 在项目中配置通知

原文地址:https://www.cnblogs.com/wishonline/p/13450967.html