我在相应的文件夹中有两个解决方案,例如
SolutionA\SolutionsA.sln
SolutionB\SolutionB.sln
每个解决方案都配置了Gated Check-in构建;即两个构建定义GatedSolutionA和GatedSolutionB。
现在的情况是,如果我同时检查两个文件夹中的更改,TFS会显示一个对话框,用于选择构建(使用GatedSolutionA下拉,GatedSolutionB)以针对变更集运行。我的变更集在解决方案B中有突破性变化,在解决方案A中有非破坏性变化。即Build GatedSolutionB将失败,但GatedSolutionA将通过。
当我选择GatedSolutionA来构建我的变更集时,TFS会将其检入,这反过来使解决方案B处于中断状态,并且对于解决方案B,Gated签入的目的将被取消。
如果我将触发器更改为CI以进行构建定义,则TFS会对两个构建进行排队。
我正在寻找的是同样的行为,即所有Gated版本都排队,如果其中一个失败,则应该拒绝更改集。
注意:我不想为这两种解决方案创建单一构建定义。此外,我知道我们可以通过创建两个单独的更改集来避免此问题发生,但这通常发生在开发人员不知道他们有一些文件正在检入解决方案而不是他们正在处理的时候。
答案 0 :(得分:2)
@Gchaves找到了该问题的解决方案,如果您将“源代码管理文件夹”配置到您拥有SolutionA的内部文件夹,则可以转到“编辑构建定义”和“工作区”选项卡。
例如,如果你有这个文件系统:
现在,如果您将“源代码管理文件夹”和“构建代理文件夹”配置为Projects \ SolutionA,则只有在您尝试checkIn SolutionA时才会触发Gated签入,并且它只会编译SolutionA.sln(为此要成为现实,您必须在Process标签上指向SolutionA.sln - > 1.Required-> ProjectsToBuild)
然后,您可以在同一工作空间下拥有多个解决方案,独立构建,签入和标记:)
答案 1 :(得分:1)
在Process选项卡的构建定义中,您可以选择多个sln来构建。
答案 2 :(得分:0)
此问题的一个解决方案是让开发人员为单独的解决方案映射单独的工作空间。如果解决方案之间没有代码重叠,并且您试图阻止开发人员在门控构建另一个解决方案时检查一个解决方案,那么他们应该使用不同的工作区。
如果您有SolutionA的WorkspaceA和SolutionB的WorkspaceB,则挂起的更改对话框将仅显示对相应工作区所做的更改。
正如您所说,您知道可以通过使用单独的更改集来避免它。这就是你如何“强迫”开发人员使用两个独立的变更集并避免“开发人员不知道......”的情况。
为他们创建工作区并撤消他们的“创建工作区”权限,以便他们不能创建包含这两个区域的权限。
答案 3 :(得分:0)
我知道你说你“不想为这两种解决方案创建单一的构建定义”,但这确实是你在这里唯一可行的选择。我建议有两个分支,一个用于功能开发,一个用于集成。让您的开发人员在功能分支中工作,并为这些解决方案使用门控签入(或CI)构建。定期将功能分支中的更改合并到一个集成分支中,该集成分支具有构建所有解决方案的单个gated check-in构建定义。这将使您的集成分支的构建保持清洁。