TFS 2015 Gated Build触发发布及动态禁用构建步骤咨询
针对TFS 2015 Update 1构建问题的解决方案
一、动态控制Publish Artifact步骤仅在CI/定时构建执行
TFS 2015 Update 1没有内置的步骤条件可视化配置,但我们可以通过环境变量+自定义变量+PowerShell脚本实现动态禁用:
添加自定义构建变量
在构建定义的"Variables"标签页,新增一个变量SkipPublishArtifact,默认值设为False。插入判断构建类型的PowerShell脚本步骤
在Publish Artifact步骤之前添加一个PowerShell脚本任务,脚本内容如下:# 获取当前构建的触发原因环境变量 $triggerReason = $env:BUILD_REASON # 判断是否为Gated Checkin构建,是则设置跳过变量为True if ($triggerReason -eq "Gated") { Write-Host "##vso[task.setvariable variable=SkipPublishArtifact]True" Write-Host "当前为Gated构建,将跳过Publish Artifact步骤" } else { Write-Host "##vso[task.setvariable variable=SkipPublishArtifact]False" Write-Host "当前为CI/定时构建,将执行Publish Artifact步骤" }注:TFS 2015的
BUILD_REASON取值对应:CI构建为IndividualCI/BatchedCI,定时构建为Schedule,Gated构建为Gated。配置Publish Artifact步骤的执行条件
编辑Publish Artifact步骤,在"Run this task"下拉菜单中选择Custom condition,输入以下条件表达式:eq(variables['SkipPublishArtifact'], 'False')这样只有当变量为
False时(即CI/定时构建),才会执行该步骤。
二、解决Gated Job空Drop仍触发CI/CD发布的问题
Gated构建本质是预检查,不应该触发后续发布,问题通常出在发布触发器的配置上,可通过以下两种方式解决:
方式1:在发布触发器中过滤Gated构建
打开对应的发布定义,进入"Triggers"标签页:
- 找到"Build completion"触发器,选择目标构建定义后,点击Filters按钮。
- 添加一个过滤条件:
Build.Reason不等于Gated。
这样只有非Gated的构建完成后,才会触发发布流程。
方式2:过滤无工件的构建
如果希望进一步排除空Drop的构建,可以在发布触发器的Filters中再添加一个条件:
Build.Artifacts.Count大于0
这样只有生成了有效工件的构建,才会触发发布。
额外检查点
确认构建定义的"Triggers"标签页中,Gated Checkin的设置没有同时勾选CI触发的选项,避免Gated构建被误识别为CI构建。
内容的提问来源于stack exchange,提问作者Avinash Sharma
相关产品推荐
相关产品推荐

