内网 Jenkins 公网访问与自动化部署实操:基于内网穿透的落地方案

· 运维技术教程

大家好,我是常年跟内网服务打交道的开发运维人员,今天就跟大家分享一个工作里常碰到的情况——怎么让内网里的 Jenkins 能被公网访问,以及用内网穿透技术完成自动化部署的整套具体方法。

平时做开发的时候,很多团队都会把 Jenkins 装在内网服务器上,这样既能保证服务安全、避免直接暴露在公网的各种风险,还能节省公网 IP 资源,但这种做法也会带来明显麻烦,异地开发的人没法远程触发项目构建,出门在外也看不了部署进度,就连代码提交后自动构建的功能,也会被内网环境限制,导致持续集成没法发挥真正作用。

有人可能会说直接给 Jenkins 服务器分配一个公网 IP 就行,但实际工作里很多企业的内网受网络架构限制拿不到公网 IP,还有些时候路由器管理权不在自己手里没法做端口映射,这时候轻量好用的内网穿透工具就是最省心的选择,不用对现有网络做复杂改动,就能轻松打通内网和公网的阻隔,同时完成 Jenkins 自动化部署的全流程。

这篇文章全程讲的都是实操步骤,没有多余的理论内容,包括环境准备、内网穿透配置、Jenkins 基础设置、自动化部署配置和常见问题解决办法,不管是刚接触开发运维的新手还是有经验的老员工,都能拿来用或者参考着优化自己现有的方案。

一、实操前提与环境准备

开始操作前我们得提前准备好基础环境,这样才能保证每一步都能顺利进行,不会因为缺少环境导致操作卡壳。

  1. 内网服务器:这篇文章用 CentOS 7 系统做演示,服务器配置建议至少要有 2 核 4G 内存和 100G 硬盘,这样才能顺畅运行 Jenkins 和内网穿透工具,小型团队(10-20 人)用这个配置就足够,中型团队可以把配置升到 4 核 8G 内存。
  2. 基础依赖:Jenkins 运行需要 Java 环境,所以得提前装 JDK(推荐 11 版本,防止版本太低导致插件用不了),装完之后用 java -version 命令就能验证是否装成功,同时要保证服务器能访问外网,这样才能下载 Jenkins 安装包、相关插件和内网穿透工具。
  3. 内网穿透工具:这篇文章用 cpolar 做穿透工具,它不用公网 IP、不用配置路由器,既轻量又好安装,支持 HTTP 和 HTTPS 两种协议,免费版能满足个人和小型团队的基本使用需求,付费版可以用固定公网地址,更适合长期使用。
  4. 代码仓库:准备好要部署的项目代码(这篇文章以 Git 仓库为例,GitHub、Gitee、GitLab 都能用),确保项目能正常编译和打包,同时提前理清楚项目的构建和部署步骤。

二、内网 Jenkins 部署与基础配置

首先我们要完成内网 Jenkins 的安装和基础设置,这是后面实现公网访问和自动化部署的基础,步骤很简单,跟着做就能完成。

第一步安装 Jenkins:CentOS 7 系统可以通过仓库方式安装,先添加 Jenkins 仓库配置、导入相关密钥,再执行安装命令,装完之后设置开机自动启动并启动服务,具体命令如下:

添加仓库配置:sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

导入密钥:sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

安装 Jenkins:sudo yum install -y jenkins

启动并设置开机自启:sudo systemctl start jenkins && sudo systemctl enable jenkins

启动后用 systemctl status jenkins 命令查看服务运行情况,显示 running 就说明服务正常启动了。

第二步解锁 Jenkins 并完成初始设置:Jenkins 默认监听 8080 端口,在同一内网里用内网 IP 加 8080 端口就能访问 Jenkins 页面,第一次访问会提示输入初始管理员密码。

用 sudo cat /var/lib/jenkins/secrets/initialAdminPassword 这个命令就能看到初始密码,复制密码输入页面后点击继续即可。

接下来选择“安装推荐的插件”,等插件装完(这个过程要几分钟,具体看网络快慢),再创建管理员账号(用户名、密码和邮箱要记好),做完这些就能进入 Jenkins 主界面了。

第三步安装核心插件:进入 Jenkins 主界面后点击“系统管理”再点击“插件管理”,搜索并安装几个核心插件用来后续的自动化部署,分别是 Pipeline(用来创建 CI/CD 流水线)、Git(支持 Git 代码仓库)、Maven Integration(支持 Maven 项目构建)和 Docker Pipeline(支持容器化部署,可根据项目需要选择装不装)。

插件装完后重启 Jenkins 服务(sudo systemctl restart jenkins),确保插件能正常使用。

第四步全局工具配置:进入“系统管理”再点击“全局工具配置”,分别设置 JDK、Git 和 Maven(如果需要的话),其中 JDK 和 Maven 要取消“自动安装”,填写服务器上对应的实际安装路径,Git 填写默认安装路径(一般是 /usr/bin/git),设置完保存就行。

三、内网穿透配置:实现 Jenkins 公网访问

Jenkins 装完后现在只能在内网访问,接下来我们用 cpolar 内网穿透工具,把内网的 Jenkins 映射到公网,这样就能异地远程访问和操作了。

第一步安装 cpolar:在装 Jenkins 的内网服务器上,用一键脚本就能安装 cpolar

装完之后把 cpolar 添加到系统服务并设置开机自启,这样服务器重启后穿透服务也能自动运行,命令是:sudo systemctl enable cpolar && sudo systemctl start cpolar

启动后用 systemctl status cpolar 命令查看服务运行情况,确保服务正常启动。

第二步配置 cpolar 隧道:cpolar 装完后默认监听 9200 端口,在同一内网里用内网 IP 加 9200 端口访问 cpolar 管理界面,用 cpolar 账号登录(没有账号先注册)。

登录后点击左侧“隧道管理”再点击“创建隧道”,按照以下要求设置:

隧道名称可以自己随便设(比如 jenkins-public-access),方便后面管理且不会和其他隧道弄混;

协议选择 HTTP,默认会生成 HTTP 和 HTTPS 两个公网地址,不用额外配置 SSL 证书;

本地地址填写 8080,这是 Jenkins 的默认监听端口;

域名类型方面,免费版选“随机域名”,付费版可以选“二级子域名”生成固定公网地址,方便长期使用;

地区选择“China vip”,保证访问速度。

设置完点击“创建”,隧道就成功创建好了。

第三步获取公网访问地址:点击左侧“状态”再点击“在线隧道列表”,就能看到刚才创建的隧道对应的公网地址(有 HTTP 和 HTTPS 两种),复制任意一个地址在浏览器里访问,能成功进入 Jenkins 登录界面就说明公网访问配置好了。

提示:免费版的随机公网地址会在 24 小时内随机变化,要是需要长期稳定访问,可以升级 cpolar 套餐,设置固定二级子域名后修改隧道配置就能生效。

第四步调整 Jenkins 地址配置:为了避免公网访问时出现路径错误,要修改 Jenkins 的访问 URL,进入 Jenkins 主界面点击“系统管理”再点击“系统设置”,找到“Jenkins 位置”后把“Jenkins URL”改成刚才获取的 cpolar 公网地址,保存设置后重启 Jenkins 服务,确保配置生效。

四、Jenkins 自动化部署配置(实操落地)

实现公网访问后,我们接下来配置 Jenkins 自动化部署,让代码提交后能自动触发构建和部署,彻底不用手动操作,提高交付效率,这篇文章以 Git 仓库加 Maven 项目为例讲解完整配置步骤,其他类型项目可以参考这个步骤调整。

第一步配置代码仓库凭证:进入 Jenkins 主界面点击“系统管理”“管理凭证”再点击“添加凭证”,选择“Username with password”类型,填写 Git 仓库的用户名和密码(或令牌),ID 可以自己设,描述填写仓库名称,保存凭证后用来让 Jenkins 拉取代码。

第二步创建 Jenkins 项目:点击 Jenkins 主界面“新建任务”,输入任务名称(比如 test-project-auto-deploy),选择“流水线”后点击“确定”。

第三步配置项目基础信息:在项目配置页面找到“General”选项,可根据实际需要填写项目描述,要是需要定时构建就勾选“定时构建”,设置好定时规则(比如每天凌晨 2 点构建,表达式为 0 2 *)。

第四步配置代码拉取:找到“流水线”选项并选择“Pipeline script from SCM”,SCM 选择“Git”,填写公网能访问的 Git 仓库地址(如果 Git 仓库也在内网,可通过 cpolar 穿透获取公网地址),选择之前配置的凭证并指定要构建的分支(比如 main 分支)。

第五步编写流水线脚本(核心步骤):在“Script Path”中填写 Jenkinsfile(可以在代码仓库根目录创建这个文件,也能直接在页面编写),流水线脚本用来定义构建、测试和部署的全流程,下面是基础示例(可根据项目实际需要修改):

pipeline {

    agent any

    tools {

        maven 'maven-3.6.3' // 对应全局工具配置的 Maven 名称

        jdk 'jdk-11' // 对应全局工具配置的 JDK 名称

    }

    stages {

        stage('拉取代码') {

            steps {

                checkout scm // 自动拉取配置的 Git 仓库代码

            }

        }

        stage('编译打包') {

            steps {

                sh 'mvn clean package -DskipTests' // Maven 编译打包,跳过测试

            }

        }

        stage('部署到内网服务器') {

            steps {

                // 这里填写部署命令,比如复制打包后的 jar 包到指定目录,重启服务

                sh 'cp target/test-project-1.0.0.jar /usr/local/project/'

                sh 'systemctl restart test-project' // 假设项目已配置系统服务

            }

        }

    }

    post {

        success {

            echo '自动化部署成功!'

 }

        failure {

            echo '自动化部署失败,请检查日志!'

        }

    }

}

第六步配置触发条件:要实现代码提交后自动触发构建,找到“构建触发器”选项,勾选“GitHub hook trigger for GITScm polling”(如果用 GitHub)或“Gitee 触发器”(如果用 Gitee),根据代码仓库类型配置对应的 webhook。

以 Gitee 为例,进入 Gitee 仓库点击“管理”“WebHook”再点击“添加 WebHook”,Payload URL 填写 Jenkins 公网地址加 /gitee-project/notify(需要安装 Gitee 插件),密钥可以自己设,保存后只要代码提交到指定分支,就会自动触发 Jenkins 构建。

第七步测试自动化部署:修改代码仓库里的代码并提交,观察 Jenkins 后台,要是能自动触发构建且构建日志显示“自动化部署成功”,就说明配置生效了,同时也能通过公网地址访问 Jenkins,查看构建详情和部署状态。

五、常见问题排查(避坑指南)

实操的时候难免会遇到一些问题,这里整理了几个常见问题和解决办法,帮大家快速避开坑。

  1. 公网访问 Jenkins 失败:先检查 cpolar 服务是否正常运行,要是服务有问题重启 cpolar 就行,再检查隧道配置是否正确,确认本地地址是 8080 端口且地区选择没错,最后检查服务器防火墙是否放开 8080 端口和 9200 端口,用 firewall-cmd 命令开放端口并刷新配置即可。
  2. Jenkins 拉取不到 Git 代码:检查凭证配置是否正确,确认用户名、密码或令牌没有错,再检查 Git 仓库地址是否准确,要是仓库在内网要确保已经通过内网穿透实现公网访问,同时用 git clone 命令测试服务器能不能正常访问 Git 仓库。
  3. 自动化构建失败:查看 Jenkins 构建日志就能找到失败原因,常见的有依赖缺失(需要在流水线脚本里添加依赖安装命令)、打包命令错误(检查 Maven 命令是否正确)和部署命令错误(检查服务重启命令、文件路径是否准确)。
  4. 公网地址经常变化:免费版 cpolar 的随机域名每 24 小时会变一次,要是需要稳定访问,升级套餐后设置固定二级子域名,修改 cpolar 隧道配置就能解决。
  5. Jenkins 访问卡顿:检查服务器内存是否足够,要是内存不够可以升级服务器配置或关掉不用的服务,同时检查 cpolar 隧道带宽,免费版带宽有限,访问量大的话可以升级套餐提高带宽。

六、总结与优化建议

这篇文章用 cpolar 内网穿透工具,成功实现了内网 Jenkins 的公网访问,同时完成了自动化部署的全流程配置,整个方案不用对现有网络做复杂改动,上手简单,适合大多数中小企业和开发团队使用。

从实操效果来看,这个方案彻底解决了内网 Jenkins 不能被公网访问的问题,实现了异地远程管理和代码提交自动部署,大大提高了开发交付效率,减少了手动操作带来的失误。

最后给大家几个优化建议,让这个方案更稳定、更安全:

  1. 安全优化:Jenkins 公网访问可以开启权限控制,只允许指定 IP 访问,cpolar 也能设置身份认证防止未授权访问,同时要定期更新 Jenkins 和 cpolar 版本,修复已知的安全漏洞。
  2. 稳定性优化:用 cpolar 设置固定公网地址保证访问稳定,Jenkins 可以配置分布式构建提高大型项目的构建速度,还要定期备份 Jenkins 配置和构建日志,避免数据丢失。
  3. 流程优化:根据项目需要扩展流水线脚本,添加自动化测试、版本回滚等步骤,同时集成钉钉、企业微信通知功能,让构建和部署结果能及时推送,方便快速处理问题。