在常春藤中推广几个模块(集成 - >里程碑)

oks*_*ayt 26 ant deployment version-control ivy

Ivy非常适合管理依赖项,但它并不是要处理许多模块的整个软件生命周期.这就是说,它有几个特点,似乎支持它(比如statusbranch属性),以及常春藤最佳实践Blurb的暗示能够促进整合修订里程碑或释放,"有一些工作".

遗憾的是,我还没有找到关于如何管理开发 - >测试 - >部署周期的明确指导.以下是我想要实现的一些事项:

(鉴于开发人员通常在本地工作空间中的许多模块上工作)

  1. Dev可以在本地发布对模块的更改,以便工作区中的其他模块可以获取更新的工件.
  2. Dev可以使用一个命令将版本指定为"准备部署以进行测试".
  3. 测试人员可以使用一个命令将版本指定为"准备好prod".
  4. Dev可以从源重建任何版本,并且正确地选择适当的依赖项(也称为可重复的构建).

我很清楚的一些事情是:

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

以下是我正在努力解决的问题:

如何促进集成构建

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

模块依赖图

现在我对模块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查找和替换等等.在我打开那些蠕虫之前,我想得到一些意见.解决这个问题的最佳方法是什么?

Tom*_*ard 5

您可以使用递归传递以更高的状态发布模块及其依赖项.

使用你的例子:

  • e-1.0-RC1integration状态发布
  • d-1.1-RC2integration状态发布,e-1.0-RC1作为依赖项引用
  • c-2.0-RC1integration状态发布,d-1.1-RC2作为依赖项引用
  • b-3.3-RC1integration状态发布,e-1.0-RC1作为依赖项引用
  • a-7.1-RC2integration状态,引用c-2.0-RC1b-3.3-RC1依赖性发布.
  • 最后,您决定升级a-7.1-RC2到某个milestone状态,这样您就可以进行重复交付(使用该delivertarget属性).这将以递归方式调用delivertargetfor状态低于的每个依赖项,并以状态milestone发布它milestone.

关于这一点的好处是,您不需要(或想要)在工作区中检出每个项目a.这也意味着创建部署管道并拥有CI服务器要容易得多:

  • 运行单元测试a,
  • 建立a,
  • 发表aintegration,
  • 部署a到系统测试环境,
  • 运行一些系统测试
  • a从促进integrationmilestone(促进它的依赖)
  • 部署a到验收测试环境,
  • 进行一些验收测试
  • a从促进milestonerelease(促进它的依赖)
  • 部署a到生产(或上传到下载站点)

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

我已将此答案标记为社区维基.还有其他人关心扩展它或纠正我错了吗?