我正在计划将我们的 build.gradle 文件转换为使用语义版本。除了使用 Gradle 之外,我们还使用 Git 并遵循 Gitflow 工作流程。Jenkins 用于构建项目。
已发布工件的版本遵循 MAJOR.MINOR.PATCH 格式。在 build.gradle 文件中声明依赖时,我们使用动态版本,例如 10.0.+(即取最新的 10.0.PATCH 版本)。
我们将我们的工件从候选发布存储库提升到 Nexus 中的发布存储库。存储库的策略设置为“发布”。由于产品的复杂性(200 多个项目,具有许多上游和下游依赖项),Jenkins 可用的许多推广插件似乎都达不到要求。我们正在考虑让 Jenkins 构建主分支作为重命名工件(10.0.0-rc.1-abcdefg 变为 10.0.0)并将它们上传到正确的 Nexus 存储库的一种方式。
我不确定如何处理上游依赖项的补丁版本增加的情况。下游项目 - 一个 WAR - 由 Jenkins 重新构建并捆绑新的 JAR,但下游项目的版本不会改变。当尝试上传到 Nexus 时,它会失败,因为只有一个工件可以具有相同的版本。
这是一个例子:
- Releases Nexus 存储库的上游 API 版本为 10.0.0,下游项目版本为 10.0.0
- 下游项目依赖于 10.0.+ 的上游 API
- upstream-api.jar 被捆绑到了下游项目.war 文件中
- 这两个工件被部署为产品版本 X 的一部分
- 当一个 hotfix 分支合并到 master 时,upstream-api 版本已更改为 10.0.1
- 该修复意味着在部署时,产品现在是 Release X'
- 下游项目保持在10.0.0,但是由于上游依赖的变化而重新构建
- Jenkins 无法将下游项目 10.0.0.war 上传到 Nexus,因为它已经存在
我可以用新的工件替换旧的工件,但这意味着不能再从 Nexus 中的工件部署 Release X(例如,在回滚的情况下,或者需要在旧版本上复制问题)。
这通常是如何处理的?