
不懂就问,这个公司没有运维,目前项目采用的是集群的方式部署,搭了一套 jenkins 自动打包部署到服务器,但是每次都得人为的在 Nginx 的负载均衡配置里把当前自动部署的这台服务器的地址注释掉,全部部署好了之后再全部取消注释,有没有什么办法把 nginx 这一步也自动化呀?
真心求解
1 dier 2022-03-11 09:29:15 +08:00 jenkins 里面也可以写执行命令,你先通过命令行的方式把注释的操作写成脚本,然后在 jenkins 发布的时候执行就可以了 |
2 d0m2o08 2022-03-11 09:29:21 +08:00 jenkins 可以调用 ansible 去操作 nginx |
3 itechify PRO 不懂就问,部署启动也很快呀,为啥要注释再取消注释这一步?执行 nginx reload ? ------ 如果要这样,jenkins 写 shell ,sed 匹配替换? |
4 ijse 2022-03-11 09:33:42 +08:00 可以分组,把其中一组标记为 backup, 这样两组先后部署就可以保持服务不间断 |
5 Judoon 2022-03-11 09:34:07 +08:00 nginx 没有健康检查吗? 部署的时候应用挂了就不会转流量进来啊 |
6 cheng6563 2022-03-11 09:34:41 +08:00 写脚本呗 先在 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 用 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 你们公司运维都没有,却有服务不中断的要求。。。何况自动部署中断的时间很短吧 |
11 cais 2022-03-11 09:49:22 +08:00 为什么需要注释掉启动的那台机器呢? 没看懂,如果考虑服务访问不到 完全不用担心,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 ,就可以不中断服务 |