记一次项目开发历程——此时此刻,非我莫属

这是一场不太平凡的经历,困难重重的开发过程。

在我从师兄手里接到需求时,知道大概意思是:将一个需求的代码推到Github的开源项目;需要先review一遍代码。代码中主要意思是在Terraform的Provider开源项目中增加一些特性。

然后我看了一下前人准备的一些开发参考文档,大概了解了Terraform是一个什么项目,用来做什么的。阿里云Terraform Provider开源项目地址:terraform-provider-alicloud

然后我从CX同学手里接过了更改的代码,开始Review与准备提交。

代码是Golang语言写的,我之前写了两年多的Golang,因此能够直接读懂和更改代码,没有任何障碍。

在Review中,我发现了一些问题,有些代码写的有问题,而CX同学在忙于其他项目的开发中,因此我直接投入进去进行修改。其实在这个时候,对于Terraform Provider的一些基础开发还不是很清楚。

开发之前,先安装一些环境,环境上基本没有啥问题,只是有一些依赖的下载需要开启VPN。

改完代码后,开始单元测试……

意想不到的问题出现了,出现了莫名其妙的0x0的空指针问题。然后……我就卡住了,我尝试着通过看代码来找到空指针所代码的位置,不出所料的失败了。

一般空指针问题,我都认为是我代码中修改的问题,因此一段时间内,我都没有意识到去网上查一下是否有相同的问题出现。过了一段时间,我意识到需要在网上查一下我的这个问题。

终于在Stackoverflow上找到了有遇到相同的问题;然后在Github上找到了对应的解决方案。原来是在M1芯片的Mac上Rosetta上存在的问题。我按照指导的方案设置了一个环境变量。终于这个问题就这样close了。

经过一段时间的单元测试,单元测试中,我对单元测试的代码有一些不太明白;通过负责开源项目的同学,终于一步一步的明白这个代码是做什么的,每一步是什么意思。

然后开始通过example的tf文件进行流程测试。

然后我进行terraform的plan、apply、destroy进行测试。

在编译测试中,遇到一个问题:我在进行plan的时候,会发现tf文件中声明的变量无法始终认为是provider中未声明的变量……

经过一段时间的研究,我明白了,是因为我编译后的provider的可执行文件,没有被Terraform安装上,没有走到我更改的代码逻辑上。

然后我发现一个问题,在指导我们开发的文档中,写了编译后的结果会放在某个文件路径下;然而应该是这个路径是不正确的,应该放在一个会被识别到的路径……经过一段时间的尝试,我找到了这个路径,也不知道是不是因为我电脑是M1芯片的Mac的原因,因此在按照指导文档的流程来安装和测试的时候会不适用。

找到这个路径后,在编译成可执行文件后,将这个文件复制到对应文件中。然后进行init、plan等后续流程。只是在init时会比较慢,这个应该是我的网络问题,需要开启VPN来支持访问外网才能初始化成功。

终于测试完成啦……真不容易。

然后将代码提交到内网Review,review完成后提交到Github上Review。在Review中,负责开源项目的同学提出了一些问题,然后我就开始改啊……改。终于改完了。

在修改中还遇到一次单测出错的问题,但是比较神奇的是,同样的代码之前没有出错。虽然后面搞定了,没有出错了,但是还是不知道为啥,emmm……


在开发中遇到一些问题,我在解决过程中也存在一些问题:

  • 在解决问题时,当自己没有很明显的思路时,都先去网上搜索一下,说不定会有意想不到的收获
  • 解决问题时,有时候应该直接选择询问对应比较熟悉的同学,而不是自己去找资料等,会来得快一些
  • 当review代码时,首先需要对现有的代码结构与功能都清晰,才能够做好review