侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Deploy web service via shell

2023-11-17 星期五 / 0 评论 / 0 点赞 / 60 阅读 / 3057 字

开发中,由于XXOO原因,测试和生产环境是同一个,而且决策者不推荐使用CI(Jenkins),在开发中,需要较为频繁发布新版本,测试人员提出服务不能间断,此处不谈测试/生产为同一个环境或者需求是多么不

    开发中,由于XXOO原因,测试和生产环境是同一个,而且决策者不推荐使用CI(Jenkins),在开发中,需要较为频繁发布新版本,测试人员提出服务不能间断,此处不谈测试/生产为同一个环境或者需求是多么不合理,针对此需求,总结一个笨方法:

Env:2台host,A部署Nginx + APP,B部署APP

在A的nginx配置目录放三个配置文件:nginx.conf.a,nginx.conf.b,nginx.conf.ab,分别将请求分发到对应的服务提供者a/b/ab。

初始状态:nginx.conf.ab

0. 更新a服务

    |- 用nginx.conf.b替换nginx.conf

    |- 重新加载nginx配置

    |- 更新a

    |- 验证a

1. 更新b服务

    |- 用nginx.conf.a替换nginx.conf

    |- 重新加载nginx配置

    |- 更新b

    |- 验证b

2. ab负载均衡

    |- 用nginx.conf.ab替换nginx.conf

    |- 重新加载nginx配置

脚本如下,部分环境可能有区别,自行适配,如:本文登陆远程host方式为将本机的key放到目标host,如果是user/pass,可以使用sshpass组件来实现 。。。

deploy.sh

#!/bin/bashserver_a="a_ip"server_b="b_ip"delay=45echo "Deploy begin ..."echo "Redeploy a begin ..."ssh root@$server_a 'bash -s'< deploy-reloadNginx.sh bscp -r CoachService root@$server_a:~/projects/ssh root@$server_a 'bash -s'< deploy-build.shecho "Sleep ${delay}s ..."sleep ${delay}sa_status=`curl -s -o /dev/null -w "%{http_code}" "http://$server_a:8080/heartbeat"`if [ $a_status -eq 200 ]then  echo "Deploy a success ..."  echo "Redeploy b begin ..."  ssh root@$server_a 'bash -s'< deploy-reloadNginx.sh a  scp -r CoachService root@$server_b:~/projects/  ssh root@$server_b 'bash -s'< deploy-build.sh  echo "Sleep ${delay}s ..."  sleep ${delay}s  b_status=`curl -s -o /dev/null -w "%{http_code}" "http://$server_b:8080/heartbeat"`  if [ $b_status -eq 200 ]    then      echo "Deploy b success ..."      ssh root@$server_a 'bash -s'< deploy-reloadNginx.sh ab      echo "Deploy complete ..."    else      echo "Deploy b failed ..."  fielse  echo "Deploy a failed ..."fi

deploy-reloadNginx.sh 

#!/bin/bashecho "Overwrite nginx.conf with nginx.conf.$1 ..."/cp "/etc/nginx/nginx.conf.$1" /etc/nginx/nginx.confecho "Reload nginx ..."nginx -s reload

deploy-build.sh

#!/bin/bashecho "Package service ..."export M2_HOME=/maven/homeexport PATH=$M2_HOME/bin:$PATHcd /project/pathmvn clean package -Dmaven.test.skip=trueecho "Replace the old package ..."cp target/app-0.0.1-SNAPSHOT.jar /var/coach/app.jarecho "Restart service ..."service app-service restart --spring.profiles.active=production

 

广告 广告

评论区