背景。我的组织使用 Maven、Bamboo 和 Artifactory 来支持持续集成过程。我们依靠 Maven 的 SNAPSHOT 限定符来帮助管理 Artifactory 中的存储(轮换旧的 SNAPSHOT 构建)并帮助保持跨团队集成的最新状态(Maven 在每次构建时自动检查对 SNAPSHOT 依赖项的更新)。
问题。我们面临的挑战之一是在继续使用 SNAPSHOT 的同时正确地在不同环境之间推广构建。假设测试人员将版本 1.8.2-SNAPSHOT 部署到功能测试环境,它在 Subversion 中的版本为 1400。假设它通过了功能测试。当测试人员决定将 1.8.2-SNAPSHOT 从 Artifactory 拉到性能测试环境中时,开发人员可能已经提交了对 Subversion 的更改,因此 Artifactory 中的实际二进制文件处于不同的版本。在使用 SNAPSHOT 构建时,我们如何确保 rev 不会从我们下面改变?
约束。我们显然不想在不知不觉中部署不同的构建。我们也不想从源代码重建,因为我们想在性能测试中测试我们在功能测试中测试的确切二进制文件。
我们考虑过的方法。我们的想法是我们想用第四个组件标记版本,例如 1.8.2.1400,其中第四个组件是 Subversion rev。(作为一个附带问题,是否有 Maven 插件或其他自动执行此操作的工具?)但是如果我们这样做,那么本质上我们将失去 SNAPSHOT 功能,因为 Maven 和 Artifactory 认为它们是不同的版本。
我们正在使用 Scrum,所以我们很早就部署到了测试环境(比如第二天左右)。我认为在开发周期的早期删除 SNAPSHOT 限定符是没有意义的,因为我们再次失去了 SNAPSHOT 的好处。
希望知道其他组织如何解决此问题。