我有一个解决的办法,而不是一种解决方法。
我已经在工作流程开始时使用以下序列(针对TFS 2013)自定义了我们的构建定义。这个序列抓取定义的所有成功构建并清除无限期保留。
这意味着只有上次运行的版本才会有标志。这也意味着您无法为该定义无限期地将构建设置为保留。对于我们来说,在这种特定情况下这是可以的,因为它是用于持续集成构建(如海报)。
编辑:更改为包括所有作品(仅是成功的),作为为失败构建标记,仍然设置为在构建成功,但无法释放无限期保留。
<Sequence DisplayName="Cleanup: Clear 'Retain Indefinitely' from previous builds">
<Sequence.Variables>
<Variable x:TypeArguments="mtbc:IBuildDetail" Name="localBuildDetail" />
<Variable x:TypeArguments="mtbc:IBuildDetailSpec" Name="localBuildDetailSpec" />
<Variable x:TypeArguments="mtbc:IBuildQueryResult" Name="localBuildQueryResult" />
</Sequence.Variables>
<mtbwa:GetBuildDetail DisplayName="Get the Build Details" Result="[localBuildDetail]" />
<InvokeMethod DisplayName="Create the Build Detail Spec" MethodName="CreateBuildDetailSpec">
<InvokeMethod.TargetObject>
<InArgument x:TypeArguments="mtbc:IBuildServer">[localBuildDetail.BuildServer]</InArgument>
</InvokeMethod.TargetObject>
<InvokeMethod.Result>
<OutArgument x:TypeArguments="mtbc:IBuildDetailSpec">[localBuildDetailSpec]</OutArgument>
</InvokeMethod.Result>
<InArgument x:TypeArguments="x:String">[localBuildDetail.TeamProject]</InArgument>
</InvokeMethod>
<Assign DisplayName="Setting Query Order Descending">
<Assign.To>
<OutArgument x:TypeArguments="mtbc:BuildQueryOrder">[localBuildDetailSpec.QueryOrder]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="mtbc:BuildQueryOrder">FinishTimeDescending</InArgument>
</Assign.Value>
</Assign>
<Assign DisplayName="Setting Build Definition">
<Assign.To>
<OutArgument x:TypeArguments="x:String">[localBuildDetailSpec.DefinitionSpec.Name]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:String">[localBuildDetail.BuildDefinition.Name]</InArgument>
</Assign.Value>
</Assign>
<Assign DisplayName="Setting Query Type to All Builds">
<Assign.To>
<OutArgument x:TypeArguments="mtbc:BuildStatus">[localBuildDetailSpec.Status]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="mtbc:BuildStatus">All</InArgument>
</Assign.Value>
</Assign>
<InvokeMethod DisplayName="Getting Previous Builds" MethodName="QueryBuilds">
<InvokeMethod.TargetObject>
<InArgument x:TypeArguments="mtbc:IBuildServer">[localBuildDetail.BuildServer]</InArgument>
</InvokeMethod.TargetObject>
<InvokeMethod.Result>
<OutArgument x:TypeArguments="mtbc:IBuildQueryResult">[localBuildQueryResult]</OutArgument>
</InvokeMethod.Result>
<InArgument x:TypeArguments="mtbc:IBuildDetailSpec">[localBuildDetailSpec]</InArgument>
</InvokeMethod>
<ForEach DisplayName="Loop through all builds and undo 'Retain Indefinitely' set by Release Management."
x:TypeArguments="mtbc:IBuildDetail"
Values="[localBuildQueryResult.Builds]">
<ActivityAction x:TypeArguments="mtbc:IBuildDetail">
<ActivityAction.Argument>
<DelegateInArgument x:TypeArguments="mtbc:IBuildDetail" Name="localBuild" />
</ActivityAction.Argument>
<Sequence DisplayName="Checking Build Next Build">
<If Condition="[localBuild.KeepForever = True]" DisplayName="If the build is marked 'Retain Indefinitely'">
<If.Then>
<Sequence DisplayName="Updating Build Details">
<Assign DisplayName="Setting KeepForver to false">
<Assign.To>
<OutArgument x:TypeArguments="x:Boolean">[localBuild.KeepForever]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:Boolean">false</InArgument>
</Assign.Value>
</Assign>
<InvokeMethod DisplayName="Saving Build Details" MethodName="Save">
<InvokeMethod.TargetObject>
<InArgument x:TypeArguments="mtbc:IBuildDetail">[localBuild]</InArgument>
</InvokeMethod.TargetObject>
</InvokeMethod>
</Sequence>
</If.Then>
</If>
</Sequence>
</ActivityAction>
</ForEach>
</Sequence>
根据您的建议,我已经张贴上UserVoice的请求:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6537614-allow-retain-indefinitely-to-not -be-set – Redbaran 2014-10-08 14:47:49
如果您不介意修改您的构建模板,请参阅下面的解决方法。 – rshadman 2015-05-18 14:00:19