3

Мы используем средство управления выпуском Microsoft для автоматизации развертывания нашего решения на наших различных dev-серверах. Этот инструмент идеально подходит для нас, поскольку он может выполнять более сложные развертывания, охватывающие несколько серверов. В этом смысле он работает нормально, и все развертывается правильно.Системы управления релизами строят для сохранения неопределенно

Недостаточная проблема заключается в том, что после того, как Release Management автоматически развертывает сборку, она устанавливает сборку в «Сохранять неопределенно», что обозначено значком Lock. Поскольку мы выполняем непрерывное развертывание, мы сохраняем большое количество построений и переопределяем политику хранения Build Definition. Поэтому я должен периодически посещать и выделять все предыдущие сборки и отменить выбор «Сохранять неопределенно».

Поскольку мы не развертываем прошлый разработчик с управлением выпуском (нам, к сожалению, не разрешено), нам не нужно поддерживать все эти сборки разработчиков.

Есть ли способ изменить Управление выпуском, чтобы он не устанавливал сборки для сохранения неопределенно?

Update: Так как это не возможно в настоящее время, если вы хотели бы эту возможность, пожалуйста, голосовать за него на UserVoice: https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6537614-allow-retain-indefinitely-to-not-be-set

ответ

3

Как РМ для TFS 2013,3, это не представляется возможным. По словам Теодоры Станев на этом post, это по дизайну.

Вы можете отправить запрос по управлению Отпустить Visual Studio UserVoice site

+0

За ваше предложение, я отправил запрос на UserVoice: https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6537614-allow-retain-indefinitely-to-not -be-set – Redbaran

+0

Если вы не возражаете, чтобы изменить шаблон сборки, см. мое обходное решение ниже. – rshadman

0

следует модели управления Lab, в результате чего, если Сложение развертывается она сохраняется на неопределенный срок.

Это позволяет изменять качество сборки и т. Д., Когда сборка проверяется и завершается, вы можете затем продвигать/делать что-либо с этой сборкой, не опасаясь, что она будет удалена политикой хранения.

Вам просто нужно сделать это как ежедневную/еженедельную/ежемесячную задачу администратора, выберите свою сборку из выпадающего списка на экране сборки, а затем покажите все.

выделите все сборки, а затем нажмите кнопку удаления удерживания.

Если это вас беспокоит, вы можете написать сценарий, чтобы найти все сборки, а затем удалить блокировку.

psudo:

BuildDefinition.KeepForever = False; 
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>