- 最近准备和朋友搞一个小项目,需要用到Jenkins来做部署,这里记录一个Jenkins的配置。Jenkins官方文档
- 由于方便起见,这里我使用War包下载。官网的war包下载比较慢,这里使用清华的源
- 以下内容根据版本不同,可能汉化会有所不同,需要注意。
安装
拉取并运行的命令:
1
2
3
4
5wget https://mirrors.jenkins.io/war-stable/latest/jenkins.war # 拉war文件
java -jar -Xmx256m -Xms64m jenkins.war --httpPort=9000 >~/.jenkins/jenkins.log & # 后台运行,并记录日志
nohup java -jar -Xmx256m -Xms64m jenkins.war --httpPort=9000 >> ~/.jenkins/logs/jenkins_$(date +%Y-%m-%d).log 2>&1 & # 后台运行,并重定向日志输出按天记录
相关配置
- Jenkins的相关文件会放在:
~/.jenkins
目录下 - 一开始进去的时候会让你输入密码,这个密码在:
~/.jenkins/secrets/initialAdminPassword
目录下
配置环境
全局配置中配置Jdk和Maven路径,地址:http://address/configureTools/
必须安装的插件
- 插件安装地址:http://address/pluginManager/available
- Maven Integration:安装了这个插件,才会显示 构建一个Maven项目 选项
- Git Parameter:安装了这个插件,才能选择Git的某个分支进行打包
修改源
- 因为Jenkins默认安装插件是走的国外的服务器,所以我们需要修改源:
- 修改:
~/.jenkins/updates/default.json
- 替换
updates.jenkins-ci.org/download
为mirrors.tuna.tsinghua.edu.cn/jenkins
- 然后把www.google.com修改成百度
- 修改:
其他配置
关闭防跨域伪造保护(视情况关闭,有些时候出现403可以通过关闭解决),地址:http://address/configureSecurity/
SpringBoot项目配置参考
配置过程
- 这里演示一个SpringBoot多模块项目的配置过程。
- 进入新创建的任务的配置里。
为了让我们构建能够自定义,这里我们点击 参数化构建过程。注意:参数的名称那一栏不能随便填,这个会作为环境变量。在Jenkins的Shell脚本中可以通过
${名称}
来获取对应的变量。我们添加如下几种参数:以下图片中的名称如果修改了的话,需要在脚本中做出相应的修改。
Git参数:可以让我们选择Git的某个分支打包。(注意这里的名称,)
字符串参数:用于启动时候指定JVM的额外参数:
文本参数:用于指定SpringBoot启动时候运行的配置文件
字符串参数:用于指定部署的路径
字符串参数:用于指定Jenkins打包后存放的位置。这个一般固定写就行。
上面我们一共添加了以下几个变量:branch、jvm_param、springboot_properties、deploy_path
然后我们到源码管理,选择Git,然后输入对应的仓库地址,以及SSH Key
由于我们是多模块项目,所以我们需要额外指定以下构建选项:
- 这里由于我们的项目最顶级的包是JobApply,然后下面有个JobApply-ALL模块,然后我想每次都构建JobApply-ALL并运行,那么应该填入:
clean install -pl JobApply-ALL -am -amd -Pdev -Dmaven.test.skip=true
- 这里由于我们的项目最顶级的包是JobApply,然后下面有个JobApply-ALL模块,然后我想每次都构建JobApply-ALL并运行,那么应该填入:
为了能让我们的项目自动部署,所以我们添加构建完成后执行Shell脚本:
在下面的框里输入Shell脚本,这里的脚本仅供参考:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68#!/bin/bash
#export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
# 需要在Jenkins中指定一下变量
# - deploy_path:部署路径
# - springboot_properties:SpringBoot启动配置文件
# - jar_path:Jenkins打包后Jar路径
# - jvm_param:JVM启动参数
export BUILD_ID=dontKillMe
echo "---------开始执行部署脚本---------"
config_path=${deploy_path}/conf
log_path=${deploy_path}/logs
echo "配置文件路径为:${config_path}"
echo "日志文件路径为:${log_path}"
# 创建相关的文件夹路径
if [ ! -d "${config_path}" ];then
mkdir -p ${config_path}
fi
if [ ! -d "${log_path}" ];then
mkdir -p ${log_path}
fi
# 写入配置文件
echo "开始写入配置文件"
echo -e "${springboot_properties}" > "${config_path}/application.properties"
echo "写入配置文件完成,路径为:${config_path}/application.properties"
# 获取Jar名称
cd "${jar_path}"
jar_name=$(ls *.jar)
echo "获取到要部署的Jar包名为:${jar_name}"
#将编译好的jar复制到部署路径
cp "${jar_path}/${jar_name}" "${deploy_path}"
cd "${deploy_path}"
#获取以前的pid,并且杀掉以前的进程
pid=`ps -ef | grep -n ${jar_name} | grep -v grep | awk '{print $2}'`
if [ "${pid}" ];then
echo "检测到以前未关闭的进程,开始执行关闭,pid:${pid}"
kill -15 "${pid}"
sleep 20
pid=`ps -ef | grep -n ${jar_name} | grep -v grep | awk '{print $2}'`
if [ "${pid}" ];then
echo "停止进程失败,开始强制停止"
kill -9 "${pid}"
sleep 10
fi
fi
#启动Jar
run_command="nohup java -jar ${jvm_param} -Dspring.config.location=${deploy_path}/conf/ ${jar_name} >> ${deploy_path}/logs/app_$(date +%Y-%m-%d).log 2>&1 &"
echo "启动命令为:${run_command}"
nohup java -jar ${jvm_param} -Dspring.config.location=${deploy_path}/conf/ ${jar_name} >> ${deploy_path}/logs/app_$(date +%Y-%m-%d).log 2>&1 &
# 等待30秒再判断PID来检测是否启动成功
sleep 30
pid=`ps -ef | grep -n ${jar_name} | grep -v grep | awk '{print $2}'`
if [ "${pid}" ];then
echo "进程PID为:${pid},可能启动成功,如无法访问,请查看日志。"
else
echo "无法获取到PID,进程可能启动失败,请检查日志。"
fi
echo "---------结束部署---------"最后点击保存就行了。
使用过程
- 点击参数构建
输入参数,这些就是我们上面配置的:
然后点击构建,左下角就能出现构建进度。点进去,点控制台输出就能看到输出的控制台日志。
拉到最底下,就能看到我们自己搞的shell脚本的输出。