• jenkins构建java程序发布jar包


    jar包部署

    通过 java -jar 方式运行 jar包.

    创建项目

     创建自由风格项目

    参数化构建

     源码管理

     构建

    jar包构建的代码

    主义脚本中 jar包名字 是构建之后的名字

    [root@node2 jenkins]# cat deploy_java_jar.sh
    #!/bin/sh 
    # 工作目录
    CODE_DIR=$WORKSPACE
    # 压缩包存放目录
    TAR_DIR="/data/jenkins/${JOB_NAME}/"
    # 文件夹及文件名
    FILE_DIR="${TAG_VERSION}_${JOB_BASE_NAME}"
    # 压缩文件全称
    PACKAGE="${FILE_DIR}.tar.gz"
    # jar 包名字
    JAR_NAME='hello-world.jar'
    
    # 构建命令
    MVN_ORDER='/usr/local/maven/bin/mvn clean package'
    
    # 远程部署服务器地址
    REMOTE_IP='172.16.0.64 172.16.0.63'
    # 远程部署服务器账号
    REMOTE_USER=root
    # 远程端口
    REMOTE_PORT=22
    # 远程部署目录
    REMOTE_DIR='/data/'
    
    if [ ! -d ${TAR_DIR} ];then
        mkdir ${TAR_DIR} -p
        echo "创建文件夹: ${TAR_DIR}"
    fi
    
    build_mvn() {
        echo "--------------------------[ mvn  clean package  ]---------------------------"
        cd ${CODE_DIR}
        ${MVN_ORDER}
        if [ $? -eq 0 ]; then
            echo "构建成功: ${CODE_DIR}"
        else
            echo "构建失败: ${CODE_DIR}"
            exit 1
        fi
    }
    cmp_package() { 
        echo "--------------------------[ compress jar ]---------------------------"
        cd ${CODE_DIR}/target/ && tar zcf ${TAR_DIR}${PACKAGE} ${JAR_NAME}
        if [ $? -eq 0 ]; then
            echo "打包成功: ${TAR_DIR}${PACKAGE}"
        else
            echo "打包失败: ${TAR_DIR}${PACKAGE}"
            exit 1
        fi
    }
    
    scp_package() { 
        echo "--------------------------[ remote rsync jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            rsync -arq --port=${REMOTE_PORT} ${TAR_DIR}${PACKAGE} ${REMOTE_USER}@${IP}:${REMOTE_DIR}
            if [ $? -eq 0 ]; then
                echo "远程拷贝成功: $IP - ${TAR_DIR}${PACKAGE}"
            else
                echo "远程拷贝失败: $IP - ${TAR_DIR}${PACKAGE}"
                exit 1
            fi
        done
    }
    
    remote_untar() { 
        echo "--------------------------[ remote untar jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP "mkdir ${REMOTE_DIR}${FILE_DIR}"
            ssh $IP "cd $REMOTE_DIR && tar xf  ${PACKAGE} -C ${REMOTE_DIR}${FILE_DIR}"
            ssh $IP "cd $REMOTE_DIR && rm -rf ${PACKAGE}"
            if [ $? -eq 0 ]; then
                echo "解压成功: $IP - ${PACKAGE}"
            else
                echo "解压失败: $IP - ${PACKAGE}"
                exit 1
            fi
        done
    }
    
    remote_ln() {
        # 确保软件连目录原本就是软连接目录
        # ssh $REMOTE_IP "cd $REMOTE_DIR && ln -snf  ${REMOTE_DIR}/${TAR_NAME} html"
        echo "--------------------------[ remote ln jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP "cd $REMOTE_DIR && rm -rf ${JAR_NAME}  && ln -s ${REMOTE_DIR}${FILE_DIR}/${JAR_NAME} ${JAR_NAME}"
            if [ $? -eq 0 ]; then
                echo "软连接成功: $IP - ${JAR_NAME}"
            else
                echo "软连接失败: $IP - ${JAR_NAME}"
                exit 1
            fi
        done
    
    }
    
    run_jar() {
        echo "--------------------------[ remote start jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP " nohup java -jar  ${REMOTE_DIR}$JAR_NAME >> ${REMOTE_DIR}${JAR_NAME}.out 2>&1 &"
            if [ $? -eq 0 ]; then
                echo "启动成功: $IP - ${JAR_NAME}"
            else
                echo "启动失败: $IP - {JAR_NAME}"
                exit 1
            fi
        done
    }
    
    stop_jar() {
      echo "--------------------------[ remote stop jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP "ps -ef | grep ${JAR_NAME} | grep -v grep"
            if [ $? -eq 0 ]; then
                ssh $IP "ps -ef | grep ${JAR_NAME} | grep -v grep  | awk '{print $2}' | xargs kill -s 9"
                if [ $? -eq 0 ]; then
                    echo "停止成功: $IP - ${JAR_NAME}"
                else
                    echo "停止失败: $IP - ${JAR_NAME}"
                    exit 1
                fi
            else       
                echo "越过${IP}服务器: 没有启动${JAR_NAME}进程!"
                continue
            fi
        done
    }
     
    main() { 
        build_mvn;
        cmp_package;
        scp_package; 
        remote_untar; 
        stop_jar;
        remote_ln; 
        run_jar;
    }
    
    case $pattern in
        deploy)
     #       if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
                echo "构建失败该 ${TAG_VERSION} 版本号已部署"
     #           exit 1
      #      else
                echo "----------    开始发布 版本:${TAG_VERSION} --------"
                main
                echo "----------    完成发布 版本:${TAG_VERSION} --------"
       #     fi
            ;;
        rollback)
            echo "----------    开始回滚 版本:${TAG_VERSION} --------"
            stop_jar;
            remote_ln;
            run_jar;
            echo "----------    完成回滚 版本:${TAG_VERSION} --------"
            ;;
        *)
          echo "Usage: $0 {deploy | rollback }"
          exit 1
          ;;
    esac
    jar包脚本

    war包构建

    war包基于tomcat jenkins 配置一样,区别代码

    脚本代码 

    [root@node2 jenkins]# cat deploy_java_war.sh
    #!/bin/sh 
    # 工作目录
    CODE_DIR=$WORKSPACE
    # 压缩包存放目录
    TAR_DIR="/data/jenkins/${JOB_NAME}/"
    # 文件名字
    FILE_DIR="${TAR_VERSION}_${JOB_BASE_NAME}"
    # 压缩文件全称
    TAR_NAME="${FILE_DIR}.tar.gz"
    # jar 包名字
    JAR_NAME='hello-world-war-1.0.0.war'
    
    # 构建命令
    MVN_ORDER='/usr/local/maven/bin/mvn clean package'
    
    # 远程部署服务器地址
    REMOTE_IP='172.16.0.64 '
    # 远程部署服务器账号
    REMOTE_USER=root
    # 远程端口
    REMOTE_PORT=22
    # 远程部署目录
    REMOTE_DIR='/usr/local/tomcat/webapps/'
    
    if [ ! -d ${TAR_DIR} ];then
        mkdir ${TAR_DIR} -p
        echo "创建文件夹: ${TAR_DIR}"
    fi
    
    build_mvn() {
        echo "--------------------------[ mvn  clean package  ]---------------------------"
        cd ${CODE_DIR}
        ${MVN_ORDER}
        if [ $? -eq 0 ]; then
            echo "构建成功: ${CODE_DIR}"
        else
            echo "构建失败: $ls
            {CODE_DIR}"
            exit 1
        fi
    }
    
    cmp_package() { 
        echo "--------------------------[ compress jar ]---------------------------"
        cd ${CODE_DIR}/target/ && tar zcf ${TAR_DIR}${TAR_NAME} ${JAR_NAME}
        if [ $? -eq 0 ]; then
            echo "打包成功: ${TAR_DIR}${TAR_NAME}"
        else
            echo "打包失败: ${TAR_DIR}${TAR_NAME}"
            exit 1
        fi
    }
    
    scp_package() { 
        echo "--------------------------[ remote rsync jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            rsync -arq --port=${REMOTE_PORT} ${TAR_DIR}${TAR_NAME} ${REMOTE_USER}@${IP}:${REMOTE_DIR}
            if [ $? -eq 0 ]; then
                echo "远程拷贝成功: $IP - ${TAR_DIR}${TAR_NAME}"
            else
                echo "远程拷贝失败: $IP - ${TAR_DIR}${TAR_NAME}"
                exit 1
            fi
        done
    }
    
    remote_untar() { 
        echo "--------------------------[ remote untar jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP "mkdir ${REMOTE_DIR}${FILE_DIR}"
            ssh $IP "cd $REMOTE_DIR && tar xf  ${TAR_NAME} -C ${REMOTE_DIR}${FILE_DIR}"
            ssh $IP "cd $REMOTE_DIR && rm -rf ${TAR_NAME}"
            ssh $IP "cd $REMOTE_DIR${FILE_DIR} && unzip -q ${JAR_NAME}"
            ssh $IP "cd $REMOTE_DIR${FILE_DIR} && rm -rf ${JAR_NAME}"
            if [ $? -eq 0 ]; then
                echo "解压成功: $IP - ${TAR_NAME}"
            else
                echo "解压失败: $IP - ${TAR_NAME}"
                exit 1
            fi
        done
    }
    
    remote_ln() {
        # 确保软件连目录原本就是软连接目录
        # ssh $REMOTE_IP "cd $REMOTE_DIR && ln -snf  ${REMOTE_DIR}/${TAR_NAME} html"
        echo "--------------------------[ remote ln jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP "cd $REMOTE_DIR && rm -rf ROOT  && ln -s ${REMOTE_DIR}${FILE_DIR} ROOT"
            if [ $? -eq 0 ]; then
                echo "软连接成功: $IP - ${JAR_NAME}"
            else
                echo "软连接失败: $IP - ${JAR_NAME}"
                exit 1
            fi
        done
    
    }
    
    run_jar() {
        echo "--------------------------[ remote start jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP "/usr/local/tomcat/bin/startup.sh"
            if [ $? -eq 0 ]; then
                echo "启动成功: $IP - ${JAR_NAME}"
            else
                echo "启动失败: $IP - {JAR_NAME}"
                exit 1
            fi
        done
    }
    
    stop_jar() {
      echo "--------------------------[ remote stop jar ]---------------------------"
        for IP in ${REMOTE_IP};do
            ssh $IP "ps -ef | grep tomcat | grep -v grep" &>/dev/null
            if [ $? -eq 0 ]; then
                ssh $IP "/usr/local/tomcat/bin/shutdown.sh"
                if [ $? -eq 0 ]; then
                    echo "停止成功: $IP - ${JAR_NAME}"
                else
                    echo "停止失败: $IP - ${JAR_NAME}"
                    exit 1
                fi
            else       
                echo "越过${IP}服务器: 没有启动tomcat!"
                continue
            fi
        done
    }
     
    main() { 
        build_mvn;
        cmp_package;
        scp_package; 
        remote_untar; 
        stop_jar;
        remote_ln; 
        run_jar;
    }
    
    case $pattern in
        deploy)
       if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
               echo "构建失败该 ${TAR_VERSION} 版本号已部署"
               exit 1
           else
                echo "----------    开始发布 版本:${TAR_VERSION} --------"
                main
                echo "----------    完成发布 版本:${TAR_VERSION} --------"
           fi
            ;;
        rollback)
            echo "----------    开始回滚 版本:${TAR_VERSION} --------"
            stop_jar;
            remote_ln;
            run_jar;
            echo "----------    完成回滚 版本:${TAR_VERSION} --------"
            ;;
        *)
          echo "Usage: $0 {deploy | rollback }"
          exit 1
          ;;
    esac
    

      

  • 相关阅读:
    /dev/sdxx is apparently in use by the system; will not make a filesystem here! 解决方法
    device mapper的使用
    linux中挂载硬盘报错(you must specify the filesystem type)
    Linux系统分区方案建议
    正确配置Linux系统ulimit值的方法
    ulimit -c unlimited
    ulimit -n 修改
    修改Linux内核参数,减少TCP连接中的TIME-WAIT
    sysctl -P 报错解决办法
    linux 内核参数调整优化网络
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/13413023.html
Copyright © 2020-2023  润新知