jenkins+gitlab+maven+docker自动化部署spring boot

 工作流程:

开发人员在gitLab上打了一个tag
gitLab把tag事件推送到Jenkins
Jenkins 获取tag源码,编译,打包,构建镜像
Jenkins 复制jar包到远程服务器
Jenkins 执行远程脚本(停止老版本容器,删除老版本容器,build 镜像,run 新容器)
通知测试人员部署结果

环境要求:

git,jdk,maven,docker,jenkins

一、环境安装:

1.1先安装jdk,maven

https://blog.csdn.net/sopp_li/article/details/80446932

远程wget下载不到文件,可到官网下载最新的。再配置

1.2 安装git

https://www.cnblogs.com/gsliuruigang/p/7899803.html

1.3安装 docker 

http://www.runoob.com/docker/centos-docker-install.html

  

1.4 安装jenkins

https://www.cnblogs.com/stulzq/p/9291237.html

docker 安装 jenkins

https://www.cnblogs.com/fuzongle/p/12834080.html

  

pom.xml 

<build>
        <finalName>gpserver</finalName>
        <plugins>
            <!-- Srping Boot 打包工具 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- 指定JDK编译版本 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

  

dockerfile

# 基于哪个镜像
FROM frolvlad/alpine-oraclejdk8:slim
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 声明需要暴露的端口
EXPOSE 15678 10111
# 拷贝文件到容器,也可以直接写成ADD xxxxx.jar /app.jar
ADD gpserver.jar app.jar
RUN sh -c 'touch /app.jar'

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ENV JAVA_OPTS=""
# 配置容器启动后执行的命令
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

  

二、 jenkins 配置

插件下载
所需要的插件:
Maven Integration plugin
docker-build-step
Docker plugin
Gitlab Hook Plugin
GitLab Plugin

jenkins 系统配置:

2.1Maven项目配置

默认配置即可

2.2 Gitlab 配置

 Credentials 添加:

gitlab的账号、密码

gitlab 有权限的api token

可提前在凭证》系统里添加好

jenkins全局工具配置 

2.3Maven 配置

选择安装的maven的目录settings.xml路径

2.4 Maven配置,新增一个,去掉自动安装,选择安装的目录

到止jenkins环境配置完成。

三、配置部署项目

 在jenkin里新建任务,构建一个maven项目

3.1源码管理:

把git地址,填上,Credentials 如果之前未设置,添加一个

如果连接成功,不会报报错

3.2构建触发器

在gitlab的项目里》设置》导入所有仓库,webhooks配置,填上上边的url,secret token

配置成功下边会显示 200状态码

3.3 构建build

 

构建成功后,在jenkins workspace文件目录里可看到下载下来的代码,以及在target里生成的jar包

Post Steps执行发布,更新脚本

在远程操作之前,先要配置发布对象主机免密登录

https://blog.csdn.net/fuck487/article/details/79361197

具体脚本:

echo '================打包完成,开始复制================'
cd /var/lib/jenkins/workspace/gpsserver
scp Dockerfile-gps  root@hadoop1:/data/public/gpsserver/
scp server-gps/target/gpserver.jar  root@hadoop1:/data/public/gpsserver/
echo '================复制文件完成================'
ssh root@hadoop1 << remotessh 
echo '================进入主机hadoop1 shell================'
cd /data/public/gpsserver
echo '================停止容器 gpsserver================'
sudo  docker stop gpsserver
echo '================删除容器 gpsserver================'
sudo  docker rm gpsserver
echo '================删除镜像 gpsserver:latest================'
sudo  docker rmi gpsserver:latest
echo '================build 镜像 gpsserver:latest================'
sudo docker build -t gpsserver:latest -f ./Dockerfile-gps .
echo '================运行容器 gpsserver================'
sudo docker run --name=gpsserver -e JAVA_OPTS='  -Dspring.profiles.active=prod ' --restart always -it -d -p 10111:10111 -p 15678:15678  -v /data/public/gpsserver/logs:/logs gpsserver:latest

echo "finished!"
exit  ###退出远程机器
remotessh  ###结尾哦
echo '================结束远程启动================'

  

 至此 一个项目配置完成。

结语:

jenkins 只是一个工具,使用功能强大,有其他的使用方式:

1.生成docker镜像,上传到阿里云或自搭镜像服务器,远程到主机shell进行pull,更新容器等。

2.可配合docker swarm,搭建集群部署,只需改一下脚本即可。

原文地址:https://www.cnblogs.com/lucoo/p/10209892.html