在 Ivy 中推广几个模块(集成→里程碑)。

26
Ivy适合管理依赖,但不适用于跨多个模块处理整个软件生命周期。尽管如此,它确实有一些功能似乎支持它(例如statusbranch属性),而ivy最佳实践简介也暗示可以通过一些工作将集成版本推进到里程碑或发布。

不幸的是,我没有找到明确的指导来管理dev-test-deploy周期。以下是我想要实现的一些内容:

(考虑到开发人员通常在本地工作区跨多个模块工作)

  1. 开发人员可以在本地发布模块的更改,以便工作区中的其他模块可以获得更新的构建文件。
  2. 开发人员可以使用一个命令将版本指定为“准备部署到测试”
  3. 测试人员可以使用一个命令将版本指定为“准备上线”
  4. 开发人员可以从源代码重新构建任何版本,并且正确选择了相应的依赖项(即可重复构建)。

我比较清楚的一些事情是:

  • 修订版状态应用于表示该修订版是否仅用于开发,准备测试或准备生产。
  • 分支属性足以处理不同的项目分支。

我将面临以下问题:

如何促进集成构建

假设我在我的工作区中检出了这些模块:

Module dependency chart

现在我对模块a感到满意,并决定使用我的工作空间中检出的版本发布一个里程碑。仓库中需要发生以下事情:

  • 发布e-1.0-RC1
  • 发布d-1.1-RC2,引用e-1.0-RC1作为依赖项
  • 发布c-2.0-RC1,引用d-1.1-RC2作为依赖项
  • 发布b-3.3-RC1,引用e-1.0-RC1作为依赖项
  • 最后,发布a-7.1-RC2,引用c-2.0-RC1b-3.3-RC1作为依赖项。

如果我试图自己完成这个任务,我可能会做一些工作空间管理、ivy.xml查找和替换等操作。在我打开这个“坑”之前,我想听听一些意见。最好的解决方法是什么?

2个回答

5
您可以使用递归传递来发布具有更高状态的模块及其依赖项。
使用您的示例:
  • e-1.0-RC1发布,状态为integration
  • d-1.1-RC2发布,状态为integration,依赖于e-1.0-RC1
  • c-2.0-RC1发布,状态为integration,依赖于d-1.1-RC2
  • b-3.3-RC1发布,状态为integration,依赖于e-1.0-RC1
  • a-7.1-RC2发布,状态为integration,依赖于c-2.0-RC1b-3.3-RC1
  • 最后,您决定将a-7.1-RC2升级为milestone状态,因此进行递归交付(使用delivertarget属性)。这将递归调用每个具有低于milestone状态的依赖项的delivertarget并以milestone状态发布。
这样做的好处是,您不需要(也不希望)在工作区中检出每个项目,只需检出a。这也意味着更容易创建部署流水线并让您的CI服务器:
  • 运行a的单元测试,
  • 构建a
  • a发布为integration
  • a部署到系统测试环境,
  • 运行一些系统测试
  • aintegration提升到milestone(同时提升其依赖项)
  • a部署到验收测试环境,
  • 运行一些验收测试
  • amilestone提升到release(同时提升其依赖项)
  • a部署到生产环境(或将其上传到下载站点)

在任何时候,管道都不需要访问依赖项目,并且由于递归交付是通用的,当您通过ivy.xml文件添加或删除依赖项时,您不需要更改管道中的任何内容。

我已将此答案标记为社区wiki。是否有其他人愿意对其进行扩展或更正我可能错误的内容?


0

如何执行以下操作:

  • 将里程碑中的内容从推广到发布(同时推广其依赖项)

我原本计划进行检索和发布。有更好的方法吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接