我们使用 Bamboo 作为我们的 CI 环境,并且有几个构建依赖项(使用手动依赖项管理和依赖项阻止功能)。我们使用 SVN 轮询作为我们的构建策略,所有项目都具有相同的轮询频率。
假设我们有以下构建计划结构:
- 项目 A 的父构建计划 PA,
- 项目 B 的子构建计划 CB 依赖于 PA,已选择“如果父计划有未构建的更改则阻止构建”作为依赖项阻止策略
我们的目标是建立一个依赖树,以便:
- 如果项目B应该建,首先检查A是否有变化,如果有,先建PA并阻塞CB,PA完成后立即恢复CB
- 对手动和自动构建执行此操作(由于 SVN 轮询而触发的构建)
上面描述的目标似乎正是依赖阻止功能(参见http://confluence.atlassian.com/display/BAMBOO/Setting+up+Build+Dependencies)的全部意义所在。但是,我要么有配置错误,要么没有正确理解此功能。
为了测试,我构建了以下案例:
- 在 A 中创建一个类 DummyClassA
- 在 B 中创建一个引用 DummyClassA 的类 DummyClassB 以便首先为项目 B 构建项目 A 以编译 *手动调用 CB
本来以为CB通过上面的配置,意识到父项目有变化,需要阻塞CB,建PA,恢复CB。但是,发生的事情是尝试构建 CB 并且明显失败(编译错误),因为项目 B 尚不知道 DummyClassA。当手动 CB 时,似乎没有对父项目 A 的 SVN 进行主动检查触发,正确吗?
我在这里想念什么?我很确定必须有一个简单的解决方案,因为几乎每个严肃的软件项目都会出现这种情况,所以我希望 Bamboo 能够开箱即用地正确处理这个问题。任何人都可以对此有所了解吗?
最好的,克里斯