我们的团队正在使用 Azure DevOps 管道来执行持续集成任务(构建、运行单元测试、确定代码覆盖率等)。
现在我们希望在多个构建过程中跟踪各种度量(例如,编译器警告的数量)以对它们进行仪表板显示(用例 1),同时也防止回归(用例 2)。这两个用例都需要持久存储构建结果 - 即使在保留时间到期后也是如此。
如何在 Azure DevOps 管道的整个生命周期内持久存储数据(例如将提交哈希对保存到多个数据字段的 JSON 或 YAML 字符串)?
我正在寻找一个技术解决方案,这是肯定的,但是使用 DevOps 特定措辞的概念性答案会有所帮助,而且我什至很难寻找解决方案,因为我觉得我没有使用正确的措辞。
从技术上讲,我可以想象设置一个 SQL 数据库(在 Azure 上?),我的 CI 阶段与之通信以填充持久数据。但这似乎是重量级的。我可以想象将数据存储在存储库本身中,但这看起来很奇怪,并且会导致与实际版本管理模式不匹配的额外提交。
理想情况下,该解决方案不会涉及任何 Azure DevOps 管道插件(既不是自行开发的,也不是来自市场的),因为它们很难在我们的组织内部安装,但如果针对该问题的优秀解决方案以插件形式存在,仍然欢迎提示。
SonarQube 是专门为此任务而构建的,并且在行业中广泛使用。 从概念上讲,您可以扩展构建管道以包含 SonarQube 分析任务,以查找潜在的安全问题、代码异味、编译器警告、潜在错误和风格问题。在管道的最后,它将分析结果、单元测试结果和代码覆盖率发布到 SonarQube 数据库。
SonarQube 的 Web 界面提供所有这些指标的历史跟踪,并且如果您想构建不属于产品一部分的自定义报告,则可以使用 API 来提取数据。对于每个代码气味或问题,它提供了有关错误所在、如何修复以及估计解决时间的文档。这是向管理层报告修复技术债务需要多长时间的好方法(该工具显示需要 23 天!)
有一个付费云产品称为“SonarCloud”。或者,您可以在本地或容器 (SonarQube)(Kubernetes、Docker、Azure 容器实例、
Web 应用程序)中建立“SonarQube”。 社区版是免费的,但没有所有的附加功能。付费开发者版和企业版支持分支级分析,并可以直接集成到您的拉取请求中。有一个开箱即用的集成,SonarQube 将通过向更改的文件添加注释来“装饰”您的拉取请求,突出显示正在引入的问题。
正确配置管道可能很挑剔,但一旦设置完毕,它就会为您的交付流程带来巨大的增值。