使用Jenkins + Gitlab自动构建Spring Boot项目,并部署到远程服务器上

前言

最近又重新弄了一下jenkins,虽然之前也有弄过但是都是在本地服务器部署,而且记录的不够详细,因此这次将写下详细部署过程。

 

一、下载并启动Jenkins

下载地址:https://jenkins.io/download/   ,选择下载war包

使用Jenkins + Gitlab自动构建Spring Boot项目,并部署到远程服务器上_第1张图片

下载完成后用FTP上传到服务器上输入启动命令:nohup java -jar jenkins.war --httpPort=7070  > jenkins.out 2>&1 & ,后面参数是启动端口。

启动完成后浏览器打开http://ip:7070  进入jenkins操作页面,此时会出现一个页面要求你输入密码,此时回到linux控制台,输入tail -100f jenkins.out 查看启动日志,注意看日志,它会打印你的初始密码,复制初始密码并点下一步,后面的操作按提示来就可以了,可以安装推荐的插件也可以自己选,下面将进入JENKINS配置步骤。

 

二、配置JENKINS

 

点击jenkins 系统管理->插件管理  点击available(可选插件)选项卡 ,在右上角的搜索框搜索并安装如下几个插件:

1、Git plugin  Git client plugin

2、Maven Integration plugin

3、Publish Over SSH

4、Gitlab Hook Plugin(可选)

 

再次点击JENKINS的系统管理 -> 系统设置 ,找到Publish over SSH这一栏,如下图配置要发布到该服务器上的连接配置

使用Jenkins + Gitlab自动构建Spring Boot项目,并部署到远程服务器上_第2张图片

参数说明:

  name:可以随便起          hostname:连接IP地址          Remote Directory: 远程文件夹路径,发布的项目将会在此目录下    

  username:账号  password:密码  ,  除了用账号密码连接外还可以通过private key连接,由于麻烦我在这选择了账号密码连接

 

全局工具配置

这个是基础配置,可不能忘了,分别配置它的JDK  GIT  和MAVEN,如果本机已经有了,则输入安装路径即可,如果没有可以使用JENKINS的自动安装功能 ,看下图:

使用Jenkins + Gitlab自动构建Spring Boot项目,并部署到远程服务器上_第3张图片

自动安装和手动配置二选一。

 

三、Jenkins任务配置

新建一个Jenkins任务,输入你的任务名称点确定,然后点配置进入该任务的配置页面。

1、配置源码管理:

  使用Jenkins + Gitlab自动构建Spring Boot项目,并部署到远程服务器上_第4张图片

 

找到源码管理点GIT,输入你的项目的GIT URL,如http://localhost:80/project.git  ,下面的Credentials是凭据,点添加然后输入登陆gitlab的账号密码

 

2、配置Build 

  找到Build一栏,分别配置好Root POM和Goals and options  ,root pom是你项目的pom.xml,goals and options是mvn的执行命令,可以填 :install -DskipTests ,不需要填mvn xxx

 

3、配置Post Steps

  选择Add post-build step -> Send files or execute commands over SSH  ,然后如下图 配置:

使用Jenkins + Gitlab自动构建Spring Boot项目,并部署到远程服务器上_第5张图片

1、name是之前我们在系统配置里添加的远程服务器配置

2、Source files是哪些文件将被发布到远程服务器,可以使用匹配符如:**/*.jar   or   **/project.jar ,推荐这样填 :**/*.jar,build.sh (将build.sh也打包的因为是发布完可以直接运行该脚本)

3、Remove prefix是要删除的前缀文件夹,例:project/target/p.jar  输入移除前缀:project/target,那么部署后就不会有移除的那些文件夹路径了,推荐不要填,因为它不支持匹配符,只能填死路径 。

4、Exec commond是发布完成后要执行的shell命令,一般用它调用写好的sh脚本,对了如果这里没有Exec command这一栏的话,回到系统配置,找到之前配置远程服务器的地方点开高级配置,把disable exec 取消勾选。

一切准备就绪,最后填写build.sh!

四、Build.sh 重启脚本

 

这个脚本调了我很久,一开始不是没执行完就结束要么就是启动没反应,该脚本的大致作用是查找该目录下的所有jar文件,并使用nohup java -jar 启动,同时保存它的进程PID,下次启动前先获取PID 调用 KILL命令。

下面上脚本 ,代码上面有说明大家可以根据需要修改。

#!/bin/bash -ilex
#jenkin编译时调用的shell,仅使用在测试服务器上
#export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
source /etc/profile
#用于保存启动服务的PID
pid_path=/pids
#如果PID目录不存在,则创建
if [ ! -d "${pid_path}" ]; then
  mkdir ${pid_path}
fi
#遍历文件夹获取jar
for file in `find  * -name "*.jar"`
do
#Jenkins中编译好的jar名称 
jar_name=${file##*/}
#获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
pid=$(cat ${pid_path}/${jar_name}.pid) 

#rm -f ${www_path}/${jar_name}
#杀掉以前可能启动的项目进程 
kill -9 ${pid} 
echo $jar_name
#启动jar,后台启动 
#BUILD_ID=dontKillMe
BUILD_ID=dontKillMe nohup java -Xmx512m -Xms512m -Xmn200m -jar ${file} > ${jar_name%-*.*.*-SNAPSHOT.jar}.out 2>&1 & 
#将进程ID存入到ufind-web.pid文件中 (pid统一路径)
echo $! > ${pid_path}/${jar_name}.pid 

done

大功告成,最后点立即构建试试效果吧!

PS:JENKINS支持定时自动构建和检测GITLAB代码变动自动构建,由于我目前使用的是多结构的maven工程,一次变动会导致所有项目重新打包,因此并没有使用这个功能,有需要的朋友可以搜索jenkins + gitlab webhook 通过gitlab的接口触发jenkins自动构建

 

2019-5-21更新升级了shell脚本=======================================

现在支持参数了,根据参数扫描指定的jar包,使用代码如:bash build.sh "service*.jar" "serviceB*.jar"

 

build.sh:

#!/bin/bash -ilex
#export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
export BUILD_ID=dontKillMe
source /etc/profile
pid_path=/PID
function findJar()
{
	#遍历文件夹获取jar
	for file in `find  * -name "${1}"`
	do
	#Jenkins中编译好的jar名称 
	jar_name=${file##*/}
	#获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
	pid=$(cat ${pid_path}/${jar_name}.pid) 
	#rm -f ${www_path}/${jar_name}
	#杀掉以前可能启动的项目进程 
	kill -9 ${pid} 
	#启动jar,后台启动 
	#BUILD_ID=dontKillMe
	BUILD_ID=dontKillMe nohup java -Xmx512m -Xms512m -Xmn200m -jar ${file} > ${jar_name%-*.*.*-SNAPSHOT.jar}.out 2>&1 & 
	echo $! > ${pid_path}/${jar_name}.pid 
	done
}

#如果PID目录不存在,则创建
if [ ! -d "${pid_path}" ]; then
  mkdir ${pid_path}
fi
if [ $# -gt 0 ] ;then
	for regx in $*
	do
	findJar $regx
	done
else
	findJar "*.jar"
fi

 

 

 

你可能感兴趣的:(自动化部署,web开发)