V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lyusantu
V2EX  ›  程序员

不懂就问 关于 Jenkins 自动部署项目后的疑问

  •  
  •   lyusantu · 2022-03-11 09:21:16 +08:00 · 3361 次点击
    这是一个创建于 1014 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不懂就问,这个公司没有运维,目前项目采用的是集群的方式部署,搭了一套 jenkins 自动打包部署到服务器,但是每次都得人为的在 Nginx 的负载均衡配置里把当前自动部署的这台服务器的地址注释掉,全部部署好了之后再全部取消注释,有没有什么办法把 nginx 这一步也自动化呀?

    真心求解

    第 1 条附言  ·  2022-03-11 10:02:55 +08:00
    感谢各位指导,我参考然后实践一下大家给出的建议,结贴了各位
    21 条回复    2022-03-11 17:57:03 +08:00
    dier
        1
    dier  
       2022-03-11 09:29:15 +08:00   ❤️ 1
    jenkins 里面也可以写执行命令,你先通过命令行的方式把注释的操作写成脚本,然后在 jenkins 发布的时候执行就可以了
    d0m2o08
        2
    d0m2o08  
       2022-03-11 09:29:21 +08:00   ❤️ 2
    jenkins 可以调用 ansible 去操作 nginx
    oneisall8955
        3
    oneisall8955  
       2022-03-11 09:30:05 +08:00 via Android   ❤️ 1
    不懂就问,部署启动也很快呀,为啥要注释再取消注释这一步?执行 nginx reload ?
    ------
    如果要这样,jenkins 写 shell ,sed 匹配替换?
    ijse
        4
    ijse  
       2022-03-11 09:33:42 +08:00   ❤️ 1
    可以分组,把其中一组标记为 backup, 这样两组先后部署就可以保持服务不间断
    Judoon
        5
    Judoon  
       2022-03-11 09:34:07 +08:00   ❤️ 1
    nginx 没有健康检查吗?
    部署的时候应用挂了就不会转流量进来啊
    cheng6563
        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
    可以取消最前面的注释
    beetlerx
        7
    beetlerx  
       2022-03-11 09:35:09 +08:00   ❤️ 2
    用 nginx health check 插件啊
    defunct9
        8
    defunct9  
       2022-03-11 09:41:21 +08:00
    why 注释,没道理。jenkins 不关 nginx 的事啊
    Illusionary
        9
    Illusionary  
       2022-03-11 09:44:40 +08:00
    招个运维,上 K8s
    liuhuansir
        10
    liuhuansir  
       2022-03-11 09:46:04 +08:00   ❤️ 1
    你们公司运维都没有,却有服务不中断的要求。。。何况自动部署中断的时间很短吧
    cais
        11
    cais  
       2022-03-11 09:49:22 +08:00   ❤️ 1
    为什么需要注释掉启动的那台机器呢? 没看懂,如果考虑服务访问不到 完全不用担心,nginx 负载会自动转到其他服务器上的
    lyusantu
        12
    lyusantu  
    OP
       2022-03-11 09:55:43 +08:00
    @dier @dier get 到了,Send Build artifacts over SSH 可以添加多个 server 和 Transfers Set ,之前没注意
    lyusantu
        13
    lyusantu  
    OP
       2022-03-11 10:01:27 +08:00
    @liuhuansir
    @cais nginx 没有健康检查以及配置 backup ,所以在部署项目的时候,为了避免在部署中无法正常响应请求,所以人为的注释掉了

    不过这完全是因为为我这方面能力不达标,所以才会产生此种问题,才会在此请教各位
    lx0758
        14
    lx0758  
       2022-03-11 11:31:01 +08:00
    nginx health | traefik
    docker swarm
    k8s
    pckillers
        15
    pckillers  
       2022-03-11 12:26:38 +08:00
    把操作 nginx 的部分也写进 jenkins 不就解决了。sed 一下配置文件,再 nginx -reload 。
    sampeng
        16
    sampeng  
       2022-03-11 14:06:22 +08:00 via iPhone
    换个网关…比如 kong ,内核也是 nginx 。但可以通过 api 的方式控制
    dany813
        17
    dany813  
       2022-03-11 14:58:23 +08:00
    @sampeng kong 关注好久了,好用吗
    sampeng
        18
    sampeng  
       2022-03-11 15:48:51 +08:00 via iPhone
    @dany813 基本够用
    litchinn
        19
    litchinn  
       2022-03-11 17:37:09 +08:00
    纯 nginx lb ,没有用注册中心+网关吗,感觉网关才是解决这种需求的正经方案呢
    cco
        20
    cco  
       2022-03-11 17:56:46 +08:00
    写个脚本,jenkins 任务执行的时候调用一下就行。执行完在调用一次。比较笨的办法。
    thrallchen
        21
    thrallchen  
       2022-03-11 17:57:03 +08:00
    用 k8s ,rancher 操作 k8s 很简单,升级策略设置为新 pod 启动后再停止旧 pod ,就可以不中断服务
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:41 · PVG 13:41 · LAX 21:41 · JFK 00:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.