如何在Jenkins中通过VPN拉取/克隆需VPN访问的GitLab代码仓库?
Jenkins通过VPN Access Manager连接GitLab配置指南
前置准备
- 确认Jenkins构建任务运行的节点(主节点/对应从节点)已安装「VPN Access Manager」客户端,手动测试拨号后可以正常ping通GitLab的内网IP/域名、访问GitLab服务
- 确认VPN账号、证书等凭证有效,无频繁过期、多设备登录限制
- 准备好GitLab代码拉取凭证(SSH密钥/访问令牌/账号密码),VPN连通状态下可在节点本地正常克隆、拉取目标仓库
方案1:节点常驻VPN连接(最稳定,优先推荐)
- 切换到Jenkins进程的运行用户操作,禁止使用root或个人用户配置VPN,否则配置不会对Jenkins生效
- 打开VPN Access Manager客户端,配置对应VPN连接的开机自启、断线自动重连规则,将拨号凭证保存到系统凭证管理器,避免手动输入验证信息
- 拨号成功后在Jenkins用户下执行连通性校验:
访问web接口验证连通性:curl -v <你的GitLab服务地址>
SSH协议拉取需额外验证:ssh -T git@<你的GitLab域名>,确认认证通过 - 进入Jenkins后台正常配置GitLab仓库地址和拉取凭证即可,无需额外修改其他配置
方案2:构建任务临时拨号(适合VPN不允许长时间连接的场景)
- 先确认VPN Access Manager支持命令行调用,在节点本地测试拨号、断开指令可正常执行,常用指令参考(不同版本客户端参数存在差异,以本地实际支持的指令为准):
拨号指令:vpn-access-manager connect --profile <VPN配置文件名> --username <VPN账号> --password <VPN密码>
断开指令:vpn-access-manager disconnect --profile <VPN配置文件名> - 将VPN账号密码添加到Jenkins凭证管理,类型选择「用户名 with 密码」,设置专属凭证ID,禁止明文写在构建脚本中
- 修改Jenkins构建任务配置:
- 新增首个执行shell步骤,调用命令行拨号,拨号完成后添加10-30秒等待确保VPN路由生效,示例脚本:
# 读取Jenkins存储的VPN凭证 VPN_USER=${CREDENTIALS_USR} VPN_PWD=${CREDENTIALS_PSW} # 执行VPN拨号 vpn-access-manager connect --profile GitLabVPN --username ${VPN_USER} --password ${VPN_PWD} # 等待VPN连接生效 sleep 20 # 校验GitLab连通性,失败直接终止构建 curl --connect-timeout 10 <你的GitLab服务地址> || exit 1 - 配置正常的Git代码拉取步骤
- 新增构建后置执行步骤,无论构建结果是否成功都执行VPN断开指令,避免占用连接资源
- 新增首个执行shell步骤,调用命令行拨号,拨号完成后添加10-30秒等待确保VPN路由生效,示例脚本:
- Pipeline任务可将拨号、拉取代码、断开逻辑封装到对应stage中,通过
withCredentials语法读取凭证即可
常见问题排查
- 拨号成功但Jenkins拉取代码失败:优先检查Jenkins运行用户和拨号操作用户是否一致,其次确认GitLab地址为内网地址、拉取凭证配置正确,最后检查节点路由表,确认GitLab IP段走VPN网卡路由
- 命令行拨号失败:检查指令参数是否正确、VPN账号是否有权限、是否触发多设备登录限制
- SSH协议拉取失败:确认Jenkins用户
~/.ssh目录下的私钥配置正确、GitLab已添加对应公钥,且known_hosts文件中已录入GitLab的公钥指纹,避免首次连接需手动确认的问题
内容的提问来源于stack exchange,提问作者ktgirish
相关产品推荐
相关产品推荐

