如何在TeamCity中让A获取B的构建编号且不触发B构建
解决TeamCity中构建配置A引用B的构建编号且不触发B重构的问题
快照依赖之所以不适用,是因为它本质是基于版本控制的快照关联,默认会检查依赖项的变更并触发构建,不符合你“不触发B重构、仅用B最新构建编号”的需求。下面是几个可行的方案:
方案1:使用工件依赖(Artifact Dependency)
这是最直接的官方方案,无需额外脚本:
- 打开构建配置A的设置,进入Dependencies标签页
- 添加新的Artifact Dependency,选择构建配置B
- 在"Build to use"选项中选择Latest successful build(也可根据需求选Latest finished等)
- 关键操作:在"Options"区域,取消勾选Trigger a build on dependency,确保A构建时不会触发B的新构建
- 配置完成后,A的构建参数中会自动注入B的构建编号,你可以在构建步骤中直接使用变量
%dep.<B的构建配置ID>.build.number%(将<B的构建配置ID>替换为实际值,比如B的ID是MyProject_B,就用%dep.MyProject_B.build.number%)
方案2:通过TeamCity REST API获取B的最新构建编号
如果需要更灵活的控制,可在A的构建步骤中调用API获取:
- 在A的脚本步骤(如Shell/PowerShell)中添加请求命令,示例(Shell):
B_BUILD_NUMBER=$(curl -u %system.teamcity.auth.userId%:%system.teamcity.auth.password% "http://<你的TeamCity服务器地址>/app/rest/builds/buildType:<B的构建配置ID>,status:SUCCESS,count:1" | grep -oP '(?<=<number>).*?(?=</number>)') echo "##teamcity[setParameter name='b.build.number' value='$B_BUILD_NUMBER']" - 上述命令会获取B最新成功构建的编号,并用TeamCity服务消息将其设置为A的构建参数,后续步骤直接用
%b.build.number%即可 - 注意:确保构建代理能访问TeamCity服务器,且内置的
%system.teamcity.auth.userId%和%system.teamcity.auth.password%有足够权限读取构建信息
方案3:配置依赖属性传递
如果已使用工件依赖,可显式配置属性传递让变量更直观:
- 在A的工件依赖设置中,找到Properties and environment variables区域
- 添加新属性,名称填
b.build.number,值填%dep.<B的构建配置ID>.build.number% - 完成后A的构建参数中会生成这个自定义变量,后续步骤直接调用即可
内容的提问来源于stack exchange,提问作者Milad Sadeghi
相关产品推荐
相关产品推荐

