随着 GSoC 即将结束,在这段漫长的旅程中,现在是时候对整个经历进行总结了。
我将回顾已经完成的工作,互动情况,遇到的困难,GSoC 的最后步骤以及这个项目近期的前景。
整个经历的总结
加入 GSoC 时,我并不真正确定它是什么,因为我从未有过这样的经历,而且这是一个从头开始建立的大型项目,一开始就令人敬畏,老实说,有时我感到有些不知所措和害怕。
我必须说,如果没有我的团队(Niels Braczek, Tito Alvarez, Ashan Fernando, Puneet Kala, Yves Hoppe, Tobias Zulauf, Astrid Günther)的帮助,以及我的家人和最亲密的朋友的支持,这个项目将会更加困难,他们是我的基石,随着项目的进展一直支持我。
事情开始步入正轨花了一些时间,因为从零开始的项目在过程中有很多需要弄清楚的地方。即使在项目接近结束时,仍然有很多需要弄清楚的地方。我们从一开始就每周开会,直到现在,以讨论目前的进展,决定采取的路径和决定下一步,始终保持对项目的跟踪,确保一切按时顺利进行。
在团队的协助和支持下,我一步步地走过了每个阶段,尽我所能使项目按时完成。
我衷心建议任何学生都可以继续前进,承担 GSoC(最好选择 Joomla!)的项目。这是一条艰难的道路,一个艰难的项目,我遇到了我的困难,但是收获远远超过了损失,我并不是指金钱上的收获,这只是其他所有东西之上的一个额外奖励。
自从我开始以来,我学到了很多,多种技术,规划和构建系统/项目,查看大型代码库,分析它,建立学习新事物的自主性,团队合作,更有效地管理我的时间,提高我的编程技能,在这个令人惊叹的社区中遇见了许多令人惊叹的人,并为它做出贡献。
看到这样一个充满活力和多元文化的社区真是令人振奋,在这里每个人都对彼此友好,互相帮助。
总的来说,这是一个非常丰富的体验,我认为每个人都应该尝试一下。
截至目前取得的成就与进展
在审视目标时,第一阶段我必须准备好Jenkins环境设置,以便构建PRs/commits并保持主机上的代码更新;在第二阶段,我必须准备好多容器Docker环境以托管Joomla!实例;在最后阶段,我必须完成测试请求网站的构建并将3个部分连接起来,以便用户可以在网站上请求测试,并为给定的PHP版本生成实例以供用户测试该PR。
自第一篇博客以来,关于这个项目的范围和需要做出的选择发生了很大的变化。我将简要介绍这些变化以及我为项目完成的工作。
所以在Jenkins准备好之后,构建仓库中的PRs和commits,第二阶段是关于准备好多容器环境以托管Joomla!实例。起初,团队认为为每个PHP版本和仓库分支组合准备Dockerfile是最好的选择,并且有脚本工作以生成稍后与虚拟化项目和PatchTester一起使用的dockerfiles。
经过几次讨论和对每种方法利弊的权衡,团队决定虚拟化对这个项目来说是过度设计,而PatchTester也不是最佳选择,因为它仍然有一些数据库问题需要考虑。
我们开始开发docker-compose环境,Niels Braczek发现了一个对这个项目非常有用的工具,名为Devilbox。这是一个基于纯docker和docker-compose的高度可定制的LAMP和MEAN堆栈替代品,支持无限数量的项目,自动为这些项目创建虚拟主机和DNS记录。
我采用了这个工具,并进行了大量定制,以允许有3个PHP版本的容器和每个版本附带的Web服务器,这些服务器隐藏在一个代理(Jwilder Nginx Proxy)后面,该代理使用正则表达式根据PHP版本分发请求。我发现唯一能够正确将请求重定向到正确的PHP版本容器的方法是在实例ID的前两位放置PHP版本(56、70或71),并在Jwilder代理的虚拟主机环境变量中有一个正则表达式来生成正确的nginx配置文件。
除了成功重定向请求的多容器环境,我还设法使用bash脚本来自动化Joomla!安装过程,导入sql转储文件并放置带有正确信息的配置文件。
有了这些,我能够在容器中在线运行多个Joomla!实例,如下面的图片所示
在多容器环境运行后,开始构建测试请求网站,这是第三阶段的目标。对于测试请求网站,我心中想的是类似问题跟踪器网站的东西,并以此为基础构建网站。因此,我必须分析代码库,并在Michael Babker的帮助下,设法解决我在设置和部署问题跟踪器网站上遇到的一些问题。
之后,我拿了问题跟踪器(Issue Tracker)的代码,稍作修改以便只跟踪PR,为Joomla!实例插入了一个MVC应用程序,并添加了一个实例表格。这样,用户可以在网站上使用GitHub登录,并选择PHP版本请求测试;用户最多可以添加/移除5个活动实例,列出活动实例并查看每个实例的信息。
缺失的部分是在点击添加/移除实例按钮时调用脚本来将实例添加到容器中,然后创建cron作业以给每个实例设置一个过期日期,以尽可能减少对服务器的压力。
遇到的困难
如预期那样,在过程中遇到了一些困难。首先遇到的困难是如何远程工作,如何处理时间和日程以尽可能高效。实际上,这主要是习惯问题。
另一个艰巨的任务是分析大型代码库,理解其他许多人编写的代码,以便弄清楚如何使用和编辑它。
正如我在第一篇博客文章中提到的,Jenkins的设置中存在一些问题,涉及到webhooks。
关于多容器环境,我首先遇到的问题是从一个PHP版本过渡到三个版本。我在网页服务器和套接字上不断遇到问题,不得不找到一种方法来绕过这个问题,并更好地代理请求。此外,我在本地成功运行Devilbox后在服务器上测试和部署时也遇到了一些问题。我不得不查阅大量关于Devilbox的文档,以弄清楚所有操作是如何进行的以及如何解决问题。
然后,在测试请求网站上,我在配置问题跟踪器和MySQL转储时遇到了一些问题。某些列似乎有问题,我对部署网站的流程不太了解,但我还是设法完成了。
有时,这些问题拖住了我,解决问题消耗了大量时间,有时也很沮丧,但得益于大家的帮助,我最终还是成功了。
下一步和未来展望
完成项目剩余的步骤是
- 运行脚本
- 在点击添加/移除实例按钮时,向多容器环境中添加/移除实例。
目前在这方面有点问题,因为脚本需要在宿主机上运行,而网站位于其中一个容器中。我将不得不把网站放在宿主机上,或者创建一个网络服务,让容器可以与宿主机通信来执行脚本,并将PR和PHP版本数据作为参数传递。
完成这些之后,我还需要完成文档,以便使项目的每个部分尽可能清晰。这样,任何人都可以在自己的环境中复制/测试。
GSoC之后,我仍需要完成我的硕士论文,我希望能在大约一年内完成硕士学业。尽管如此,我确实打算在近期继续参与Joomla!和这个项目。这个项目仍需要许多改进,我还有很多想法来改善这个平台。我希望能在大家的帮助下把它做到最好,我也希望能尽可能地贡献到其他领域。
我也希望我能在参加在罗马举行的Joomla!世界大会时见到所有的导师、同事以及尽可能多的社区成员,所以我猜我们会在那里见面!