【Jenkins】02 - 自动化部署配置
01中一切安装就绪,准备进行自动化部署试验
一:拉取和打包
前置条件,安装了git和maven插件
manage jenkins -> manage plugins -> 搜索git -> git(install without restart)
manage jenkins -> manage plugins -> 搜索maven -> maven integration(install without restart)
1️⃣ Jenkins操作界面中,新建一个item
2️⃣ 配置git部分
3️⃣ maven配置
4️⃣ 指定pom的位置
点击运行之后会打相应的可执行jar包到target下
二:post操作-部署到测试服务器
1️⃣ 在测试服务器上(服务器3)安装jdk
假设测试服务器的ip是192.168.44.104, 已经安装了jdk1.8
2️⃣ jenkins安装publish插件
3️⃣ 全局配置ssh
在pushlist over ssh中选择新增一个ssh【就是测试服务器的信息】,填写完成之后保存
4️⃣ post step填写
回到之前项目的构建配置,选择post step的操作,添加自动将jar放到测试服务器并运行
选择好刚才创建的ssh服务器,选择每次要传过去的Jar[可以使用通配符]
- 其中source files指定的是jar的通配符
- remote prefix是前缀
- remote directory指定的是目标接收到jar包之后,保存在哪里
- Exec command表示的是jar包在测试服务器后保存了启动的命令
下面的jar包在测试服务器上的位置是:/root/xxoo/demo-1/target/demo-1.0.jar
, 注意不同的路径位置对应下图的分布情况
🎉 在这里可能启动不成功,是因为重启执行jar包的虚拟机或者开启新终端后,/etc/profile
里的环境变量未生效
- 一劳永逸方案为在
~/.bashrc
文件里添加source /etc/profile
- 或者在jenkins配置里面执行
java -jar
命令的上面一行添加source /etc/profile
。
三:超时机制
输出命令时一定要注意不要让窗口卡主,不然Jenkins会认为认为一直没完成
更新exec command
,指定nohub日志的输出位置【例如是mylog.log】
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方
标准输入(stdin):代码为0,使用<或<<;
标准输出(stdout):代码为1,使用>或>>;
标准错误输出(stderr):代码为2,使用2>或2>>
nohub java -jar /root/xxoo/demo*.jar >mylog.log 2>&1 &
# >mylog.log -> 将日志放到mylog.log中,>表示写入到... >>表示追加到..
# 2>&1 -> 标准写法,1表示标准输出,2表示标准错误输出,意思是将输出和错误输出都放在mylog.log中
在刚才配置执行命令的下面有一个高级...
按钮,进入之后,可以配置时间【默认是两分钟】
四:pre操作-运行前的清理
主要是为了kill之前正在运行的进程
# x.sh,没有参数版本,直接就是./x.sh, 后面不接参数,写死删除的是那个进程
#!/bin/bash
# ps -ef -> 找到所有的进程
# grep demo -> 过滤出来包含demo字符串的进程
# grep 'java -jar' -> 在上一次过滤的基础上再次过滤含有'java -jar'的
# awk '{printf $2}' -> 打印输出第二个参数,【pid】
pid=`ps -ef | grep demo | grep 'javar -jar' | awk '{printf $2}'`
echo $pid # 打印一下
if [-z $pid];
then
echo "process can't find";
else
echo "process stoping...";
kill -9 $pid # 杀掉之前的java进程
fi
check=`ps -ef | grep -w $pid | grep java`
if [-z $check];
then
echo "demo pid:$pid is stop"
else
echo "demo stop failed"
fi
# 有参数版本 -> ./x.sh demo
#!/bin/bash
appname=$1
pid=`ps -ef | grep $appname | grep 'javar -jar' | awk '{printf $2}'`
echo $pid # 打印一下
if [-z $pid];
then
echo "$appname process can't find";
else
echo "$appname process stoping...";
kill -9 $pid # 杀掉之前的java进程
fi
check=`ps -ef | grep -w $pid | grep java`
if [-z $check];
then
echo "$appname pid:$pid is stop"
else
echo "$appname stop failed"
fi