我们正在使用Microsoft的发布管理工具来自动部署我们的各种开发服务器的解决方案。此工具非常适合我们,因为它可以执行跨多个服务器的更复杂的部署。从这个意义上说,它工作正常,一切都正确部署。
一个小问题是,在发布管理自动部署构建之后,它会将构建设置为“无限期保留”,这由“锁定”图标指示。由于我们正在进行持续部署,因此我们保留了大量构建,并且覆盖了构建定义的保留策略。因此,我必须定期进行并突出显示所有以前的版本,并取消选择“无限期保留”。
因为我们没有使用Release Management部署过去的dev(我们很遗憾不允许),所以我们不需要保留所有这些开发版本。
有没有办法更改版本管理,以便它不会将版本设置为无限期保留?
更新:由于目前无法使用此功能,如果您需要此功能,请在UserVoice上投票:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6537614-allow-retain-indefinitely-to-not-be-set
答案 0 :(得分:4)
从TFS 2013.3的RM开始,这是不可能的。根据Teodora Stanev的说法[{3}},这是设计的。
随时在post
上发布请求答案 1 :(得分:1)
我有一个解决方案,而不是解决方法。
我已在工作流程的开头使用以下序列(针对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>
答案 2 :(得分:0)
发布管理遵循实验室管理模型,如果部署了Build,它将被无限期保留。
这允许您在构建验证和签名时更改构建质量等,然后您可以使用该构建升级/执行任何操作,而不必担心它将被保留策略删除。
您只需要将其作为每日/每周/每月管理任务,从构建屏幕的下拉列表中选择您的构建,然后显示所有内容。
突出显示所有版本,然后点击删除保留按钮。
如果它困扰你那么多,你可以写一个脚本来找到所有的构建,然后删除锁。
psudo:
BuildDefinition.KeepForever = False;