dubbo-provider-deploy
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相关推荐
- dubbo(provider,consumer)点到点直连配置
2019独角兽企业重金招聘Python工程师标准>>> dubbo(provider,consumer)点到点直连配置 博客分类: dubbo 1.服务端接口配置(providr样例 ...
- dubbo provider异步_Dubbo学习(六) Dubbo面试问题
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的 ...
- rmi远程反序列化rce漏洞_Apache Dubbo Provider默认反序列化远程代
背景 近日,Apache Dubbo披露了Provider默认反序列化远程代码执行漏洞(CVE-2020-1948),攻击者可构造恶意请求,从而执行任意代码.具体信息如上图所示. 在官方邮件中,漏洞报 ...
- dubbo provider异步_Dubbo相关面试题
金九银十的面试季节,最近我会多发一些面试题相关的文章,因为墨白也要开始找工作了大家一起加油哈 ! ! ! Dubbo是什么? 答∶Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务 ...
- dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?
推荐学习 消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记 肝了30天,整出这份[分布式宝典:限流+缓存+通讯],秋招跳槽有望 一箭双雕!Alibaba架 ...
- dubbo provider异步_dubbo九连问你知道多少?
以下文章来源于公众号"程序员求职之路" 1.Dubbo 支持哪些协议,每种协议的应用场景,优缺点? dubbo:单一长连接和NIO异步通讯,适合大并发小数据量的服务调用,以及消费者 ...
- dubbo的provider和consumer的demo
2019独角兽企业重金招聘Python工程师标准>>> ** provider项目 ** 1.需要调用的接口 package service.api; public interfac ...
- dubbo被阿里放弃原因_中间件小姐姐直播“带货”——阿里程序员必知的插件
老早就听闻 "中间件小姐姐" 的名气,刚好这一次遇上小姐姐做直播,嗲嗲的声音真是甜得不行,要是以后都是这种软萌音来做直播,我一定准时准点抢座位并且乖乖吃下这一剂安利. 小姐姐和岛风 ...
- java dubbo协议_Dubbo同时支持多种协议(以dubbo和rest为例)
一. 背景知识 有时候微服务需要提供给多个消费者, 而不通过的消费者可能希望依据自身情况使用不同的协议. 另一方面, 有时候如果原本服务以 dubbo 协议提供服务, 但是为了调试或者监控方便, 我们 ...
- springboot 集成dubbo
一.引入相关依赖 pom.xml <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> ...
最新文章
- 让linux服务器支持安全http协议(https)
- 您的浏览器没有获得Java Virtual Machine(JVM)支持。可能由于没有安装JVM或者已安装但是没有启用。请安装JVM1.5或者以上版本,如果已安装则启用它。...
- Java毕设动物管理系统_java毕业设计_springboot框架的现代化动物园管理系统EB
- springmvc是什么_当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?
- linux网络编程之TCP三次握手和四次挥手
- 光骓者的荣耀(洛谷P5638题题解,弃坑Java拥抱C++)
- 伦敦帝国学院提出局部特征提取新模式D2D:先描述后检测
- HDOJ 4223 (DP)
- c语言考试答案,C语言考试题及答案
- WF不是工作流(后续)
- Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
- i.MX6ULL终结者硬件资源说明
- 哪些思维让你受益匪浅
- android 自定义 对号,超简单实现Android自定义Toast
- 基本排序算法 《数据结构》严蔚敏版
- 【译】前端开发者的基本要求
- android chrome html,在桌面chrome中调试android设备中的web页面
- [120309]板撸妹子两只(微福利)
- 旅游网站的设计与实现
- navigation导航中导航栏的设置