最近进入了新的项目组,项目Git仓库部署在客户的内网环境中,故本地要使用OpenVPN才能使用其Git平台。可在实际情况中并不是只有在clone或push代码时才会访问其内网,Jenkins拉取代码时也会访问其内网,说到这儿或许你会想到Jenkins中可以配置HTTPProxy,如图:
但此HTTPProxy是全局配置,假如对全局流水线配置了代理后,就有可能会导致其他的网络请求不通的情况。所以我们最理想的状态就是只在clone代码(即CheckoutSCM)阶段使用代理,但在Jenkins的PluginsManager中并未找到相关插件,在网上查到的相关Docker镜像也都是全局配置。与此同时,就算有针对某个stage使用的代理插件,那么当目标服务器有变动时,我们还需要修改各个项目中的Jenkinsfile,这相对来说也会比较繁琐。所以小伙伴和我一拍脑袋,决定搞一个代理服务器,如果目标服务器有变动那么只需要改动代理服务器即可。
开工???♂?首先,来明确一下目标:启动一个Docker容器并将相应请求代理到内网服务器。有了明确的目标,接下来就让我们冷静地分析一波,事实上我们所需要的代理服务器就是一个“翻译官”的角色,需要使双方能畅通的交流。假如我们把目标服务器当成“歪果仁”,本地当成“中国人”,当没有“翻译官”时就“中外友人”是无法正常沟通的(即网络不连通):
学外语首先我们让“翻译官”学学外语,具备“翻译”的技能!
哎~哎~哎,车歪了歪了!让代理服务器具备“翻译”的能力我们就需要安装OpenVPN,然后使用OpenVPNsh和ovpnfile来启动代理。OpenVPNsh我们可以直接copyGitHub的源码(