2018-11-16-周度总结

这周做任务的时候老是遇到各种难以解决的小问题,都折腾了很久的,导致东西没做多少。。。

Gitlab-Runner

需要在Windows服务器上部署一个应用,恰好上面也跑了gitlab-runner,所以直接在项目的.gitlab-ci.yml配置了部署脚本。本想着一切挺完美的,每次push后,新文件自动复制,然后重启应用!

.gitlab-ci.yml中的script有调用start xx.bat脚本的语句来重启应用,结果gitlab-runner每次运行到调用bat的语句的时候就卡住了,但是应用好像是重启了。。。但是gitlab-runner挂了啊,后续的ci/cd任务都没办法继续了,具体挂掉的原因没有具体的定位到,猜测是因为gitlab-runner调用bat的时候是使用start /k命令有关,曲线救国,最后script调用py脚本来启动应用

另外一个问题,gitlab-runner是以系统服务运行的,所以script中运行命令启动应用是没办法创建窗口的(system用户运行的环境中没有窗口服务),而且应用运行的身份是system,所以如果真要在windows上做自动部署,正确的办法是通过远程桌面登录需要部署的机器,然后部署应用

VPN

近日想通过VPN连接家中的网络来访问Goolge等服务,之前都是使用SSH隧道来进行代理访问,这种针对网页端的访还比较方便,但是对于某个应用想走代理就没那么方便了。因此决定尝试使用家里之前就配置好的VPN服务(用于外出给手机上网^-^)。在使用中遇到了两个问题。

连上了VPN后,我所有的访问请求都会通过我家的网络转发,但是公司内部有些服务还是需要访问的,怎么办呢?

在Windows10的VPN设置中有个代理的设置,设置好你不想走VPN链接的网络地址就行

连接了VPN后,网页端居然不能google访问,但是应用却又可以代理

这种网页端不能访问,应用可以访问的,按经验肯定是DNS有问题。于是看了dns解析

nslookup www.google.com

果然走的还是本地连接的DNS服务器解析,但是为什么了,按道理默认的行为应该是需要走我VPN连接中分配的DNS服务器去解析。查了一圈后,终于找到了问题所在,原来跟IPv6有关。。。具体为什么有这么个奇葩的关联,我也没有深究了,有兴趣的可以去看看这里面的评论。所以解决方法就是将本地连接里的IPv6协议禁止掉就行了!

禁止了IPv6协议后,果然网页端可以访问Google服务了。但是居然Android虚拟机还是不行,这又是为啥呢!模拟器中的浏览器在访问Google时提示证书错误ERR_CERT_COMMON_NAME_INVALID,然后随手点了下证书信息,What a fuck,居然是Facebook的证书。。。那就应该还是有DNS污染,所以才解析到了Facebook去了。无奈重启了下虚拟机,叮咚一切正常了,原来是虚拟机中的DNS信息没有刷新!

查资料的时候,发现了另外一个常见的需求:连接VPN后,我大部分的网络连接还是希望走本地网络链接,只有部分服务才需要走VPN通道。 看了下解决方案好像是叫做split tunneling,有需求的可以自己去搜搜看

VSCode

使用VScode调试时,打印pandas中的dataframe结构,输出的结构很不友好。输出中本身带有换行符,但是在调试终端中只是原原本本的显示了个\n符号,而不会替你换行。之前有尝试过PyCharm调试,它打印输出的dataframe结构就是格式化后的样子,一个矩阵列表。查了下原来在调试配置中添加下面配置就行

"console": "externalTerminal"

之后在调试终端中使用print(data_frame)就会看到可读的输出了