使用Jenkins构建部署应用至仅可VPN访问本地服务器的可行性咨询
结论
完全可行,Jenkins本身不感知底层网络的实现逻辑,不存在功能层面的限制。只要运行Jenkins服务的宿主机器能通过VPN正常访问目标On-Premise服务器,就能跑通从构建到部署的全流程,全程不需要公网访问也能正常运行。
配置核心要点
- 先搞定宿主层面的网络连通:不要在Jenkins的流水线或者应用配置里折腾VPN连接,直接在Jenkins所在的操作系统层面完成VPN接入、路由规则配置。配置完成后,直接在宿主的命令行里用
ping、ssh、curl等工具验证,确认能正常访问目标本地服务器的所有需要用到的端口(比如SSH的22端口、K8s API端口、业务服务端口、内网制品库端口等),这一步是整个流程的核心,和Jenkins本身没有关系。 - 适配Jenkins的运行模式:如果Jenkins是以系统服务形式运行(Linux下的systemd服务、Windows下的后台服务),确认服务运行账号有权限访问VPN生成的虚拟网卡、读取系统路由表;如果是用Docker等容器方式运行Jenkins,必须把容器网络模式设置为
host,否则容器会使用独立的网络命名空间,无法复用宿主的VPN路由,直接导致内网连通失败。 - 流水线无特殊适配要求:网络通了之后,构建部署流水线的写法和公网部署没有任何区别,常用的SSH发布、Ansible编排、K8s发布等插件都可以正常使用,只需要把目标地址配置为VPN可达的内网IP/内网域名即可,不需要给插件做额外的特殊配置。
常见踩坑说明
- 不要在Jenkins流水线脚本里执行VPN拨号操作:绝大多数VPN客户端拨号时需要修改系统全局路由,流水线子进程要么没有足够的系统权限修改路由,要么拨号后会打乱Jenkins本身的节点通信、Web界面访问的路由规则,稳定性极差,VPN连接一定要在宿主层面配置为开机自动连接、异常自动重连。
- 注意VPN分流配置的影响:很多商用VPN客户端默认使用分流模式,仅代理浏览器等指定应用的流量,不会把命令行、系统服务的流量转发到VPN隧道,需要手动配置目标内网网段的静态路由,或者开启VPN的全局路由模式,确保系统层面所有到目标内网的流量都走VPN隧道。
- 纯离线场景提前准备依赖:如果整个使用过程完全不需要访问公网,提前把Jenkins运行需要的插件、构建用到的依赖(比如JDK、Node.js等运行时,Maven/npm的依赖包、容器基础镜像等)都离线导入到Jenkins服务器,不要配置公网更新源,避免构建过程中拉取外部资源失败。
内容的提问来源于stack exchange,提问作者DevD
相关产品推荐
相关产品推荐

