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#47
,jcabi/jcabi-http#48
附注:您也可以在Windows平台上使用AppVeyor进行类似操作:如何使用AppVeyor在Rultor合并之前验证拉取请求。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-17 at 14:33