gpt4 book ai didi

version-control - 在 ivy 中推广几个模块(集成 -> 里程碑)

转载 作者:行者123 更新时间:2023-12-03 10:29:56 27 4
gpt4 key购买 nike

Ivy 非常适合管理依赖项,但它并不意味着跨多个模块处理整个软件生命周期。也就是说,它确实有几个似乎支持它的功能(例如 the status and branch attributes )和 ivy best practices blurb暗示能够“通过一些工作”促进对里程碑或发布的集成修订。

不幸的是,我还没有找到关于如何管理开发 -> 测试 -> 部署周期的明确指导。以下是我想要实现的一些目标:

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

  • 开发人员可以在本地发布对模块的更改,以便工作区中的其他模块可以获取更新的工件。
  • 开发人员可以将版本指定为“准备部署以进行测试”一个命令。
  • 测试人员可以将一个版本指定为“准备生产”一个命令。
  • 开发人员可以从源代码 重建任何版本并且正确地选择了适当的依赖项(又名可重复构建)。

  • 我比较清楚的一些事情是:
  • 修订版status应该用于表示该修订版是否仅用于开发、已准备好进行测试或已准备好用于生产
  • branch属性应该足以处理不同的项目分支

  • 这是我正在努力解决的问题:

    如何促进集成构建

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

    Module dependency chart

    现在我对模块 a 很满意,并决定使用我工作区中的 checkout 版本发布里程碑。 repo 中需要发生的事情是:
  • 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 查找和替换等。在我打开那个蠕虫 jar 之前,我想听听一些意见。解决这个问题的最佳方法是什么?

    最佳答案

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

    使用您的示例:

  • 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-RC2milestone状态,所以你做一个recusive delivery (use the delivertarget attribute)。这将递归调用 delivertarget对于状态低于 milestone 的每个依赖项并使用 milestone 发布地位。

  • 这样做的好处是,您不需要(或不想)在工作区中 checkout 每个项目,只需 a .这也意味着创建部署管道并拥有 CI 服务器要容易得多:
  • a 运行单元测试,
  • 构建 a ,
  • 发布 aintegration ,
  • 部署a到系统测试环境,
  • 运行一些系统测试
  • 推广a来自 integrationmilestone (促进它的依赖)
  • 部署a到验收测试环境,
  • 运行一些验收测试
  • 推广a来自 milestonerelease (促进它的依赖)
  • 部署a用于生产(或上传到下载站点)

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

    我已将此答案标记为社区 wiki。还有其他人关心扩展它或纠正我做错的任何事情吗?

    关于version-control - 在 ivy 中推广几个模块(集成 -> 里程碑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453135/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com