阿里云+GitLab+Jenkins自动化部署SpringBoot项目

1.Jenkins介绍

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 (以上介绍来源于百度百科)

其实通俗来说,Jenkins就是一个自动化部署项目的工具,帮我省去重复的运维工作。

2.环境准备

部署环境需要的工具,安装的资料网上都有很多,可以自行安装配置

  • JDK

8d098443df95d6dfbe136d6193418881e60.jpg

  • Git

c11e6720f21315a578549a1e11146add2a9.jpg

  • Maven

3eaaa58369ab3b2c41778fd7758b4cb54a0.jpg

环境变量

baa96036f539453c64be9802f6f7a6591cd.jpg

Java的环境变量我没配置,我安装的jdk版本环境变量自动有了

  • Jenkins

jenkins安装方式常见的有三种

1.在官网下载war包部署在tomcat中

2.通过docker部署

3.通过yum install jenkins 安装

我选用的是第三种。安装步骤如下

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

 

service jenkins start  启动
service jenkins stop   停止
service jenkins restart  重启

然后访问http://${ip}/8080,可以看到jenkins那个小老头,根据自行配置安装插件,其中密码在这里

vi /var/lib/jenkins/secrets/initialAdminPassword

记得在阿里云上开放端口

3.Jenkins工具插件配置

3.1 插件配置

个人建议,Jenkins第一次进入推荐安装的插件就默认安装就行,省的还需要后续自己安装,当然,如果自己安装的话需要Maven和Git插件。

3.2 全局工具配置

  • Maven 

4491b34e7bd739b357a9dd28b43773c2890.jpg

7721812875de3b6dd6ef1010a88833d611d.jpg

  • JDK

1199d3a4ffb52b5bdb92e6299767298653d.jpg

  • Git

68d8f2d23bc1b5f9a718d56d15ba7f2de3b.jpg

因为SpringBoot是以jar的形式发布自带tomcat,所以不需要配置tomcat容器了。

4.配置项目

4.1 构建自由风格的项目

新建项目,选择构建自由风格的项目,给项目起个名字,然后点击Ok。

4.2 配置参数化构建过程

这里我用到了几个参数,因为可能有时需要提前准备好参数在进行构建,如下图:

00f5a15ca544b6085822b29b195365c05cd.jpg

6fb9a783eeea05c64f164785a1c648ed158.jpg

ec14b376f95fde69344ca029497ecc49041.jpg

e3ff3f8e1fa3162a3a2e8dda2f9f52666c8.jpg

  • jar_path :本意是准备项目打包后的jar位置,其实这里是Jenkins工作空间
  • spring_profile:这个是读取配置文件前缀,比如dev,test,prod
  • jar_name:jar包名称
  • project_name:项目名称

4.3 Git配置

用Git进行将项目Clone下来,配置自己的用户密码,Repository URL配置git地址(这里提供的地址是在gitlab上随意创建的SpringBoot项目,项目没什么特别)

500ca0e1c992e7b5878e0d3c5aaa1d92f9a.jpg

4.4 构建

e1288e4db799729537af59ad0915c6a99fc.jpg

这里选择执行Shell,内容如下:

mvn clean install -Dmaven.test.skip=true
echo $spring_profile $jar_path $jar_name
cd /usr/local/shell/
./stop.sh $jar_name
echo "Execute shell Finish"
./startup.sh $spring_profile $jar_path $jar_name $project_name

在上面执行的Shell里面还用到了两个Shell,分别是stop.sh,实质就是找到jar执行的pid,然后kill,具体内容如下:

jar_name=${1}
echo "Stopping" ${jar_name}
pid=`ps -ef | grep ${jar_name} | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
echo "kill -9 的pid:" $pid
kill -9 $pid
fi

startup.sh内容如下,具体可以根据情况修改:

spring_profile=${1}
jar_path=${2}
jar_name=${3}
project_name=${4}
cd ${jar_path}/${project_name}/target/
echo ${jar_path}/${project_name}/target/
echo nohup java -jar ${jar_name} &
BUILD_ID=dontKillMe nohup java -jar ${jar_name} --spring.profiles.active=${spring_profile} &

以上两个文件记得设置好权限,不然构建的时候会报错。

碰到的小插曲,Jenkins内无法使用mvn,报错mvn:command not found,这里的解决方式是添加软链接,将mvn命令也指向/usr/bin/mvn,如下:

ln -s /usr//apache-maven-3.6.0/bin/mvn /usr/bin/mvn

5 测试运行

5.1 运行

点击运行后,如图所示,刚刚预配置的参数都可以看到并可以修改,这里我们用默认配置好的就可以。

7ccde9d3e0200eff86eeb551cdeb967beb1.jpg

构建成功后浏览器访问项目地址,正常显示

4d2bb15b87913dbcb0c840b19d93bd11a69.jpg

6 Gitlab的webhook自动构建

6.1 Jenkins全局安全配置

需要在Jenkins上配置允许匿名用户访问

12fae865c68cda1c28c5068a3d58f84c506.jpg

 

 

6.2 GitLab配置

a8d368ac41e8f5fe0c90664528e49616506.jpg

4936807ff2cf0f91c5a311ca047d422d122.jpg

这里的URL地址填写Jenkins项目构建触发器的地址带上token,然后选择触发器(一般选择push和merge就可以了)

点击测试返回201则成功。

8846f6f17c05b9b719757639c53680a8082.jpg

然后查看Jenkins就会有一条构建记录

如果失败,我碰到的问题有下面几个

1.地址路径参数不对

2.Jenkins安全设置没有勾选运行匿名访问

7 总结

总体过程坑其实还是很多的,总是出现不同的问题,但是网上一般都有解决办法,前人也是一样踩过坑的,后面会把docker引进来。

大体结构

  1. 开发人员在gitLab上打了一个tag
  2. gitLab把tag事件推送到Jenkins
  3. Jenkins 获取tag源码,编译,打包,构建镜像
  4. Jenkins push 镜像到阿里云仓库
  5. Jenkins 执行远程脚本
    5-1. 远程服务器 pull 指定镜像
    5-2. 停止老版本容器,启动新版本容器
  6. 通知测试人员部署结果

转载于:https://my.oschina.net/u/3737136/blog/2977600

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值