jenkins服务器使用python脚本rabbitmqadmin和shell对目标服务器进行管理
jenkins服务器使用python脚本rabbitmqadmin和shell对目标服务器进行管理 准备工作:
.jenkins服务器,安装rabbitmqadmi命令
rabbitmqadmin管理脚本下载地址:https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.7.8/bin/rabbitmqadmin
直接将python脚本拷贝到 /usr/bin/rabbitmqadmin下,赋权
chmod +x /usr/bin/rabbitmqadmin # 测试
# su apache
[apache@jenkins:/root]$ rabbitmqadmin -H 1.1.1.1 -P -u chinasoft -p chinasoft2018 -f tsv -q list queues .打通jenkins和jumper_server的ssh,让jenkins能自动登录跳板机 跳板机和后端的windows也需要打通,后端windows安装openssh for windows并且配置互信,跳板机能自动登录windows机器 .需要修改的变量,获取正确的key值
rabbitmq_queue=chinasoft* # 检测Rabbitmq 消息队列数量 如果消息队列内数量大于200 则删除队列内消息
rabbitmq_host=1.1.1.1
rabbitmq_port=
rabbitmq_username=chinasoft
rabbitmq_password=pass
rabbitmq_queue=chinasoft*
rabbitmq_queue_max=
drop_queue=() rabbitmqadmin -H $rabbitmq_host -P $rabbitmq_port -u $rabbitmq_username -p $rabbitmq_password -f tsv -q list queues | while read queue message_total ; do if [ "$queue" == "$rabbitmq_queue" ] && [ "$message_total" -gt $rabbitmq_queue_max ]; then rabbitmqadmin -H $rabbitmq_host -P $rabbitmq_port -u $rabbitmq_username -p $rabbitmq_password delete queue name=$queue; drop_queue+=($queue); fi ; done echo ${drop_queue[@]} if [ ${#drop_queue[*]} -gt ]
then
echo "warning 启动构建的服务"
dir_name=bak.$(date +%Y-%m-%d)
cp -a /data/www/vhosts/chinasoft.com /data/data_backup/chinasoft.com_$dir_name
push_dir=/data/www/vhosts/chinasoft.com/httpdocs
mkdir -p $push_dir ###生产环境的变量 ENVIRONMENT_NAME="convert_env"
ENVIRONMENT_VARIABLE="prod"
WIN_ROOT="/cygdrive/d"
WIN_RESTART_SLEEP=
WIN_ACCOUNT="Administrator" win_back_ips=('172.17.0.33' '172.17.0.32')
execute_jump_ip="1.1.1.1"
middle_server_ip="172.17.0.36"
back_server_ip="172.17.0.35"
restart_middle_group_name="online2:"
restart_back_group_name=("chinasoft_back:" "chinasoft_server:" ) # $ - jump_ip
# $ - win_account
# $ - win_ip
# $ - win_root
# $ - push_dir
# $ - sleep
function rsync_windows_server()
{
__jump_ip="$1"
__win_account="$2"
__win_ip="$3"
__win_root="$4"
__push_dir="$5"
__sleep=$ shift
shift
shift
shift
shift
shift __exclude_params=()
for exclude_dir in "$@"; do
__exclude_params+=(--exclude="$exclude_dir")
done
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 $__win_account@$__win_ip \"export $ENVIRONMENT_NAME=$ENVIRONMENT_VARIABLE; $__win_root$__push_dir/converter_db/scripts/back_stop_consumer.bat\""
rsync -avzP --bwlimit= "${__exclude_params[@]}" $__push_dir/converter_db root@$__win_ip::root --chmod=ugo=rwX
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 $__win_account@$__win_ip shutdown -r -t 0"
sleep $__sleep
} rsync -vau --delete --exclude=.git/ --exclude=.gitignore/ --exclude=node_modules/ $WORKSPACE/ $push_dir
#chmod -R ugo+r $push_dir
chmod +x -R $push_dir/converter_db/scripts
chmod +x -R $push_dir/converter_db/core_api __linux_exclude_params=()
__linux_exclude_params+=(--exclude="converter_db/core_api/Windows") __windows_exclude_dir=()
__windows_exclude_dir+=("converter_db/core_api/Linux") if [ "$PASS_CORE" == "true" ];then
__linux_exclude_params+=(--exclude="converter_db/core_api")
__windows_exclude_dir+=("converter_db/core_api")
fi rsync -vaRzP --progress --bwlimit= "${__linux_exclude_params[@]}" --password-file=/usr/local/rsync/etc/pe_rsyncd.passwd $push_dir/converter_middle apache@$middle_server_ip::apache if [ "$BUILD_TASK_SERVICE" == "true" ];then
# stop consumer & rsync & restart windows
for server_ip in "${win_back_ip[@]}"; do
rsync_windows_server "$execute_jump_ip" "$WIN_ACCOUNT" $server_ip "$WIN_ROOT" "$push_dir" "$WIN_RESTART_SLEEP" "${__windows_exclude_dir[@]}"
done rsync -vaRzP --progress --bwlimit= "${__linux_exclude_params[@]}" --password-file=/usr/local/rsync/etc/pe_rsyncd.passwd $push_dir/converter_db apache@$middle_server_ip::apache
rsync -vaRzP --progress --bwlimit= "${__linux_exclude_params[@]}" --password-file=/usr/local/rsync/etc/pe_rsyncd.passwd $push_dir/converter_db apache@$back_server_ip::apache |true
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 root@$middle_server_ip supervisorctl restart $middle_celery_group"
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 root@$back_server_ip supervisorctl restart ${back_celery_group[@]}"
fi
fi #############################
#第一部分:硬重启
#PE.ali_www.chinasoft.com_monitor-new
############################# # 每隔两小时检查一下rabbitmq,监控chinasoft.com的rabbitmq队列,如果超过200的阈值,则触发重启动作 Build periodically 两小时执行一次
H H/ * * * whoami
# 检测Rabbitmq 消息队列数量 如果消息队列内数量大于200 则删除队列内消息
rabbitmq_host=1.1.1.2
rabbitmq_port=
rabbitmq_username=chinasoft
rabbitmq_password=pass
rabbitmq_queue=online_*
rabbitmq_queue_max=
drop_queue=() rabbitmqadmin -H $rabbitmq_host -P $rabbitmq_port -u $rabbitmq_username -p $rabbitmq_password -f tsv -q list queues | while read queue message_total ; do if [ "$queue" == "$rabbitmq_queue" ] && [ "$message_total" -gt $rabbitmq_queue_max ]; then rabbitmqadmin -H $rabbitmq_host -P $rabbitmq_port -u $rabbitmq_username -p $rabbitmq_password delete queue name=$queue; drop_queue+=($queue); fi ; done echo ${drop_queue[@]} if [ ${#drop_queue[*]} -gt ]
then
echo "warning 启动重启windows服务器的脚本"
push_dir="/data/www/vhosts/chinasoft.com/httpdocs"
###生产环境的变量 ENVIRONMENT_NAME="convert_env"
ENVIRONMENT_VARIABLE="prod"
WIN_ROOT="/cygdrive/d"
WIN_RESTART_SLEEP=
WIN_ACCOUNT="Administrator" win_back_ips=('172.17.0.33' '172.17.0.32')
execute_jump_ip="1.1.1.1"
middle_server_ip="172.17.0.36"
back_server_ip="172.17.0.35"
restart_middle_group_name="online2:"
restart_back_group_name=("chinasoft_back:" "chinasoft_server:" ) # $ - jump_ip
# $ - win_account
# $ - win_ip
# $ - win_root
# $ - push_dir
# $ - sleep
function rsync_windows_server()
{
__jump_ip="$1"
__win_account="$2"
__win_ip="$3"
__win_root="$4"
__push_dir="$5"
__sleep=$ shift
shift
shift
shift
shift
shift __exclude_params=()
for exclude_dir in "$@"; do
__exclude_params+=(--exclude="$exclude_dir")
done
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 $__win_account@$__win_ip \"export $ENVIRONMENT_NAME=$ENVIRONMENT_VARIABLE; $__win_root$__push_dir/converter_db/scripts/back_stop_consumer.bat\""
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 $__win_account@$__win_ip shutdown -r -t 0"
sleep $__sleep
} #chmod -R ugo+r $push_dir
chmod +x -R $push_dir/converter_db/scripts
chmod +x -R $push_dir/converter_db/core_api __linux_exclude_params=()
__linux_exclude_params+=(--exclude="converter_db/core_api/Windows") __windows_exclude_dir=()
__windows_exclude_dir+=("converter_db/core_api/Linux") if [ "$PASS_CORE" == "true" ];then
__linux_exclude_params+=(--exclude="converter_db/core_api")
__windows_exclude_dir+=("converter_db/core_api")
fi if [ "$BUILD_TASK_SERVICE" == "true" ];then
# stop consumer & rsync & restart windows
for server_ip in "${win_back_ip[@]}"; do
rsync_windows_server "$execute_jump_ip" "$WIN_ACCOUNT" $server_ip "$WIN_ROOT" "$push_dir" "$WIN_RESTART_SLEEP" "${__windows_exclude_dir[@]}"
done ssh -p2008 root@$execute_jump_ip "ssh -p 2008 root@$middle_server_ip supervisorctl restart $middle_celery_group"
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 root@$back_server_ip supervisorctl restart ${back_celery_group[@]}"
fi
fi ############################################# # 软重启,热更新 dir_name=bak.$(date +%Y-%m-%d)
cp -a /data/www/vhosts/chinasoft.com /data/data_backup/chinasoft.com_$dir_name
push_dir=/data/www/vhosts/chinasoft.com/httpdocs
mkdir -p $push_dir ###生产环境的变量 ENVIRONMENT_NAME="convert_env"
ENVIRONMENT_VARIABLE="prod"
WIN_ROOT="/cygdrive/d"
WIN_RESTART_SLEEP=
WIN_ACCOUNT="Administrator" win_back_ips=('172.17.0.33' '172.17.0.32')
execute_jump_ip="1.1.1.1"
middle_server_ip="172.17.0.36"
back_server_ip="172.17.0.35"
restart_middle_group_name="online2:"
restart_back_group_name=("chinasoft_back:" "chinasoft_server:" ) # $ - jump_ip
# $ - win_account
# $ - win_ip
# $ - win_root
# $ - push_dir
# $ - sleep
function rsync_windows_server()
{
__jump_ip="$1"
__win_account="$2"
__win_ip="$3"
__win_root="$4"
__push_dir="$5"
__sleep=$ shift
shift
shift
shift
shift
shift __exclude_params=()
for exclude_dir in "$@"; do
__exclude_params+=(--exclude="$exclude_dir")
done
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 $__win_account@$__win_ip \"export $ENVIRONMENT_NAME=$ENVIRONMENT_VARIABLE; $__win_root$__push_dir/converter_db/scripts/back_stop_consumer.bat\""
rsync -avzP --bwlimit= "${__exclude_params[@]}" $__push_dir/converter_db root@$__win_ip::root --chmod=ugo=rwX
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 $__win_account@$__win_ip shutdown -r -t 0"
sleep $__sleep
} rsync -vau --delete --exclude=.git/ --exclude=.gitignore/ --exclude=node_modules/ $WORKSPACE/ $push_dir
#chmod -R ugo+r $push_dir
chmod +x -R $push_dir/converter_db/scripts
chmod +x -R $push_dir/converter_db/core_api __linux_exclude_params=()
__linux_exclude_params+=(--exclude="converter_db/core_api/Windows") __windows_exclude_dir=()
__windows_exclude_dir+=("converter_db/core_api/Linux") if [ "$PASS_CORE" == "true" ];then
__linux_exclude_params+=(--exclude="converter_db/core_api")
__windows_exclude_dir+=("converter_db/core_api")
fi rsync -vaRzP --progress --bwlimit= "${__linux_exclude_params[@]}" --password-file=/usr/local/rsync/etc/pe_rsyncd.passwd $push_dir/converter_middle apache@$middle_server_ip::apache if [ "$BUILD_TASK_SERVICE" == "true" ];then
# stop consumer & rsync & restart windows
for server_ip in "${win_back_ip[@]}"; do
rsync_windows_server "$execute_jump_ip" "$WIN_ACCOUNT" $server_ip "$WIN_ROOT" "$push_dir" "$WIN_RESTART_SLEEP" "${__windows_exclude_dir[@]}"
done rsync -vaRzP --progress --bwlimit= "${__linux_exclude_params[@]}" --password-file=/usr/local/rsync/etc/pe_rsyncd.passwd $push_dir/converter_db apache@$middle_server_ip::apache
rsync -vaRzP --progress --bwlimit= "${__linux_exclude_params[@]}" --password-file=/usr/local/rsync/etc/pe_rsyncd.passwd $push_dir/converter_db apache@$back_server_ip::apache |true
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 root@$middle_server_ip supervisorctl restart $middle_celery_group"
ssh -p2008 root@$execute_jump_ip "ssh -p 2008 root@$back_server_ip supervisorctl restart ${back_celery_group[@]}"
fi
fi
# 发布代码以后删除缓存操作
# 要配置http://jenkins2.chinasoft.cn/jenkins/view/pe.chinasoft/job/web_html/configure 删除nginx的缓存
ssh -p2008 devadmin@1.1.1.1 "sudo rm -rf /dev/shm/nginx/hipdf/cache/*"
jenkins服务器使用python脚本rabbitmqadmin和shell对目标服务器进行管理的更多相关文章
- Jenkins自动执行python脚本输出测试报告
前言 在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作. 借助Jenkins,我们可以结合 Git/SVN 自动拉取 ...
- 【jenkins】jenkins实时显示python脚本输出
jenkins在构建shell脚本时可以实时输出结果,但是在构建python脚本时,是等到python执行完成以后,才显示结果,这个对于我们判断脚本执行状态非常不利 这里介绍一种方法,能够实时显示py ...
- Python——scapy模块实现tcp探测目标服务器路由轨迹
scapy模块的安装 484 yum install tcpdump graphviz ImageMagick -y 485 wget http://www.secdev.org/projects ...
- shell如何向python传递参数,shell如何接受python的返回值
1.shell如何向python传递参数 shell脚本 python $sendmailCommandPath $optDate python脚本 lastDateFormat = sys.argv ...
- python脚本运行的几种方式
1.脚本式编程 将如下代码拷贝至 hello.py文件中: print ("Hello, Python!"); 通过以下命令执行该脚本: $ python ./hello.py h ...
- XShell通过中转服务器直接连接目标服务器
最近由于公司生产环境的变化,使得我们不能使用自己的机器连接到生产环境去,而是要通过跳板机中转才可以连接.于是今天尝试使用 XShell 通过跳板机直接转接到生产环境. 一.使用代理方式 首先填写连接信 ...
- SqlServer作业指定目标服务器
用SSMS生成数据库作业的创建脚本的时候,有一步是sp_add_jobserver操作: EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = ...
- jenkins发布程序触发shell调用python脚本刷新akamai cdn api
刷新cdn的流程:jenkins获取git中的代码,触发脚本推送到生产环境中(即cdn的源站) --> 触发脚本获取git工作目录的更新列表,将更新列表拼凑成带域名信息的url,写入到目录中 - ...
- 【原】Gradle调用shell脚本和python脚本并传参
最近由于项目自动化构建的需要,研究了下gradle调用脚本并传参的用法,在此作个总结. Pre build.gradle中定义了$jenkinsJobName $jenkinsBuild两个Jenki ...
随机推荐
- Laravel 实现前后台用户分离登录
在很多时候,我们需要前台和后台进行不同的登录操作,以限制用户权限,现在用 Laravel 实现这个需求. 前戏 一.获取 Laravel 这个在文档中都有说明的,也比较简单,可以使用 composer ...
- 202. 快乐数.Set去重作用实际作用
编写一个算法来判断一个数是不是“快乐数”. 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1.如 ...
- ajax入门简介
ajax的实现原理 ajax的定义是 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它可以在不刷新页面的情况下提交请求与服务器进行交互动作 ...
- mysql查看表的属性 mysql将查询结果给临时变量
查看所有的表show table status ; 查看具体的某张表show table status from xxdb like 'tm_properties' ; 查看具体的字段的意思 sele ...
- Spring Boot 2.0 整合携程Apollo配置中心
原文:https://www.jianshu.com/p/23d695af7e80 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够 ...
- PAT 乙级 1011.A+B 和 C C++/Java
题目来源 给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行, ...
- Java精通并发-Lock与synchronized关键字在底层的区别及实例分析
在上两次中已经将Lock这个接口的整个官方说明进行了阅读,这次来了解一下它的一个非常重要的实现类: 啥叫“可重入”呢?其实是指一个线程已经拿到了锁,然后该线程还能再次获取这把锁,接下来在了解它之前先用 ...
- 安卓QQ聊天记录导出、备份完全攻略
发到知乎竟然被删掉,我也不知道我到底违反了哪条.唉,别人的毕竟是别人的.虽然博客园也是别人的 前言 我对聊天记录的备份比较执着,也在这上面折腾过不少.碰到过不少令人头疼的麻烦,在这里分享一下经验. 关 ...
- JAVA 时间转换、获取
/** * 将字符串格式的时间转换成Timestamp * * @param time * @param formatStyle * @return */ public static Timestam ...
- 错误 Unable to connect to a repository at URL 'svn://ip地址' 和 No repository found in 'svn://ip地址'
SVN服务器是CentOS6.10 使用TortoiseSVN客户端检出时遇到如下图所示的错误: 是因为没有指定SVN仓库的路径 在SVN服务器执行命令:svnserve -d -r /SVN版本库的 ...