不懂就问,这个公司没有运维,目前项目采用的是集群的方式部署,搭了一套 jenkins 自动打包部署到服务器,但是每次都得人为的在 Nginx 的负载均衡配置里把当前自动部署的这台服务器的地址注释掉,全部部署好了之后再全部取消注释,有没有什么办法把 nginx 这一步也自动化呀?
真心求解
1
dier 2022-03-11 09:29:15 +08:00 1
jenkins 里面也可以写执行命令,你先通过命令行的方式把注释的操作写成脚本,然后在 jenkins 发布的时候执行就可以了
|
2
d0m2o08 2022-03-11 09:29:21 +08:00 2
jenkins 可以调用 ansible 去操作 nginx
|
3
oneisall8955 2022-03-11 09:30:05 +08:00 via Android 1
不懂就问,部署启动也很快呀,为啥要注释再取消注释这一步?执行 nginx reload ?
------ 如果要这样,jenkins 写 shell ,sed 匹配替换? |
4
ijse 2022-03-11 09:33:42 +08:00 1
可以分组,把其中一组标记为 backup, 这样两组先后部署就可以保持服务不间断
|
5
Judoon 2022-03-11 09:34:07 +08:00 1
nginx 没有健康检查吗?
部署的时候应用挂了就不会转流量进来啊 |
6
cheng6563 2022-03-11 09:34:41 +08:00 1
写脚本呗
先在 nginx 配置文件的 server 后面打个注释标记,比如这样: server 192.168.1.10:8080; # __serv0__ 脚本如下: tag='__serv0__' file='/etc/nginx/nginx.conf' sed -i -E 's/(.+'"$tag"'.*)/#\1/g' $file 可以在标记行最前面插入注释 sed -i -E 's/#+(.+'"$tag"'.*)/\1/g' $file 可以取消最前面的注释 |
7
beetlerx 2022-03-11 09:35:09 +08:00 2
用 nginx health check 插件啊
|
8
defunct9 2022-03-11 09:41:21 +08:00
why 注释,没道理。jenkins 不关 nginx 的事啊
|
9
Illusionary 2022-03-11 09:44:40 +08:00
招个运维,上 K8s
|
10
liuhuansir 2022-03-11 09:46:04 +08:00 1
你们公司运维都没有,却有服务不中断的要求。。。何况自动部署中断的时间很短吧
|
11
cais 2022-03-11 09:49:22 +08:00 1
为什么需要注释掉启动的那台机器呢? 没看懂,如果考虑服务访问不到 完全不用担心,nginx 负载会自动转到其他服务器上的
|
12
lyusantu OP |
13
lyusantu OP @liuhuansir
@cais nginx 没有健康检查以及配置 backup ,所以在部署项目的时候,为了避免在部署中无法正常响应请求,所以人为的注释掉了 不过这完全是因为为我这方面能力不达标,所以才会产生此种问题,才会在此请教各位 |
14
lx0758 2022-03-11 11:31:01 +08:00
nginx health | traefik
docker swarm k8s |
15
pckillers 2022-03-11 12:26:38 +08:00
把操作 nginx 的部分也写进 jenkins 不就解决了。sed 一下配置文件,再 nginx -reload 。
|
16
sampeng 2022-03-11 14:06:22 +08:00 via iPhone
换个网关…比如 kong ,内核也是 nginx 。但可以通过 api 的方式控制
|
19
litchinn 2022-03-11 17:37:09 +08:00
纯 nginx lb ,没有用注册中心+网关吗,感觉网关才是解决这种需求的正经方案呢
|
20
cco 2022-03-11 17:56:46 +08:00
写个脚本,jenkins 任务执行的时候调用一下就行。执行完在调用一次。比较笨的办法。
|
21
thrallchen 2022-03-11 17:57:03 +08:00
用 k8s ,rancher 操作 k8s 很简单,升级策略设置为新 pod 启动后再停止旧 pod ,就可以不中断服务
|