持续集成:为依赖项构建管道 .NET
Continuous Integration: Build Pipeline for dependencies .NET
我正在使用 TeamCity v10 自动构建我的 .net 核心解决方案:
假设我有以下项目:
A -> B -> C ->D
A->D
箭头表示项目B引用了项目A,需要先恢复构建。
配置
项目D是最后要发布的web应用(同时需要C和A)
- 为此,我为每个 A、B、C、D 创建了一个 Team City 项目
- 然后我为每个项目创建了一个构建定义,它包含恢复和构建两个步骤
- 还原和构建步骤指定指定项目的 project.json 文件(例如在项目 B 的情况下它将是 "src\B\project.json"
- 我为项目 D 添加了额外的步骤,它是发布的,因为它必须发布到 IIS。
快照依赖项
任何基于引用项目的构建都应触发依赖项目的构建,以确保更改不会导致其他项目中断。
对于这种情况,我创建了以下快照依赖项:
- B 具有对 A 的快照依赖性以及对该依赖性的 Finished Build Trigger
- C 具有对 B 的快照依赖性以及对该依赖性的 Finished Build Trigger
- D 具有依赖于 C 和 A 的快照以及基于这些依赖项的 Finished Buid 触发器
如果我在 A 上触发构建,它会在构建链上触发另一个构建(即 A->B ->C -> D)。
那么,如果我触发C,它只会触发D。
但是,如果我从 B 或 C 开始,而没有先触发 A,则 B 的构建会失败,因为它首先需要项目 A 输出。
问题:
- 对于构建配置步骤,我是否以正确的方式进行,考虑到我还有其他项目(F、G、H)也引用了 A 和 B。
- 如果需要开始构建项目 B,如果之前没有构建项目 A,如何配置它先构建项目 A。
解决方案是配置B到A、C到B、D到C的快照依赖。但是D到A的依赖过大,因为整个构建链运行s在同一个版本上。
如果构建 B 被触发,那么所有构建链(A 和 B)都应该。可以有一个选项 "Do not run new build if there is a suitable one" 启用。
在这种情况下,构建 B 将重用合适的构建 A(如果存在)。
关于触发器:
- 不建议在这种情况下使用完成触发器。触发
整个构建链,那么我们应该 运行 构建 D,这样它就会
将整个链添加到队列中。
- 要在 VCS 根更改时自动触发构建链,
使用选项在 D 构建配置中仅配置一个 VCS 触发器
"Trigger on changes in snapshot dependencies".
在这种情况下,如果任何构建(A、B、C 或 D)中存在 VCS 更改,将触发整个构建链。
我正在使用 TeamCity v10 自动构建我的 .net 核心解决方案:
假设我有以下项目:
A -> B -> C ->D
A->D
箭头表示项目B引用了项目A,需要先恢复构建。
配置
项目D是最后要发布的web应用(同时需要C和A)
- 为此,我为每个 A、B、C、D 创建了一个 Team City 项目
- 然后我为每个项目创建了一个构建定义,它包含恢复和构建两个步骤
- 还原和构建步骤指定指定项目的 project.json 文件(例如在项目 B 的情况下它将是 "src\B\project.json"
- 我为项目 D 添加了额外的步骤,它是发布的,因为它必须发布到 IIS。
快照依赖项
任何基于引用项目的构建都应触发依赖项目的构建,以确保更改不会导致其他项目中断。
对于这种情况,我创建了以下快照依赖项:
- B 具有对 A 的快照依赖性以及对该依赖性的 Finished Build Trigger
- C 具有对 B 的快照依赖性以及对该依赖性的 Finished Build Trigger
- D 具有依赖于 C 和 A 的快照以及基于这些依赖项的 Finished Buid 触发器
如果我在 A 上触发构建,它会在构建链上触发另一个构建(即 A->B ->C -> D)。
那么,如果我触发C,它只会触发D。
但是,如果我从 B 或 C 开始,而没有先触发 A,则 B 的构建会失败,因为它首先需要项目 A 输出。
问题:
- 对于构建配置步骤,我是否以正确的方式进行,考虑到我还有其他项目(F、G、H)也引用了 A 和 B。
- 如果需要开始构建项目 B,如果之前没有构建项目 A,如何配置它先构建项目 A。
解决方案是配置B到A、C到B、D到C的快照依赖。但是D到A的依赖过大,因为整个构建链运行s在同一个版本上。
如果构建 B 被触发,那么所有构建链(A 和 B)都应该。可以有一个选项 "Do not run new build if there is a suitable one" 启用。 在这种情况下,构建 B 将重用合适的构建 A(如果存在)。
关于触发器:
- 不建议在这种情况下使用完成触发器。触发 整个构建链,那么我们应该 运行 构建 D,这样它就会 将整个链添加到队列中。
- 要在 VCS 根更改时自动触发构建链, 使用选项在 D 构建配置中仅配置一个 VCS 触发器 "Trigger on changes in snapshot dependencies".
在这种情况下,如果任何构建(A、B、C 或 D)中存在 VCS 更改,将触发整个构建链。