julley 发表于 2018-9-16 09:15:09

Jenkins 自动化部署上线 ​

Last login: Thu Jun 28 18:01:59 2018 from 172.16.29.39  
# cat /jenkins/deploy.sh
  
#!/bin/bash
  

  
#
  
# Jenkins工程构建通用TOMCAT部署脚本
  
# @author abcdocker
  
# @create_time 2017-08-19
  
#
  
# 在Jenkins内配置部署单元参数
  
#      参数格式:MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATHMAVEN模块名称:需要部署的目标TOMCAT绝对路径
  
#      只有单个部署单元且没有Maven子模块时,模块名称参数可以没有,参数格式为:TOMCAT_ABSOLUTE_PATH
  
#
  
# 注意:
  
#      在本部署脚本内会执行TOMCAT启动脚本,为避免Jenkins在构建成功以后杀掉所有衍生的后台进程,需要在Jenkins内配置全局环境变量 BUILD_ID 值为 allow_to_run_as_daemon
  
#
  
#
  

  
DEPLOY_TARGET_TOMCAT=$TOMCAT
  

  
#校验部署参数,不能为空
  
if [ -z "$DEPLOY_TARGET_TOMCAT" ]
  
then
  
    echo
  
    echo 部署参数为空,部署失败!
  
    echo "#####################################################################"
  
    echo
  
    echo 单个部署单元参数格式:
  
    echo          MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN模块名称:需要部署的目标TOMCAT绝对路径
  
    echo
  
    echo 多个部署单元参数格式:(多个部署单元使用空格分割)
  
    echo          MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH
  
    echo
  
    echo "#####################################################################"
  
    exit 1
  
fi
  

  
echo
  
echo 部署参数:${DEPLOY_TARGET_TOMCAT}
  

  
TOMCAT_ARR=${DEPLOY_TARGET_TOMCAT//;/ }
  
ARR=($TOMCAT_ARR)
  
ARR_LEN=${#ARR
[*]}
  
echo 共 ${ARR_LEN} 个部署单元
  

  
i=1
  
#获取Jenkins传入的目标TOMCAT组
  
for T in $TOMCAT_ARR
  
do
  
    echo
  
    echo 开始 处理第 ${i} 个部署单元
  
    echo 第一个部署单元:$T
  

  
    #获取目标TOMCAT的WAR路径和TOMCATA的绝对路径
  
    TOMCAT_PARAM=(${T//:/ })
  
    MODULE_NAME=${TOMCAT_PARAM}
  
    TARGET_TOMCAT_PATH=${TOMCAT_PARAM}
  
    WAR_PATH="$WORKSPACE/$MODULE_NAME/target/*.war"
  

  
    echo 部署单元模块名称:"${MODULE_NAME}"
  
    echo 部署WAR包路径:"${WAR_PATH}"
  
    echo 部署TOMCAT路径:"${TARGET_TOMCAT_PATH}"
  

  
    #需要考虑MAVEN单模块下的部署问题
  
    #if [ "${#ARR
[*]}" -eq 1 -a -z "$TARGET_TOMCAT_PATH" ]
  
    if [ "$ARR_LEN" -eq 1 -a -z "$TARGET_TOMCAT_PATH" ]
  
    then
  
      #MAVEN过程没有子模块,单个部署单元
  
      TARGET_TOMCAT_PATH=$MODULE_NAME
  
    MODULE_NAME="NULL"
  
    fi
  

  
    #校验参数,WORKSPACE变量来自于Jenkins环境变量
  
    if [ -z "$MODULE_NAME" -o ! -f $WAR_PATH ]
  
    then
  
      echo 错误:MAVEN部署模块名称 参数为空 或 找不到WAR包!
  
      echo 部署失败!
  
      exit 1
  
    fi
  

  
    if [ -z "$TARGET_TOMCAT_PATH" -o ! -d "$TARGET_TOMCAT_PATH" ]
  
    then
  
      echo 错误:目标TOMCAT绝对路径 参数为空 或 该TOMCAT目录不存在!
  
      echo 部署失败!
  
      exit 1
  
    fi
  

  
    echo 开始清理目标TOMCAT启动进程...
  
    TOMCAT_PID=`ps -ef |grep "$TARGET_TOMCAT_PATH" |grep"start" |awk '{print $2}'`
  
    if [ -n "$TOMCAT_PID" ]
  
    then
  
      echo TOMCAT_${i},PID${TOMCAT_PID},正在结束该进程...
  
      kill -9 $TOMCAT_PID && echo PID${TOMCAT_PID} 已被干掉!
  
    else
  
      echo TOMCAT_${i} 进程未启动!
  
    fi
  

  
    echo 开始清理目标TOMCAT缓存...
  
    rm -rf $TARGET_TOMCAT_PATH/webapps/*
  
    rm -rf $TARGET_TOMCAT_PATH/logs/*
  
    rm -rf $TARGET_TOMCAT_PATH/work/*
  

  
    echo 开始部署WAR包...
  
    cp -a $WAR_PATH $TARGET_TOMCAT_PATH/webapps/ROOT.war && echo WAR包部署完毕。
  

  
    echo 开始启动目标TOMCAT服务...
  
    sleep 10
  
    /bin/bash $TARGET_TOMCAT_PATH/bin/startup.sh
  

  
    echo 开始配置web目录的FTP权限...
  
    #启动过程会自动解压WAR包,所以在这里需要等待WAR包解压完成再调整目录权限
  
    sleep 30
  
    chown -R vftpuser.vftpuser ${TARGET_TOMCAT_PATH}/webapps/ && echo 目录权限配置完毕。
  

  
    echo 部署成功
  
    echo 完成 第 ${i} 个部署单元处理。
  
    echo
  

  
    ((i++))
  
done


页: [1]
查看完整版本: Jenkins 自动化部署上线 ​