发布管理将构建设置为无限期保留

时间:2014-10-08 14:08:02

标签: tfs tfsbuild release-management team-build ms-release-management

我们正在使用Microsoft的发布管理工具来自动部署我们的各种开发服务器的解决方案。此工具非常适合我们,因为它可以执行跨多个服务器的更复杂的部署。从这个意义上说,它工作正常,一切都正确部署。

一个小问题是,在发布管理自动部署构建之后,它会将构建设置为“无限期保留”,这由“锁定”图标指示。由于我们正在进行持续部署,因此我们保留了大量构建,并且覆盖了构建定义的保留策略。因此,我必须定期进行并突出显示所有以前的版本,并取消选择“无限期保留”。

因为我们没有使用Release Management部署过去的dev(我们很遗憾不允许),所以我们不需要保留所有这些开发版本。

有没有办法更改版本管理,以便它不会将版本设置为无限期保留?

更新:由于目前无法使用此功能,如果您需要此功能,请在UserVoice上投票:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6537614-allow-retain-indefinitely-to-not-be-set

3 个答案:

答案 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;