机房报告 - 背后发生了什么
今天我想与大家分享过去几个月,实际上几年,Joomla项目背后所发生的事情。我不是在谈论关于内容管理系统(CMS)政治或方向上的重大决策,而是在谈论我们对基础设施所做的一些工作,这些工作被隐藏起来,除了像今天这篇文章这样的特别导览外,没有人能看见。
几年前,Joomla开始使用持续集成(CI)系统。这些系统通过运行测试、检查代码风格和确保所使用的代码在所有支持的平台上都能正常工作来提高Joomla的质量。这发生在我们对CMS的每一次更改时,但我们拥有的系统不仅仅是CMS。
虽然CMS的存储库是我们的最大资产,但我们实际上拥有超过200个存储库,构成了整个Joomla项目。这些存储库包含joomla.org域名下的不同网站、不同的框架包、我们的问题追踪器、我们使用的XML和JSON的模式以及更多。相当多的这些存储库使用CI系统,但正如你所看到的数字一样,这些并不是由同一个人设置的,所以我们至少有6个不同的CI系统在使用。
再见Jenkins
Joomla是由志愿者驱动的,有时候志愿者会离开项目。这是生活,但是当(CI)系统的知识随着他们离开时,这个简单的事实就会变得有问题。
三年前,我们遇到了这种情况,我们使用的CI系统中的大多数都发生了这种情况。此外,我们项目中广泛使用的CI系统之一,Travis,停止为像我们这样的开源项目提供支持。这两个问题迫使我们统一我们的CI系统,尽可能减少使用的系统数量。
今天我们成功将系统减少到只有2个,主要是无人机CI和在一些我们使用AppVeyor在Windows机器上测试代码的领域。
对于那些询问我们为什么使用Drone CI而不是GitHub Actions的人:我们只是标准化了已经使用的系统,并且在我们开始转换时,GitHub Actions还相当新。
但是我不想让你被从Travis迁移到Drone的有时重复的工作烦扰。相反,我想让你被我们从Jenkins迁移的最后一个系统烦扰。Jenkins有一个特殊的情况,因为它执行了一些相当复杂的任务,主要是直接部署到我们的官方网站,处理API文档、模式、Joomla夜间构建等。同时,之前提到的关于系统知识丢失的情况也适用于这个工具,因此我们遇到了保持其更新、修复问题和支持它的问题。
然而,最重要的是,我们希望降低任何新志愿者帮助CI系统(s)的门槛,你学习的系统越少,越好。Jenkins必须被淘汰。
一步步来
最终,你必须一步一步来做,所以我开始一项一项地迁移任务。Jenkins主要用于将更改部署到我们的网站,而不是在运行CMS或Joomla框架的CI测试。这意味着我们不仅要在结束时运行一些测试并等待成功或失败,我们还要进行部署,这意味着代码在部署时不应意外删除所有内容。
其中一些部署很简单,比如我们的问题跟踪器或Joomla框架的网站。它们只需要你通过ssh连接到服务器并启动一个内置的脚本,这个脚本为你完成大部分更新。所以将Jenkins作业转换为Drone配置实际上相当简单。有些稍微复杂一些,比如update.joomla.org网站。
人们可能会认为这应该更容易,因为我们只是在复制静态文件,但与Drone相比,Jenkins设置有一个相当大的不同点:Drone在Docker容器中工作,因此每次都从一个绿色字段开始。
Jenkins基本上只是运行在服务器上其永久文件系统上的另一个程序。因此,你在早期运行中做的更改会持续到下一次运行,必须清理或至少加以说明。
问题,问题,问题
在测试所有这些部署时,我们发现Jenkins已经相当长一段时间没有得到妥善维护了,并且在其控制下的许多存储库和资产也是如此。许多依赖项都已更新,相当多的作业和安装现在都有故障,要么运行在旧版本的存储库上,要么根本不起作用。这让我想到了整个转换中可能最有趣的配置。
api.joomla.org是一个显示自动生成的API文档的网站。工具phpdocumentor读取Joomla和Joomla框架源代码中的所有docblocks,这是我们遇到的第一问题。phpdocumentor存储在Jenkins服务器上的一个单独的可执行文件中,并且落后了两个主要版本。我们实际上无法在我们的Drone服务器上运行它,至少不能有良好的良心。下一个问题是,phpdocumentor在其最新版本中读取Joomla CMS docblocks时会因代码中的错误和Joomla CMS代码库中的一些无效的@since标签而崩溃。如果这还不够,即使修复了这些问题,phpdocumentor仍然没有生成完整的渲染,因为它在类图中失败。
虽然可以通过修复我们的Joomla代码和使用Docker镜像代替.phar发行版来解决问题,但这也带来了新的问题:我们的模板仍然是针对phpdocumentor 1.x设计的,而我们将使用3.x版本。这又是一个需要解决的问题。
现在phpdocumentor运行正常,输出看起来也不错,但如果这是所有困难中最难的部分,那就容易多了。下一个问题是,我们不仅仅要运行一次phpdocumentor,而需要部署多个CMS和框架版本,并将它们的文档合并到一个网站上。这还包含一些静态文件。最终,在Drone中产生了三个工作项:一个用于部署静态文件,一个用于部署CMS文档,一个用于部署框架文档。
那么现在呢?
自2022年5月底以来,Jenkins已被退役。所有这些工作和部署都已迁移到Drone,每个配置都存储在相应的存储库中。从我们决定退役Jenkins到真正完成,历时几年,实际工作仍需要数周人力才能完成。新的Drone设置意味着任何想要为我们CI系统工作的贡献者只需要学习一个程序,而且它也与我们的通用权限处理更好地结合在一起。最终结果看起来相当有希望,为我们现在从这个地方扩展自动测试和部署提供了一个非常好的坚实的基础。但这将是下一篇文章的主题。我希望您对Joomla项目引擎室的一瞥感到有趣。我想感谢Harald Leithner,他与我在很多工作中一起工作。
在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人意见或经验,可能与Joomla项目的官方立场不一致。
通过接受,您将访问由https://magazine.joomla.net.cn/之外的第三方提供的服务
评论