jenkins 自动编译,发布,运行项目

Posted by hcy on October 15, 2019

jenkins 自动编译,发布项目

目的

1
检测svn/git项目改动,如果改动则自动拉出源码,编译好,上传到服务器上,关闭服务器上运行的项目,并启动新编译的项目

条件

1
2
3
项目由svn或git管理
这里以maven项目举例子
有远程服务器或本地起虚拟机模拟都行,但要能shh链接上

步骤

1.配置好jenkins 达到自动编译的效果

  • 1.创建jenkins maven风格的项目
  • 2.源码管理选择subversive,填好url 密钥
  • 3.构建 poll SCM 填写 corn表达式,因为开发阶段更新比较频繁,这里没两分钟检测一次 H/2 * * * *
  • 4.保存并构建一下
如果上面没配置错误的话,手动启动构建一下会从svn上拉出源码,并在【jenkins安装目录\workspace\项目文件名\】文件夹下进行编译,
java项目的话会target目录下生成jar/war包

2.继续配置jenkins

  • 1.转到post Steps 选择 ‘send files or execute commands over SSH’ 前提装好jenkins的ssh插件并配置好,选择Run only if build succeeds 这样只有编译成功了才执行上传操作

  • 2.选择好服务器

  • 3.Source files 填写【target/sc-pro-1.0.jar】路径是相对于【jenkins安装目录\workspace\项目文件名\】来处理的,sc-pro-1.0.jar按照实际的来

  • 4.Remove prefix 即移除路径前缀,就是上面填写的字符串,我们只保留文件名,将前面的字符串都去除这里填写【target/】

  • 5.Remote directory 远程文件夹的路径这里我填写【/home/suu/sprintboot8585/temp】这样就把第一次填写的文件路径,去除第二部填写的前缀,通过ssh传输到【/home/suu/sprintboot8585/temp/sc-pro-1.0.jar】,如果上一步的targer/不填写就会在服务器上的temp文件夹下创建目录结构【/home/suu/sprintboot8585/temp/target/sc-pro-1.0.jar】

  • 6.Exec command 这里填写执行的linux命令,我们事先写好sh脚本放在服务器上,这里启动脚本,我填写【source /home/suu/sprintboot8585/temp/display_sc-pro.sh】

3.服务器脚本编写,脚本逻辑

  • 1.找到项目任务pid
  • 2.kill掉项目
  • 3.将项目从上传的temp文件夹下移动到真正执行的目录下
  • 4.启动新项目

我的springboot项目是这样编写的

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
#!/bin/bash
fileName="sc-pro-1.0.jar"
outPath="/home/suu/sprintboot8585/temp"
runPath="/home/suu/sprintboot8585/springboot"

# check
check(){
	if [ $? -eq 0 ];then
		echo "success $1"
	else
		echo "fail $1"
		exit
	fi
}

#kill pid
killPid(){
	kill -9 $1
	check "kill $fileName"
}

# start new 
# 将jar包覆盖移动到执行目录下
# 调用nohup命令执行新的程序
startNew(){
	mv -f $outPath/$fileName $runPath/$fileName
	cd $runPath
	nohup java -jar $fileName  > $runPath/nohup.out &
}

# checkFile 检查新jar包是否存在
if [ -d "$fileName" ];then
	echo "file $fileName not found"
	exit
fi


#fid pid,,找到就程序的pid
n1=`ps -ef |grep $fileName |grep -v grep |awk '{print $2}'`
check  "find PID"
echo "find PID:$n1"


#kill pid if pid exeit,强制结束旧程序
if [ -n "$n1" ];then
	killPid "$n1"
else
	echo "not find pid"
fi

# 调用启动函数
startNew

####4.回到jenkins,手动发布一下,观察console输出信息,能正确获取源码,编译,测试,上传,杀死程序,启动程序


转载请注明出处:https://www.huangchaoyu.com/2019/10/15/jenkins-自动编译-发布-运行项目/