打包
基本命令就是
maven clean package
加入包名加入依赖
clean package -pl 包名 -am
加入环境
clean package -pl 包名 -am -P prod
#需要注意的是,-P 这个环境参数是开发他们的pom.xml里会提供才能用上的,如果pom里没提供,运维同学加上这个参数,打包也不影响
下面这种带很多参数的,这个跟开发同学的代码目录结构有关系的
git分支
*/master
这个东西也不定是master,看他们开发给你哪个分支是生产环境的,得问开发同学,所以这个可以作为变量传进去的 。
shell脚本
- 发布到带有Jenkins的这台机器
发布到jenkins这台机器启动shell脚本,使用了nohup启动,还需要加一行
BUILD_ID=xxx ,
其中xxx可以是任意内容(只要不是原来的BUILD_ID内容即可),同时需要把nohup输出内容重定向到文件里面,如"/usr/local/nohup.out"
原因
jenkins默认会在构建完成后,杀掉构建过程中由shell命令触发的衍生进程。
jenkins根据BUILD_ID识别某个进程是否为构建过程的衍生进程,故修改BUILD_ID后,jenkins就无法识别是否为衍生进程,则此进程能在后台保留运行。
结论就是Jenkins程序只负责运行伪命令行nuhup 命令,并不保证是否成功运行 nuhup后面的命令
- 发布到其他机器
我发现的发布到其他机器,就不用加上 BUILD_ID=xxx ,上面没jenkins
- 导入jdk环境
source /etc/profile
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
如果没有这个东西,jenkins去远程执行脚本,也会发生执行成功,但是进程没起来的问题,所以这个也得加上,给他导入环境变量,就可以了
nohup输出
nohup java -jar admin.jar >start.log 2>&1 &
给他一个log输出,不然会挂在那里,起不来。所以给他一个日志就行了
使用ansible
之前发现的,如果使用了ansible,起不来的情况,给他加一个nohup
最后来一个
脚本样例
#!/bin/sh
source /etc/profile
#进入主目录
cd /home/java/
# 判断进程是否存在,再启动
python_pid_cound=`ps -ef | grep java | grep admin | grep -v grep | awk '{print $2}' | wc -l`
python_pid=`ps -ef | grep java | grep admin | grep -v grep | awk '{print $2}'`
#mkdir /backup/`date +%Y%m%d%H`
#mv /home/java/admin.jar /backup/`date +%Y%m%d%H`
rm -rf /home/java/admin.jar
mv /home/package/admin.jar /home/java/
if [ $python_pid_cound -eq 0 ];then
echo '进程没启动,需要启动一下'
BUILD_ID=dontKillMe # jenkins本地这机器要有这行
nohup java -jar admin.jar >start.log 2>&1 &
else
echo '进程已启动,杀死再启动一下'
kill -9 $python_pid
BUILD_ID=dontKillMe # jenkins本地这机器要有这行
nohup java -jar admin.jar >start.log 2>&1 &
fi
echo 'admin 启动完成'