You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Jenkins在同一端口部署两个Jar包(微服务最佳实践)

嘿,针对你在微服务架构下想通过Jenkins在同一端口部署两个Jar包的需求,完全不用非得转War包塞进Tomcat,这里有几个更贴合微服务场景的最优方案,我给你详细拆解下:

方案1:反向代理(Nginx/Traefik)—— 中小规模微服务首选

这是微服务场景里最常用的轻量方案,核心思路是让两个Jar包各自以不同端口启动,再用反向代理工具监听你想要的统一端口,通过请求路径/域名来转发流量到对应服务。

举个Nginx的配置例子,假设你要对外暴露80端口:

server {
    listen 80;
    server_name your-app-domain.com;

    # 匹配/service1开头的请求,转发到第一个Jar服务
    location /service1/ {
        proxy_pass http://localhost:8081/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 匹配/service2开头的请求,转发到第二个Jar服务
    location /service2/ {
        proxy_pass http://localhost:8082/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Jenkins这边的配合方式:

  • 每个Jar包的构建任务里,启动命令指定专属端口,比如 java -jar service1.jar --server.port=8081
  • 部署时用进程管理工具(比如systemd)维护服务,避免进程崩溃后无人重启,示例systemd配置:
[Unit]
Description=Service1 Application
After=network.target

[Service]
User=jenkins
ExecStart=/usr/bin/java -jar /opt/deploy/service1.jar --server.port=8081
Restart=always

[Install]
WantedBy=multi-user.target
方案2:Spring Cloud Gateway(Spring技术栈专属)

如果你的微服务都是基于Spring Boot开发的,用Spring Cloud Gateway会更贴合技术栈——它本身就是一个Spring Boot应用,专门做微服务路由。

只需要单独部署一个Gateway服务,监听统一端口(比如80),然后在它的配置文件里定义路由规则:

spring:
  cloud:
    gateway:
      routes:
        - id: service1_route
          uri: http://localhost:8081
          predicates:
            - Path=/service1/**
        - id: service2_route
          uri: http://localhost:8082
          predicates:
            - Path=/service2/**

Jenkins只需要负责构建两个业务Jar包,启动各自的服务,再启动Gateway即可。后续如果新增服务,只需要修改Gateway的路由配置,非常灵活。

方案3:服务网格(Istio/Linkerd)—— 大规模集群最佳实践

如果你的微服务集群规模较大,需要流量监控、熔断、限流、灰度发布等高级功能,服务网格是更专业的选择。

它的逻辑是:两个Jar服务以容器化方式部署(比如K8s),通过服务网格的Ingress Gateway暴露统一端口,再用VirtualService配置路由规则,把不同请求转发到对应服务。Jenkins的工作则聚焦在构建镜像、推送镜像、部署到K8s集群,流量转发全由服务网格接管。

微服务场景的最佳实践总结
  1. 中小规模团队优先选反向代理或Spring Cloud Gateway,轻量易维护,学习成本低
  2. 大规模微服务集群直接上服务网格,能解决复杂的流量治理问题
  3. 不管用哪种方案,都要给每个Jar服务配置进程管理工具(systemd/supervisord),保证服务异常自动重启
  4. Jenkins构建时最好加入健康检查步骤,比如调用服务的/actuator/health接口,确保服务启动正常后再完成部署

内容的提问来源于stack exchange,提问作者Jona072b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:01:20