jenkins发布java项目和执行shell脚本nohup的总结

打包

基本命令就是

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 启动完成'

你可能感兴趣的:(CI/CD,jenkins,运维)