jenkins配置eureka、nacos发布优雅上下线服务

eureka发布期间优雅上下线

1、编写eureka下线脚本

vim biz_out_of_service-eureka.pyimport sys
import requests#服务名,脚本第一个参数
APP_NAME=sys.argv[1]
# 需要置为OUT_OF_SERVICE的服务实例的ID,脚本第二个参数
INSTANCE_ID=sys.argv[2]# Eureka服务器的URL
eureka_url = "https://eureka_url/eureka/apps"# 构建Eureka中实例的置为OUT_OF_SERVICE的URL
instance_out_of_service_url = f"{eureka_url}/{APP_NAME}/{INSTANCE_ID}/status?value=OUT_OF_SERVICE"# 使用PUT请求将实例置为OUT_OF_SERVICE
response = requests.put(instance_out_of_service_url)
#使用delete请求将实例从eureka上删除
#response = requests.delete(instance_delete_url)
print(response.status_code)
# 检查响应状态码
if response.status_code == 200:print('服务实例成功下线')
else:print('服务实例下线失败,状态码:', response.status_code)
[root@continuous-deployment script]# 

2、编写eureka上线脚本

vim xlm-biz_up-eureka.pyimport sys
import requests#服务名,脚本第一个参数
APP_NAME=sys.argv[1]
# 需要置为OUT_OF_SERVICE的服务实例的ID,脚本第二个参数
INSTANCE_ID=sys.argv[2]# Eureka服务器的URL
eureka_url = "https://eureka_url/eureka/apps"# 构建Eureka中实例的置为OUT_OF_SERVICE的URL
instance_up_url = f"{eureka_url}/{APP_NAME}/{INSTANCE_ID}/status?value=UP"# 使用PUT请求将实例置为OUT_OF_SERVICE
response = requests.put(instance_up_url)
print(response.status_code)

3、配置nginx下线脚本

#upstram后端服务设置为down
vim nginx/nginx-biz-service-down.sh 
#!/bin/bashnginx_ip=$1
remote_ip=$2
port=$3
ssh -p 22 root@${nginx_ip} "sed -i 's/server ${remote_ip}:${port};/server ${remote_ip}:${port} down;/' /usr/local/nginx/conf/vhosts/upstream.conf"
#热加载nginx
vim  nginx/remote-nginx-reload.sh 
#!/bin/bashnginx_ip=$1
ssh  root@${nginx_ip} "/usr/local/nginx/sbin/nginx -s reload"

4、配置nginx上线脚本

#upstram后端服务设置为down
vim  nginx/nginx-biz-service-up.sh 
#!/bin/bashnginx_ip=$1
remote_ip=$2
port=$3
ssh -p 22 root@${nginx_ip} "sed -i 's/server ${remote_ip}:${port} down;/server ${remote_ip}:${port};/' /usr/local/nginx/conf/vhosts/upstream.conf"
#热加载nginx
vim  nginx/remote-nginx-reload.sh 
#!/bin/bashnginx_ip=$1
ssh  root@${nginx_ip} "/usr/local/nginx/sbin/nginx -s reload"

5、编写服务健康接口检查脚本

vim check-health.py 
import json
import sys
import requestsip=sys.argv[1]
port=sys.argv[2]
service_name=sys.argv[3]
# 目标URL
url = "http://"+ip+":"+port+"/actuator/health"
print(url)
response = requests.get(url)
print(response.text)data=json.loads(response.text)
health_status=data["status"]
if health_status != "UP":# 抛出一个常规的ValueError异常raise ValueError("发布异常")
else:print("服务:{} ip:{} 发布成功".format(service_name, ip))

6、配置jenkins发布脚本

#eureka实例APPNAME
app_name=SERVICE_NAME
#eureka实例ID
instance_id=serviceIP:9796
#服务器端口
port=9796
#服务器ip
remote_ip=172.19.38.133
#nginxIP
nginx_biz_1_ip=172.19.38.93
nginx_biz_2_ip=172.19.38.124
#jar包目录
project_path=service
#jar包名字
package=servicename-web.jar
#服务器上程序所在加目录
release_path=/usr/local/servicename/#编译打包
mvn clean package -DskipTests=true#同步jar包到远程服务器
rsync -av --progress ${project_path}/target/${package}  root@${remote_ip}:/data/jenkins/package/#nginx服务下线
echo "nginx_biz_1服务下线"
/data/script/nginx/nginx-service-down.sh ${nginx_biz_1_ip} ${remote_ip} ${port}
/data/script/nginx/nginx-remote-nginx-reload.sh ${nginx_biz_1_ip}
echo "nginx_biz_2服务下线"
/data/script/nginx/nginx-service-down.sh ${nginx_biz_2_ip} ${remote_ip} ${port}
/data/script/nginx/nginx-remote-nginx-reload.sh ${nginx_biz_2_ip}#eureka服务下线
echo "eureka服务下线"
python3 /data/script/eureka_biz_out_of_service-eureka.py ${app_name} ${instance_id}#eureka服务下线后等待30s
sleep 35s#重启服务
ssh root@${remote_ip} "source /etc/profile && /usr/bin/cp -p /data/jenkins/package/${package}  ${release_path}  && ${release_path}web.sh restart"#重启服务后等待40s
echo "正在重启服务,等待40s"
sleep 40s#服务健康检查
python3 /usr/local/script/check_http_code.py ${remote_ip} ${port} ${app_name}#eureka服务上线
echo "eureka服务上线"
python3 /usr/local/script/eureka_biz_up-eureka.py ${app_name} ${instance_id}#nginx服务上线
echo "nginx_biz_1服务上线"
/data/script/nginx/xlm-service-up.sh ${nginx_biz_1_ip} ${remote_ip} ${port}
/data/script/nginx/xlm-remote-nginx-reload.sh ${nginx_biz_1_ip}
echo "nginx_biz_2服务上线"
/data/script/nginx/xlm-service-up.sh ${nginx_biz_2_ip} ${remote_ip} ${port}
/data/script/nginx/xlm-remote-nginx-reload.sh ${nginx_biz_2_ip}

nacos发布期间优雅上下线

1、配置nacos上下线脚本

vim nacos-service-update.py 
import json
import requests
import sys# 目标URL
url = 'http://nacos地址:8848/nacos/v2/ns/instance'# PUT请求的数据
service_name=sys.argv[1]
ip=sys.argv[2]
port=sys.argv[3]
weight=sys.argv[4]
namespace_id=sys.argv[5]
data = {'serviceName': service_name,'ip':ip,'port':port,"weight":weight,"ephemeral":"true","namespaceId":namespace_id}# 发送PUT请求
response = requests.put(url, data=data)# 输出响应内容
print(response.text)
json_data=json.loads(response.text)
print(json_data)
response_code=json_data["code"]
if response_code != 0:# 抛出一个常规的ValueError异常raise ValueError("下线异常")
if weight=="0":print("服务:{} ip:{} 下线成功".format(service_name,ip))
else:print("服务:{} ip:{} 上线成功".format(service_name,ip))

2、配置jenkins发布上下线

mvn clean package -U -DskipTests=true
remote_ip=service-ip
service_name=service-name
port=8085
#设置下线权重0
down_weight=0
#设置上线权重1
up_weight=1
#设置namespaceID
namespaceId=namespaceId
rsync -av --progress  service-name/target/service-name.jar  root@${remote_ip}:/data/jenkins/package/
#nacos服务下线
python3 /usr/local/script/nacos-service-update.py ${service_name} ${remote_ip} ${port} ${down_weight} ${namespaceId}
sleep 35
ssh root@${remote_ip} "source /etc/profile && /data/service-name/service-name-release.sh"
echo "-------------等待启动-------------"
sleep 40
#check health
python3 /data/script/check-health.py ${remote_ip} ${port} ${service_name}
#nacos服务上线
python3 /data/script/nacos-service-update.py ${service_name} ${remote_ip} ${port} ${up_weight} ${namespaceId}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

维修保养记录接口-维修保养记录API-汽车接口

维修保养记录接口的使用主要涉及到API对接和在线查询两种方式。以下是详细的使用步骤和注意事项: 一、API对接 注册与申请: 首先,你需要在提供维修保养记录接口的平台(如挖数据平台、第三方数据服务商等)进行注册&…

CORDIC算法笔记整理

CORDIC算法有两种模式,分别为旋转模式和向量模式。而在数字硬件实现混频处理时,CORDIC算法是比较好的方法,使用的是CORDIC的旋转模式,只需通过移位操作和加法就可以实现频谱搬移的乘法操作。 1 CORDIC算法理解 1.1 单次旋转 对…

SpringCloud学习记录|day1

学习材料 2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 学redis讲到微服务就停了,nginx也是。 所以嘛,我终于来到微服务了。 复习MyBatisP…

CMU 10423 Generative AI:lec14(Vision Language Model:CLIP、VQ-VAE)

文章目录 1 概述2 CLIP (Used in GPT-V)3 VQ-VAE (Used in Gemini)**VQ-VAE 详细笔记****VQ-VAE 的模块组成与数据流** **1. 输入数据****2. 编码器(Encoder)****2.1 编码器的作用****2.2 数据流与维度变化****2.3 编码器输出** **3. 量化器(…

Go基础学习09-多协程资源竞争、sync.Mutex、sync.Cond、chan在多协程对共享变量的资源竞争中的使用

文章目录 Go中协程基础小记协程基础为什么需要多协程多协程面临的问题 代码演示存在共享变量的资源竞争Mutex解决资源竞争Mutex基本介绍代码演示 MutexCond解决资源竞争和CPU空转Cond条件变量讲解代码演示代码片段关于wait和for循环的解释说明条件变量Signal方法和Broadcast方法…

C++七种异常处理

在C++中,使用异常机制可以提高程序的健壮性和可维护性。异常是在程序运行时发生的一个事件,它会打断正在执行的程序的正常流程。C++异常处理机制可以使程序在出现异常时,进行异常处理,而不是退出程序。 基本的异常处理 #include <iostream> using namespace std;int …

IP 数据包分包组包

为什么要分包 由于数据链路层MTU的限制,对于较⼤的IP数据包要进⾏分包. 什么是MTU MTU相当于发快递时对包裹尺⼨的限制.这个限制是不同的数据链路对应的物理层,产⽣的限制. • 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填 充…

云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展

本文根据2024云栖大会实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a; 王 峰 | 阿里云智能集团研究员、开源大数据平台负责人 李 钰&#xff5c;阿里云智能集团资深技术专家 范 振&#xff5c;阿里云智能集团高级技术专家 李劲松&#xff5c;阿里云…

[论文笔记] LLaMA3.2

https://github.com/meta-llama/llama-stack [2407.21783] The Llama 3 Herd of Models Meta 部落格資訊:https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/HuggingFace:

【Kubernetes】常见面试题汇总(五十)

目录 112.考虑一个公司要向具有各种环境的客户提供所有必需的分发产品的方案。您如何看待他们如何动态地实现这一关键目标&#xff1f; 113.假设一家公司希望在从裸机到公共云的不同云基础架构上运行各种工作负载。在存在不同接口的情况下&#xff0c;公司将如何实现这一目标&…

MongoDB聚合操作及索引底层原理

目录 链接:https://note.youdao.com/ynoteshare/index.html?id=50fdb657a9b06950fa255a82555b44a6&type=note&_time=1727951783296 本节课的内容: 聚合操作: 聚合管道操作: ​编辑 $match 进行文档筛选 ​编辑 将筛选和投影结合使用: ​编辑 多条件匹配: …

Solidity智能合约中的事件和日志

1. Solidity 中的事件和日志概述 1.1 什么是事件&#xff1f; 在 Solidity 中&#xff0c;事件&#xff08;Event&#xff09;是一种允许智能合约与外部世界进行通信的机制。通过触发事件&#xff0c;可以记录合约执行中的关键操作&#xff0c;并将这些操作发送到链上。事件的…

魔改xjar支持springboot3,

jar包加密方案xjar, 不支持springboot3。这个发个魔改文章希望大家支持 最近公司需要将项目部署在第三方服务器&#xff0c;于是就有了jar包加密的需求&#xff0c;了解了下目前加密方案现况如下: 混淆方案&#xff0c;就是在代码中添加大量伪代码&#xff0c;以便隐藏业务代…

常见电脑品牌BIOS设置与进入启动项快捷键

常见电脑品牌BIOS与引导项快捷键速查表 | 电脑品牌 | BIOS快捷键 | 引导项快捷键 | 备注 ||------------|------------|--------------|------------------------------ || 联想 | F2/F1 | F12 | 笔记本通常为F2&#xff0c;台式机通常为F1 || IBM/ThinkPad | F1 | 未知 | ||…

【AI】AIOT简介

随着技术的快速发展&#xff0c;人工智能AI和物联网IoT已经成为当今最热门的技术领域。AIOT是人工智能和物联网的结合&#xff0c;使物联网设备更加智能化&#xff0c;能够进行自主决策和学习的技术。 通过物联网产生、收集来自不同维度的、海量的数据存储于云端、边缘端&#…

Ubuntu上安装Git:简单步骤指南

Git是目前世界上最流行的版本控制系统&#xff0c;广泛用于软件开发中。无论你是开发者还是版本控制的新手&#xff0c;Git都是你不可或缺的工具。本文将为你介绍如何在Ubuntu操作系统上安装Git。 什么是Git&#xff1f; Git是一个开源的分布式版本控制系统&#xff0c;由Lin…

数据治理006-数据标准的管理

元数据的分类和标准有哪些&#xff1f; 一、元数据的分类 元数据可以根据其描述的对象和属性不同&#xff0c;被分为不同的类型。以下是几种常见的元数据分类方法&#xff1a; 基于数据的类型&#xff1a;根据数据的类型&#xff0c;元数据可以被分为结构化元数据、非结构化元…

SQL连接Python

对于运营部门的Yoyo来说&#xff0c;她想要知道夜曲优选的订单都来自哪些省份&#xff0c;每个省份的总订单数以及总订单金额分别是多少。 这时小鹿就会通过SQL对连接的数据库进行查询&#xff0c;再将结果传递给Python处理&#xff0c;并帮助Yoyo生成可视化图表。 我们先来快…

拆解维修飞科剃须刀

原因 用了好几年的剃须刀&#xff0c;经过一次更换电池。后来上面的盖帽松动&#xff0c;无法合盖&#xff0c;经过把弹片矫正后修复。最近一次”大力出奇迹“的操作直接断送了这个老伤员最后的可能性。最终只能花了将近十块大洋买了一套盖着和中间座。简单更换了一下。 记录…

单元测试进阶-Mock使用和插桩

目录 一、基本概念 1、Mock 2、插桩&#xff08;Sutbbing&#xff09; 二、参考文章 一、基本概念 1、Mock Mock的作用就是不直接new对象&#xff0c;而是使用Mock方法或者注解Mock一个对象。 这个对象他不是new创建的对象&#xff0c;Mock对该对象的一些成员变量和方法…