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


    打包

    基本命令就是

    maven clean package
    
    • 1

    加入包名加入依赖

    clean package -pl 包名 -am
    
    • 1

    加入环境

    clean package -pl 包名 -am -P prod
    
    • 1

    #需要注意的是,-P 这个环境参数是开发他们的pom.xml里会提供才能用上的,如果pom里没提供,运维同学加上这个参数,打包也不影响

    下面这种带很多参数的,这个跟开发同学的代码目录结构有关系的

    git分支

    */master
    
    • 1

    这个东西也不定是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
    
    • 1

    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
    
    • 1
    • 2
    • 3

    如果没有这个东西,jenkins去远程执行脚本,也会发生执行成功,但是进程没起来的问题,所以这个也得加上,给他导入环境变量,就可以了

    nohup输出

    nohup java -jar admin.jar >start.log 2>&1 &
    
    • 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 启动完成'
    
    • 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
  • 相关阅读:
    html的日期选择插件
    CSAPP datalab
    YOLOv5算法改进(6)— Neck网络介绍(AFPN和BiFPN)
    深度学习入门(二) 环境配置与预备知识
    自动化测试用例的编写,只需要牢记7点,轻轻松松
    类与对象(中)
    【MC教程】iPad启动Java版mc(无需越狱)(保姆级?) Jitterbug启动iOS我的世界Java版启动器 PojavLauncher
    背景音乐和蓝牙进来的音乐,如何共享一个功放和喇叭?
    图纸管理制度《二》
    SpringBoot3自动配置流程及原理、SpringBootApplication注解详解
  • 原文地址:https://blog.csdn.net/hans99812345/article/details/125914042