2019独角兽企业重金招聘Python工程师标准>>>

#!/bin/bash
#author liyunpeng
#version 0.1
SOURCE_DIR="/data/deploy-source"
BACKUP_DIR="/data/deploy-backup"
DEPLOY_DIR="/data/dubbo"
EXCLUDE_LIST_NAME="exclude.list"
RUN_CMD_COMMENT="run cmd : "

ARGS=`/usr/bin/getopt -a -o j:b:f:h:e:l: -l help,job-name:,build-id:,file:,hosts:,exclude:,log-path: -- "$@"`
JOB_NAME=""
BUILD_ID=""
COMPRESS_FILE=""
UNCOMPRESS_FILE=""
HOSTS_STR=""
HOSTS=""
EXCLUDE=""
SOURCE_EXCLUDE_LIST=""
BACKUP_EXCLUDE_LIST=""
LOG_PATH=""
SOURCE_FILE_DIR=""
BACKUP_FILE_DIR=""
DEPLOY_FILE_DIR=""

main(){
    getOpt
    unzip
    info
    echo "Now deploying dubbo provider"
    for host in ${HOSTS[@]};do
        rsync ${host}
    done
}

help(){
    echo "usage: dubbo-provider-deploy [options] [args]"
    echo ""
    echo "Options:"
    echo "    --help"
    echo "        Display help information"
    echo ""
    echo "    -j, --job-name <arg>"
    echo "        Hudson job name"
    echo ""
    echo "    -b, --build-id <arg>"
    echo "        Hudson build id"
    echo ""
    echo "    -f, --compress-file <arg>"
    echo "        Project package compress file name, support type : tar.gz, zip"
    echo ""
    echo "    -h, --hosts <arg>"
    echo "        Deploy hosts(multiple \",\" separated by commas)"
    echo "        Example: 192.168.1.1,192.168.1.2"
    echo ""
    echo "    -e, --exclude <arg>"
    echo "        Rsync exclude content"
    echo ""
    echo "    -l, --log-path <arg>"
    echo "        Server log path"
    echo ""
}

getOpt() {
    eval set -- "${ARGS}"
    while true
    do
        case "$1" in
            --help)
                help
                exit 1
                ;;
            -j|--job-name)
                JOB_NAME=$2
                shift
                ;;
            -b|--build-id)
                BUILD_ID=$2
                shift
                ;;
            -f|--file)
                COMPRESS_FILE=$2
                shift
                ;;
            -h|---hosts)
                HOSTS_STR=$2
                HOSTS=(${HOSTS_STR//,/ })
                shift
                ;;
            -e|---exclude)
                EXCLUDE=$2
                shift
                ;;
            -l|---log-path)
                LOG_PATH=$2
                shift
                ;;
            --)
                shift
                break
                ;;
            *)
                echo "Internal error!"
                help
                exit 1
                ;;
        esac
            shift
    done
    if [ -z "${JOB_NAME}" ];then
        echo "Job name is null"
        help
        exit 1
    fi
    if [ -z "${BUILD_ID}" ];then
        echo "Build id is null"
        help
        exit 1
    fi
    if [ -z "${COMPRESS_FILE}" ];then
        echo "Compress file is null"
        help
        exit 1
    fi
    if [ -z "${HOSTS_STR}" ];then
        echo "Hosts is null"
        help
        exit 1
    fi
    if [ -z "${LOG_PATH}" ];then
        echo "Warning : Log path is null, will not make symbolic link, not recommend"
    fi
}

unzip(){
    SOURCE_FILE_PARENT_DIR="${SOURCE_DIR}/${JOB_NAME}/${BUILD_ID}"
    if [ ! -d "${SOURCE_FILE_PARENT_DIR}" ];then
        echo "${SOURCE_FILE_PARENT_DIR} is not a directory, the compress file need put into this directory"
        help
        exit 1
    fi

if [ ! -f "${SOURCE_FILE_PARENT_DIR}/${COMPRESS_FILE}" ];then
        echo "Source compress file : ${SOURCE_FILE_PARENT_DIR}/${COMPRESS_FILE} is not exists"
        help
        exit 1
    fi

echo "${RUN_CMD_COMMENT}cd ${SOURCE_FILE_PARENT_DIR}"
    cd ${SOURCE_FILE_PARENT_DIR}

extension=${COMPRESS_FILE##*.}
    if [ "${extension}" == "gz" ];then
        echo "Uncompress ${COMPRESS_FILE} ..."
        tarCmd="/bin/tar -xvzf ${COMPRESS_FILE}"
        echo "${RUN_CMD_COMMENT}${tarCmd}"
        ${tarCmd}
        UNCOMPRESS_FILE=`/bin/tar -tf ${COMPRESS_FILE} | head -1 | awk -F'/' '{print $1}'`
    elif [ "${extension}" == "zip" ];then
        echo "Uncompress file..."
        unzipCmd="/usr/bin/unzip -o ${COMPRESS_FILE}"
        echo "${RUN_CMD_COMMENT}${unzipCmd}"
        ${unzipCmd}
        UNCOMPRESS_FILE=`/usr/bin/unzip -l ${COMPRESS_FILE} | head -4 | tail -1 | awk '{print $4}'|tr -d '/'`
    else
        echo "Compress file extension not supported"
        help
        exit 1
    fi
    if [ -z "${UNCOMPRESS_FILE}" ];then
        echo "$Uncompress file is null, please check the compress file"
        help
        exit 1
    fi
    SOURCE_EXCLUDE_LIST=${SOURCE_DIR}/${JOB_NAME}/${EXCLUDE_LIST_NAME}
    BACKUP_EXCLUDE_LIST=${BACKUP_DIR}/${JOB_NAME}/${EXCLUDE_LIST_NAME}
    if [ -z "${EXCLUDE}" ];then
        EXCLUDE="log\nlogs"
        echo "Using default exclude"
    fi
    echo -e ${EXCLUDE} > ${SOURCE_EXCLUDE_LIST}
    SOURCE_FILE_DIR="${SOURCE_FILE_PARENT_DIR}/${UNCOMPRESS_FILE}/"
    if [ ! -d "${SOURCE_FILE_DIR}" ];then
        echo "Uncompress file : ${SOURCE_FILE_DIR} is not a directory, compress file may be wrong or compress fail"
        help
        exit 1
    fi
    DEPLOY_FILE_DIR="${DEPLOY_DIR}/${UNCOMPRESS_FILE}/"
    BACKUP_FILE_DIR="${BACKUP_DIR}/${JOB_NAME}/${BUILD_ID}/${UNCOMPRESS_FILE}/"
}

info(){
    echo "================Deploy info================"
    echo "    job name    ${JOB_NAME}"
    echo "    build id    ${BUILD_ID}"
    echo "    compress file    ${COMPRESS_FILE}"
    echo "    hosts    ${HOSTS_STR}"
    echo "    exclude content    ${EXCLUDE}"
    echo "    log path    ${LOG_PATH}"
    echo "    local source directory    ${SOURCE_FILE_DIR}"
    echo "    remote deploy directory    ${DEPLOY_FILE_DIR}"
    echo "    remote backup directory    ${BACKUP_FILE_DIR}"
    echo "================Deploy info================"
}

rsync(){
    host=$1
    echo "================Host ${host} deploy start================"
    sshCmd="ssh root@${host} "
    rsyncHost="root@${host}:"
    if [ "localhost" == "${host}" ];then
        sshCmd="sh -c "
        rsyncHost=""
    fi

mkdirCmd="mkdir -p ${BACKUP_DIR}/${JOB_NAME}/ && mkdir -p ${DEPLOY_FILE_DIR}"
    echo "${RUN_CMD_COMMENT}${sshCmd}${mkdirCmd}"
    ${sshCmd}"${mkdirCmd}"

syncExcludeListCmd="/usr/bin/rsync -aqP ${SOURCE_EXCLUDE_LIST} ${rsyncHost}${BACKUP_EXCLUDE_LIST}"
    echo "${RUN_CMD_COMMENT}${syncExcludeListCmd}"
    ${syncExcludeListCmd}

echo "Backup ${DEPLOY_FILE_DIR} ..."

backupCmd="test -d ${DEPLOY_FILE_DIR} && test ! -d ${BACKUP_FILE_DIR} && mkdir -p ${BACKUP_FILE_DIR} && /usr/bin/rsync -aqP --delete --exclude-from=${BACKUP_EXCLUDE_LIST} ${DEPLOY_FILE_DIR} ${BACKUP_FILE_DIR}"
    echo "${RUN_CMD_COMMENT}${sshCmd}${backupCmd}"
    ${sshCmd}"${backupCmd}"

echo "Rsync ${host} ..."
    rsyncCmd="/usr/bin/rsync -avP --delete --exclude-from=${SOURCE_EXCLUDE_LIST} ${SOURCE_FILE_DIR} ${rsyncHost}${DEPLOY_FILE_DIR}"
    echo "${RUN_CMD_COMMENT}${rsyncCmd}"
    ${rsyncCmd}

if [ ! -z "${LOG_PATH}" ];then
        echo "make symbolic link for log ..."
        lnCmd="test ! -d ${LOG_PATH}/${UNCOMPRESS_FILE}/ && test ! -d ${DEPLOY_FILE_DIR}logs && mkdir -p ${LOG_PATH}/${UNCOMPRESS_FILE}/ && ln -s ${LOG_PATH}/${UNCOMPRESS_FILE}/ ${DEPLOY_FILE_DIR}logs"
        echo "${RUN_CMD_COMMENT}${sshCmd}${lnCmd}"
        ${sshCmd}"${lnCmd}"
    fi

echo "sh cmd start ."
        scpShCmd="scp -r /data/deploy-sh/dubbo/bin/ root@${host}:${DEPLOY_FILE_DIR}"
        ${scpShCmd}

echo "Stop server ..."
    stopCmd="source /etc/profile;sh ${DEPLOY_FILE_DIR}bin/stop.sh"
    echo "${RUN_CMD_COMMENT}${sshCmd}${stopCmd}"
    ${sshCmd}"${stopCmd}"

echo "Start server ..."
    startCmd="source /etc/profile;sh ${DEPLOY_FILE_DIR}bin/start.sh"
    echo "${RUN_CMD_COMMENT}${sshCmd}${startCmd}"
    ${sshCmd}"${startCmd}"
    echo "================Host ${host} deploy end================"
}

main

转载于:https://my.oschina.net/u/3705388/blog/1592269

dubbo-provider-deploy相关推荐

  1. dubbo(provider,consumer)点到点直连配置

    2019独角兽企业重金招聘Python工程师标准>>> dubbo(provider,consumer)点到点直连配置 博客分类: dubbo 1.服务端接口配置(providr样例 ...

  2. dubbo provider异步_Dubbo学习(六) Dubbo面试问题

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的 ...

  3. rmi远程反序列化rce漏洞_Apache Dubbo Provider默认反序列化远程代

    背景 近日,Apache Dubbo披露了Provider默认反序列化远程代码执行漏洞(CVE-2020-1948),攻击者可构造恶意请求,从而执行任意代码.具体信息如上图所示. 在官方邮件中,漏洞报 ...

  4. dubbo provider异步_Dubbo相关面试题

    金九银十的面试季节,最近我会多发一些面试题相关的文章,因为墨白也要开始找工作了大家一起加油哈 ! ! ! Dubbo是什么? 答∶Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务 ...

  5. dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?

    推荐学习 消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记 肝了30天,整出这份[分布式宝典:限流+缓存+通讯],秋招跳槽有望 一箭双雕!Alibaba架 ...

  6. dubbo provider异步_dubbo九连问你知道多少?

    以下文章来源于公众号"程序员求职之路" 1.Dubbo 支持哪些协议,每种协议的应用场景,优缺点? dubbo:单一长连接和NIO异步通讯,适合大并发小数据量的服务调用,以及消费者 ...

  7. dubbo的provider和consumer的demo

    2019独角兽企业重金招聘Python工程师标准>>> ** provider项目 ** 1.需要调用的接口 package service.api; public interfac ...

  8. dubbo被阿里放弃原因_中间件小姐姐直播“带货”——阿里程序员必知的插件

    老早就听闻 "中间件小姐姐" 的名气,刚好这一次遇上小姐姐做直播,嗲嗲的声音真是甜得不行,要是以后都是这种软萌音来做直播,我一定准时准点抢座位并且乖乖吃下这一剂安利. 小姐姐和岛风 ...

  9. java dubbo协议_Dubbo同时支持多种协议(以dubbo和rest为例)

    一. 背景知识 有时候微服务需要提供给多个消费者, 而不通过的消费者可能希望依据自身情况使用不同的协议. 另一方面, 有时候如果原本服务以 dubbo 协议提供服务, 但是为了调试或者监控方便, 我们 ...

  10. springboot 集成dubbo

    一.引入相关依赖 pom.xml <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> ...

最新文章

  1. 让linux服务器支持安全http协议(https)
  2. 您的浏览器没有获得Java Virtual Machine(JVM)支持。可能由于没有安装JVM或者已安装但是没有启用。请安装JVM1.5或者以上版本,如果已安装则启用它。...
  3. Java毕设动物管理系统_java毕业设计_springboot框架的现代化动物园管理系统EB
  4. springmvc是什么_当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?
  5. linux网络编程之TCP三次握手和四次挥手
  6. 光骓者的荣耀(洛谷P5638题题解,弃坑Java拥抱C++)
  7. 伦敦帝国学院提出局部特征提取新模式D2D:先描述后检测
  8. HDOJ 4223 (DP)
  9. c语言考试答案,C语言考试题及答案
  10. WF不是工作流(后续)
  11. Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
  12. i.MX6ULL终结者硬件资源说明
  13. 哪些思维让你受益匪浅
  14. android 自定义 对号,超简单实现Android自定义Toast
  15. 基本排序算法 《数据结构》严蔚敏版
  16. 【译】前端开发者的基本要求
  17. android chrome html,在桌面chrome中调试android设备中的web页面
  18. [120309]板撸妹子两只(微福利)
  19. 旅游网站的设计与实现
  20. navigation导航中导航栏的设置

热门文章

  1. UA MATH566 统计理论 QE练习题1
  2. 超好用的免费文献管理软件Mendeley 简易入门教程
  3. javascript this 关键字学习
  4. 图解修改Windows启动菜单命令行工具BCDEdit
  5. 图解使用PowerTool对Windows内核做初步研究探索
  6. hdu2100(大数加)
  7. 简单电商购物程序(续1)
  8. dns-prefetch,新打开页面预抓取
  9. mysql中删除同一行会经常出现死锁?太可怕了
  10. 《Ext JS权威指南》印出来了,大家很快就能拿到书了