一种解决方案是使用Git提交哈希来对版本发布候选进行版本控制-这将是自动化、可追踪和可靠的,而且您不需要Git标签。您可以直接使用提交哈希(例如486105e261cb346b87920aaa4ea6dce6eebd6223),也可以将其作为生成更人性化数字的基础。例如,您可以在其前面加上时间戳或递增的序列号,以便能够确定最新的发布候选(例如20220731210356-486105e261cb346b87920aaa4ea6dce6eebd6223)。

尽管如此,语义化版本控制和类似策略在持续交付中仍然有其作用。正如戴夫·法利在他的书《持续交付流水线》(2021年)中建议的那样,它们可以用作显示名称,除了唯一标识符之外。这将是一种向用户提供关于发布候选的信息的方式,同时仍然可以从持续交付中获益。

对于Polar Bookshop,我们将采用一个简单的解决方案,直接使用Git提交哈希来标识我们的发布候选。因此,我们将忽略在Gradle项目中配置的版本号(可以作为显示版本名称)。例如,Catalog Service的一个发布候选将是ghcr.io/<your_github_username>/catalog-service:

现在我们有了一个策略,让我们看看如何为Catalog Service实现它。转到Catalog Service项目(catalog-service),并在.github/workflows文件夹中打开commit-stage.yml文件。我们之前定义了一个VERSION环境变量来保存发布候选的唯一标识符。目前,它静态设置为latest。让我们将其替换为${{ github.sha }},GitHub Actions将动态解析为当前Git提交哈希。为了方便起见,我们还将最新的标签添加到最新的发布候选中,这对于本地开发场景很有用。

更新工作流程后,提交更改并将其推送到GitHub。这将触发执行提交阶段工作流程(图15.1)。结果将是一个发布到GitHub容器注册表的容器镜像,版本使用当前Git提交哈希和额外的最新标签进行标记。

成功执行流水线后,您将能够在GitHub上的catalog-service存储库主页上看到新发布的容器镜像。在侧边栏中,您将找到一个“Packages”部分,其中包含一个“catalog-service”项目。点击它,您将被引导到Catalog Service的容器存储库(图15.2)。使用GitHub容器注册表时,容器镜像存储在源代码旁边,非常方便。

此时,容器镜像(我们的发布候选)已经具有唯一标识并准备通过验收阶段。这是下一节的主题。

部署流水线的验收阶段在提交阶段结束时,每当发布一个新的发布候选到构件库时,就会触发。它包括将应用程序部署到类似于生产环境的环境中,并运行额外的测试以增加其发布可行性的信心。验收阶段运行的测试通常较慢,但我们应该努力保持整个部署流水线的执行时间在一小时以内。

在第3章中,您了解了敏捷测试象限提供的软件测试分类(图15.3)。这些象限根据测试是面向技术还是业务以及它们支持开发团队还是用于批评项目的方式进行分类。

在提交阶段,我们主要关注第一象限,包括单元测试和集成测试。它们是面向技术的测试,支持团队,确保他们正确构建软件。另一方面,验收阶段侧重于第二和第四象限,并试图消除手动回归测试的需求。该阶段包括功能和非功能验收测试。

功能验收测试是面向业务的测试,支持开发团队,确保他们正在构建正确的软件。它们从用户角度进行,通常通过使用高级领域特定语言(DSL)编写可执行规范来实现,然后将其转换为低级编程语言。例如,您可以使用Cucumber(https://cucumber.io)以人类可读的纯文本编写场景,如“浏览图书目录”或“下订单”。然后,可以使用Java等编程语言执行和验证这些场景。

在验收阶段,我们还可以通过非功能验收测试验证发布候选的质量属性。例如,我们可以使用像Gatling(https://gatling.io)这样的工具运行性能和负载测试,进行安全和合规性测试以及弹性测试。在最后一种情况下,我们可以采用由Netflix流行起来的混沌工程学方法,该方法包括使系统的某些部分发生故障,以验证其余部分的反应以及系统对故障的弹性。对于Java应用程序,您可以查看Spring Boot的Chaos Monkey(https://codecentric.github.io/chaos-monkey-spring-boot)

请翻译:One solution would be using the Git commit hash to version release candidates—that would be automated traceable and reliable and you wouldn’t need Git tags You could use the commit hash as is for

原文地址: https://www.cveoy.top/t/topic/iuN2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录