DevOps-Jenkins 实现DevOps流水线代码部署-参数化构建基础
新建job任务
参数化构建
在执行构建时可根据参数选项执行
执行脚本并传递参数
点击立即构建可以看到会有参数选择,执行时根据自己需求构建
下列是参考脚本
#!/bin/bash DATE=`date +%Y-%m-%d_%H-%M-%S` METHOD=$1 BRANCH=$2 GROUP_LIST=$3 function IP_list(){ if [[ ${GROUP_LIST} == "GROUP1" ]];then Server_IP="192.168.0.142" echo ${Server_IP} #ssh root@172.31.0.103 ""echo disable server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock" #ssh root@172.31.0.104 ""echo disable server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock" elif [[ ${GROUP_LIST} == "GROUP2" ]];then Server_IP="192.168.0.79" echo ${Server_IP} #从调度器下线后端服务器,如果调度器开启了多进程,则需要从每一个进程都下线 #ssh root@172.31.0.103 ""echo enable server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock" #ssh root@172.31.0.104 ""echo enable server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock" elif [[ ${GROUP_LIST} == "GROUP3" ]];then Server_IP="192.168.0.142 192.168.0.79" echo ${Server_IP} fi } function clone_code(){ cd /data/git/linux39/ && rm -rf web1 git clone -b ${BRANCH} git@159.138.5.152:linux39/web1.git echo "代码clone完成" } #代码质量扫描 #function scanner_code(){ # cd /data/git/linux39/web1 && /usr/local/sonar-scanner/bin/sonar-scanner # echo "代码扫描完成,请打开sonarqube查看扫描结果" #} function code_maven(){ echo "cd /data/git/linux39/web1 && mvn clean package -Dmaven.test.skip=true" echo "代码编译完成" } function make_zip(){ cd /data/git/linux39/web1 && zip -r code.zip ./ echo "代码打包完成" } #下线后端服务器 #down_node(){ #for node in ${Server_IP};do #jenkins到后端服务器免密钥登录 #ssh root@172.31.0.103 "echo "disable server linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock" #echo "${node} 从负载均衡172.31.0.103下线成功" #ssh root@172.31.0.104 "echo "disable server linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock" #echo "${node} 从负载均衡172.31.0.104下线成功" #done #} function stop_tomcat(){ for node in ${Server_IP};do ssh www@${node} "/opt/apps/tomcat.sh stop" done } function scp_zipfile(){ for node in ${Server_IP};do scp /data/git/linux39/web1/code.zip www@${node}:/data/tomcat/tomcat_appdir/code-${DATE}.zip ssh www@${node} "unzip /data/tomcat/tomcat_appdir/code-${DATE}.zip -d /data/tomcat/tomcat_webdir/code-${DATE} && rm -rf /data/tomcat/tomcat_webapps/myapp && ln -sv /data/tomcat/tomcat_webdir/code-${DATE} /data/tomcat/tomcat_webapps/myapp" done } function start_tomcat(){ for node in ${Server_IP};do ssh www@${node} "/etc/init.d/tomcat start" #sleep 5 done } function web_test(){ sleep 5 for node in ${Server_IP};do NUM=`curl -s -I -m 10 -o /dev/null -w %{http_code} http://${node}:8080/myapp/index.html` if [[ ${NUM} -eq 200 ]];then echo "${node} 测试通过,即将添加到负载" add_node ${node} else echo "${node} 测试失败,请检查该服务器是否成功启动tomcat" fi done } function add_node(){ node=$1 echo ${node},"----->" #if [[ ${GROUP_LIST} == "GROUP2" ]];then # ssh root@172.31.0.103 ""echo enable server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock" # ssh root@172.31.0.104 ""echo enable server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock" #fi ########################################## if [ ${node} == "172.31.0.105" ];then echo "172.31.0.105 部署完毕,请进行代码测试!" else ssh root@172.31.0.103 ""echo enable server linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock" ssh root@172.31.0.104 ""echo enable server linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock" fi } function rollback_last_version(){ for node in ${Server_IP};do echo $node NOW_VERSION=`ssh www@${node} ""/bin/ls -l -rt /data/tomcat/tomcat_webapps/ | awk -F"->" '{print $2}' | tail -n1""` NOW_VERSION=`basename ${NOW_VERSION}` echo $NOW_VERSION,"NOW_VERSION" NAME=`ssh www@${node} ""ls -l -rt /data/tomcat/tomcat_webdir/ | grep -B 1 ${NOW_VERSION} | head -n1 | awk '{print $9}'""` echo $NAME,""NAME ssh www@${node} "rm -rf /data/tomcat/tomcat_webapps/myapp && ln -sv /data/tomcat/tomcat_webdir/${NAME} /data/tomcat/tomcat_webapps/myapp" done } function delete_history_version(){ for node in ${Server_IP};do ssh www@${node} "rm -rf /data/tomcat/tomcat_appdir/*" NUM=`ssh www@${node} ""/bin/ls -l -d -rt /data/tomcat/tomcat_webdir/code-* | wc -l""` echo $NUM if [ ${NUM} -gt 10 ];then NAME=`ssh www@${node} ""/bin/ls -l -d -rt /data/tomcat/tomcat_webdir/code-* | head -n1 | awk '{print $9}'""` ssh www@${node} "rm -rf ${NAME}" echo "${node} 删除历史版本 /data/tomcat/tomcat_webdir/${NAME}成功!" fi done } main(){ case $1 in deploy) IP_list; clone_code; #scanner_code; make_zip; #down_node; stop_tomcat; scp_zipfile; start_tomcat; web_test; delete_history_version; ;; rollback_last_version) IP_list; #echo ${Server_IP} down_node; stop_tomcat; rollback_last_version; start_tomcat; web_test; ;; esac } main $1 $2 $3
版本回滚方式
1. 基于git reset
重新执行代码编译,代码编译时间比较长
2. 重新升级
开发修复完bug重新提交代码,也是需要重新执行代码编译,代码编译时间比较长
3. 基于备份代码目录恢复
基于已经存在的历史版本目录
1. 当前所处的版本
v1->v2(升级失败)->v3(又失败)
如何回滚到稳定的v1版本
v3->v2->v1
2. 将web服务器的代码目录/webapps/myapp 软连接到稳定版本
3. 重启服务