Rultor + Travis

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Rultor 是一个编码团队助手。Travis 是一个托管的持续集成系统。在本文中,我将展示我们的开源项目如何同时使用它们来实现无缝的持续交付。

我将展示一些实际场景。

jcabi-mysql-maven-plugin 是一个用于MySQL集成测试的Maven插件。@ChristianRedl 提交了一个新功能的拉取请求#35。我审查了这个请求并要求Rultor将其合并到master分支:

你可以看到,Rultor进行了实际的合并操作。我通过将他的GitHub帐户添加到项目协作者列表中,给予了他对项目的访问权限。

在让Rultor继续之前,我检查了Travis报告的预构建状态:

Travis在拉取请求中发现了一个新的提交,并立即(无需任何我干预)在该分支上触发了构建。构建没有失败,这就是Travis给予我的绿色标志。我看了一下标志和代码。由于拉取请求作者已经纠正了代码中的所有问题,并且Travis没有投诉,所以我向Rultor给出了“继续”的指示。

尽管前一步骤保证了master分支始终是干净且稳定的,但我们使用Travis进行持续集成。每次提交到master都会触发Travis中的新构建。构建的结果将改变Travis中项目的状态,可能是“失败”或“通过”。

jcabi-aspects是一组AOP AspectJ切面。我们配置了Travis进行持续构建。它生成的徽章如下(左边的那个):

再次强调,即使只读的master对于避免构建失败是一种有效的保护措施,但并不能保证master在任何时刻都是稳定的。例如,有时单元测试会因为日历、环境、依赖、网络连接质量等的变化而偶尔失败。

理想情况下,单元测试应该是独立于环境的,要么失败要么通过。然而,在现实中,单元测试远远不完美。

这就是为什么只读的master结合Rultor和Travis的持续集成给我们带来更高的稳定性的原因。

jekyll-github-deploy 是一个Ruby gem,可以自动将Jekyll网站部署到GitHub Pages。@leucos 提交了一个新功能的拉取请求#4。该请求成功合并到了 master 分支。

然后,我指示Rultor发布 master 分支到RubyGems,并设置一个新版本为1.5:

Rultor执行了一个简单的脚本,该脚本在其.rultor.yml中进行了预配置

脚本是参数化的,正如您所见。有一个参数${tag}通过Rultor传递到脚本中。这个参数是我在GitHub问题中提供的,当我向Rultor提交命令时。

脚本测试宝石是否正常工作(集成测试),并在之后进行清理。

然后,它会将jgd.gemspec中的版本更改为${tag}中提供的版本(它是一个环境变量),并构建一个新的.gem文件。

最后,它使用从../rubygems.yml获取的登录凭据将新构建的.gem推送到RubyGems。这个文件是由Rultor在脚本开始之前创建的(该机制在下面讨论)。

如果一切顺利,RubyGems 确认成功部署后,Rultor 将向 GitHub 报告。这正发生在 pull request #4 中。

s3auth.com 是一个用于 Amazon S3 存储桶的基本 HTTP 认证网关。它是一个 Java web 应用程序。在它的拉取请求#195中,由@carlosmiranda修复了一个资源泄漏问题,并由 Rultor 合并了该拉取请求。

然后,@davvd指示 Rultor 将 master 分支部署到生产环境。Rultor 创建了一个新的 Docker 容器,并在其中运行了 mvn clean deploy

Maven 将应用程序部署到了CloudBees

整个过程共花费了 21 分钟,正如 Rultor 生成的报告中所显示。

有一个值得一提的重要技巧。部署到生产环境始终意味着使用安全凭据,如登录名、密码、SSH 密钥等。

在这个特定的例子中,Maven CloudBees 插件需要 API 密钥、密钥和 Web 应用程序名称。这三个参数是保密的,不能以”开源”的方式透露出来。

因此,有一个机制通过其.rultor.yml文件来配置 Rultor(请注意前几行)。

这些YAML条目告知Rultor,它需要从yegor256/home私有的GitHub存储库中获取assets/s3auth/settings.xml文件,并在启动Maven构建之前将其放入Docker容器的工作目录中。

这个settings.xml文件包含了CloudBees插件部署应用程序所需的秘密数据。

《一键部署到CloudBees》更好地解释了这个过程。

无论是Rultor还是Travis,只要您的项目是开源的并托管在GitHub上,这两个产品都是免费的。

其他关于Rultor+Travis使用的好例子可以在这些GitHub问题中找到:jcabi/jcabi-http#47jcabi/jcabi-http#48

附注:您也可以在Windows平台上使用AppVeyor进行类似操作:如何使用AppVeyor在Rultor合并之前验证拉取请求。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-17 at 14:33

sixnines availability badge   GitHub stars