配置远程服务器
点击 Manage Jenkins ,选择 Configure System 服务器配置
找到 Publish over SSH 配置远程服务器
其中 Remote Directory 表示连上服务器后,默认进入的目录。文件传输的时候,目标目录会加上这个前缀部分,所以这个目录配置的不要太深,我们这里配置为/home/jenkins/build_code/
。
登录有密码登录和免密登录,二选其一就好。
配置环境插件(jdk和maven)
点击 Manage Jenkins ,选择 Global Tool Configuration ,
进行jdk配置,
配置Maven
配置项目自动打包
首页点击 New Item
配置项目名并选择 maven project ,如果之前有过相似的项目,也可以配置 Copy from
配置 General ,Description可以记录一下项目内容,方便以后查看。jdk选择之前配置的。
Source Code Management 如果你代码在gitlab或者github就选择git,我这里选择Subversion,复制项目的svn路径到Repository URL,用svn的账号密码配置好Credentials,其他的默认就好。
Build Triggers 选择Poll SCM 调度任务
H/5 * * * *
设置为五分钟检测一次项目路径下svn是否有变化,有变化的话就执行打包任务。Build Environment 勾上Add timestamps to the Console Output,这样打包的时候执行的命令行任务信息会在console里面打印出来,有利于查看执行过程Pre Steps 打包之前执行的命令,可以不设置,也可以设置关闭该项目服务的命令,我们这里不设置,统一在 Post Steps 里面处理。
Build maven命令打包
- Root POM 默认配置pom.xml就好。
Goals and options 可以增加跳过测试
-Dmaven.test.skip=true
,强制从私服拿最新的jar包-U
等maven命令。clean install -Dmaven.test.skip=true -U
Post Steps 打包之后执行的命令,我们之前配置了远程服务,这里就可以配置远程服务执行的脚本了。主要的配置在Transfers里面。
- Source files需要填的是该项目打完包之后的war包位置,一般是直接在target下面,而我这个项目是父子结构的项目,war包是在一个子项目的target下面。
- Remove prefix理所当然就是需要去掉的前缀,这样我们把war发送到远程服务器的时候就不会增加更深的目录了。
- Remote directory 远程目录,不填就会放在ssh服务器配置时候的目录,具体可以通过 Configure System 进行查看;填了的话也是在当前目录前面再加上远程服务器配置的目录,例如我们这里填
tomcat/manage
,那么我们的war包会被传送到/home/jenkins/build_code/tomcat/manage
目录下面,我们这里选择不填。 - Exec command 需要执行的命令,我们这里设置执行一个脚本,然后我们在脚本中写具体的操作步骤,大概的内容就是把首先关闭服务,备份并移除tomcat下老的war包,把远程打包过来的war包移动到tomcat的webapp下面,启动项目,五秒之后打印日志。
- 脚本manage.sh
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!/bin/bash
jdk配置,当直接使用java命令进行项目启动的时候可以设置
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
war名称
ServiceName=manage
构建目录
build_code_dir=/home/jenkins/build_code/
tomcat目录
tomcat_dir=/home/jenkins/tomcat/tomcat-manage
cd $tomcat_dir
stop tomcat
./bin/shutdown.sh
sleep 2
使用ps命令保证项目已经被停止
pidlist=`ps -ef|grep $tomcat_dir|grep -v "grep"|awk '{print $2}'`
function stop(){
if [ "$pidlist" == "" ]
then
echo "---- $tomcat_dir 已经关闭----"
else
echo "-- $tomcat_dir 进程号 :$pidlist"
kill -9 $pidlist
echo "--KILL $pidlist:"
fi
}
执行stop方法
stop
sleep 1
移除tomcat老的项目文件,这里也可以先备份,由于是开发环境所以我们就不进行备份了。
rm -rf ${tomcat_dir}/webapps/${ServiceName}*
从发布的目录把对应项目移动当前目录(DIR)
cp -rf ${build_code_dir}/${ServiceName}.war ${tomcat_dir}/webapps
rm -rf ${build_code_dir}/${ServiceName}.war
启动新项目
./bin/startup.sh
自动部署成功。