VCS 中的并行开发/分支如何影响构建工件存储库设置和发布给 QA?
在我们公司,我们对 VCS 进行分支以进行并行开发工作,而且我们通常没有太多关于哪个分支将以哪个顺序发布的警告。
对于版本编号,我想放置一个分支标识符以向 QA 显示构建来自哪个分支。来自主干的任何构建都将具有“正常”版本号,其中没有分支标识符:
trunk: 1.1.0
branch: 1.1.0.MyBranch
branch: 1.1.0.AnotherBranch
最初我认为每个分支有一个构建工件存储库,主干有一个主存储库。
但是如果我的版本号包括分支,那么产品的版本号将是错误的(如果我正在构建并从分支发布)。
解决这个问题的方法是只从后备箱释放吗?
另外,我应该在什么时候开始从主干而不是从分支构建 QA 团队?
我目前的想法是说服管理层将开发团队分配到发布订单(比如发布后一周)并将他们的分支合并到主干。然后 QA 开始获取主干构建而不是分支构建,并且分支已合并的开发团队直接在主干而不是分支中修复任何错误。
* 更新 *
更具体地说,我将 SVN 用于 VCS,并将 Artifactory 用于我的存储库。我正在使用 Ivy 进行依赖管理。
查看关于 Repository Layouts ( Repository Layouts ) 的 Artifactory 帮助:
"a sequence of literals that identifies the base revision part of the artifact
version, excluding any integration information"
"'1.5.10', or in case of an integration revision '1.2-SNAPSHOT' the base revision
is '1.2'"
这和 Maven 和 Ivy 的默认布局向我表明这是更常见的:
MyRepo
MyLib
1.1.0 (this is the dll from trunk)
-MyLib.dll
1.1.0.MyBranch-SNAPSHOT (dev builds from the "MyBranch" branch)
-MyLib.dll
1.1.0.AnotherBranch-SNAPSHOT (dev builds from the "AnotherBranch" branch)
-MyLib.dll
这是使用 Ivy 的典型回购布局吗?我假设这需要使用 Ivy 的分支功能在构建时将依赖关系解析为 repo 中正确的分支文件夹?
* 更新 2 *
这是我当前的 Artifactory 结构:
MySnapshotRepo
CompanyName
CompanyName.MyLib
1.0-SNAPSHOT
MyLib.dll (snapshot builds from the dev branch)
MyReleaseRepo
CompanyName
CompanyName.MyLib
1.0.0
MyLib.dll (release builds from the trunk)
1.0.1
MyLib.dll (release builds from the trunk)
1.0.2
MyLib.dll (release builds from the trunk)
- 如何在构建时将 Ivy 指向特定的仓库?对于发布,我只需要从发布存储库中提取二进制文件。对于快照构建,如果它们出现在快照存储库中,我可以提取二进制文件,如果它们丢失,我可以从发布存储库中提取它们。我了解如何链接存储库,只是不了解如何切换它们。
在我的 IvySettings.xml 文件中,我有:
<settings defaultResolver="defaultresolvechain"/>
..但我不想要默认值。当我调用 Ivy 解析命令时,我想指定要解析的解析器链。像这样的东西:
<ivy:resolve transitive="false" resolveMode="snapshot-resolve" conf="compile,test"/>
这是切换我需要解决的存储库的错误方法吗?
发布任务有一个“解析器”属性,它以类似的方式完美地为我工作。
此外,在我的特定示例中,我可能有多个 SVN 分支对应于多个 Artifactory 快照存储库。我可以参数化我解析到哪个 repos 的方式吗?还是将所有分支的快照放入一个存储库并使用常春藤分支功能的更正确方法?
如果您需要任何其他信息来提供帮助,请告诉我。