




Jenkins控制台脚本
#!/bin/bash#author:zhangyingguang#time:2020-03#项目上线 负载均衡在思图智能上,所有负载均衡脚本不同 !!!source /etc/profile# projectName 是code目录名字,自定义projectName=vwdata-web#packageName 是打包后的名字,自定义packageName=trutheye-fe#远程服务器的名字,自定义remoteServerName=vwdata_01#负载均衡配置,自定义LoadBalancerId=lb-uf6vdl3jkserverId_01=i-uf66fpq1serverId_02=i-uf66k8r0status=$Statusbranch=$BRANCHcodeDir=/root/code/$projectNamebackDir=$codeDir/back_up#远程服务器项目目录remoteProjectDir=/usr/local/seektruth/web-static/vwdata-staticecho $status $branch $projectName $codeDir $backDir#切换负载均衡SlbOverturn(){if [ $# -eq 3 ]thenecho "------------ 切换负载均衡为0 ---------------"result=$(python /root/code/aliyun-slb-zhineng.py $1 $2 $3)if [ $result = "success" ]thenecho " -------------------- 切换负载均衡 $2 的权重为 $3 成功 ! -------------------"elseecho $resultexit 88fielseecho "not enough parameters"exit 88fi}BUILD_CODE(){cd $codeDircnpm install && npm run build:prod#mvn clean install -Dmaven.test.skip=true[ $? -ne 0 ] && echo -e '\033[31m[ error ] Failed to build the code\033[0m' && exit 1echo "---------------- BUILD_CODE success! ---------"}BackupAndPackage(){cd $codeDir[ ! -d $backDir ] && mkdir -p $backDir#备份[ -f $backDir/${packageName}.gz ] && cp -f $backDir/${packageName}.gz $backDir/${packageName}_last.gz#打包tar -zcf $backDir/${packageName}.gz ${packageName}/echo "------------------- backup and package done ----------------------"}# Ansible推送脚本TransforAndDeploy(){ansible $remoteServerName -m pingansible-playbook /root/code/deploy-web.yml -e host=$remoteServerName -e backDir=${backDir} -e packageName=${packageName} -e webDir=${remoteProjectDir}[ $? -ne 0 ] && echo -e '\033[31m[ error ] Failed to ansible deploy the code\033[0m' && exit 88echo "------------------------------------------ Transfor And Deploy done ----------------------------------------------------------"}deploy(){#firstly 切换负载均衡为 0,并睡5分钟SlbOverturn $LoadBalancerId $serverId_01 0 && sleep 300#secondly 上线echo "------------------------------------------------- 正在上线 -------------------------------------------------------------------"cd $codeDirecho "---------------- BUILD_CODE ---------"BUILD_CODEecho "------------- backup and package-------------------------------"BackupAndPackageecho "------------- transfor And Deploy ----------------------------------- "TransforAndDeploysleep 20#finally 切换负载均衡为 已上线的改为100,未上线的改为0SlbOverturn $LoadBalancerId $serverId_01 100 && sleep 30#SlbOverturn $LoadBalancerId $serverId_02 0 && sleep 5echo "------------------------- 上线成功 ----------------------------------------------"}rollback(){#firstly 切换负载均衡为 0,并10秒钟SlbOverturn $LoadBalancerId $serverId_01 0 && sleep 300echo "--------------------------------------------- 正在回滚 ------------------------------------------------------------- "[ ! -d $backDir ] && mkdir -p $backDircp -f $backDir/${packageName}_last.gz $backDir/${packageName}.gzecho "------------- transfor And Deploy ----------------------------------- "TransforAndDeploy#finally 切换负载均衡为 100SlbOverturn $LoadBalancerId $serverId_01 100 && sleep 10echo "------------------------- 回滚成功 ----------------------------------------------"}case "$status" in'Deploy')deploy;;'RollBACK')rollback;;*)echo "Usage: $0 {Deploy | RollBACK}"exit 1esacexit 0
deploy-web.yml(代码推送)
- hosts: "{{ host }}"remote_user: roottasks:- name: rm projectfile: path={{ webDir }}/{{ packageName }} state=absent- name: pausepause: seconds=20- name: upload and untar gzunarchive: src={{ backDir}}/{{ packageName }}.gz dest={{ webDir }}/ remote_src=nonotify:- nginx reloadhandlers:- name: nginx stopservice: name=nginx state=stopped- name: nginx startservice: name=nginx state=started- name: nginx reloadsystemd: name=nginx state=reloaded- name: pausepause: seconds=20
aliyun-slb-zhineng.py(作用就是切负载均衡)
#!/root/anaconda3/bin/python# -*- coding: UTF-8 -*-# pip install aliyun-python-sdk-core-v3,aliyun-python-sdk-slbimport sysfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkslb.request.v20140515.SetBackendServersRequest import SetBackendServersRequest#获取参数变量if len(sys.argv) == 4:LoadBalancerId = sys.argv[1]ServerId = sys.argv[2]Weight = sys.argv[3]try:Weight = int(Weight)client = AcsClient('LTAIrsTqz', 'Xay7zigjMNbHc', 'cn-beijing')request = SetBackendServersRequest()request.set_accept_format('json')request.set_BackendServers([{"ServerId": ServerId, "Weight": Weight}])request.set_LoadBalancerId(LoadBalancerId)response = client.do_action_with_exception(request)print("success")except Exception as e:print(e)else:print("not enough parameters")
