tfs - release vsts
Release Management establece compilaciones para retener indefinidamente (3)
A partir de RM para TFS 2013.3, esto no es posible. Según Teodora Stanev en esta publicación , esto es por diseño.
No dude en publicar una solicitud en el sitio de Visual Studio UserVoice
Estamos utilizando la herramienta de administración de versiones de Microsoft para automatizar la implementación de nuestra solución en nuestros diversos servidores de desarrollo. Esta herramienta es ideal para nosotros porque puede realizar implementaciones más complicadas que abarcan varios servidores. En este sentido, está funcionando bien y todo se está implementando correctamente.
Un problema menor es que luego de que Release Management implementa automáticamente una compilación, establece la compilación en "Retener indefinidamente", que se indica mediante el icono de bloqueo. Debido a que estamos haciendo una implementación continua, conservamos una gran cantidad de compilaciones y la política de retención de Build Definition se anula. Por lo tanto, tengo que entrar periódicamente y destacar todas las compilaciones anteriores y deseleccionar Conservar indefinidamente.
Debido a que no estamos implementando el último desarrollador con la Gestión de versiones (desafortunadamente no podemos), no necesitamos mantener todas estas construcciones de desarrollo.
¿Hay alguna manera de cambiar la Gestión de lanzamientos para que no configure las construcciones para retener indefinidamente?
Actualización: como esto no es posible en la actualidad, si desea esta función, vóyelo en UserVoice: https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6537614-allow-retain-indefinitely -no-ser-establecer
Release Management sigue el modelo de Lab Management, por lo que si se implementa una compilación, se conserva indefinidamente.
Esto le permite modificar la calidad de compilación, etc. a medida que se verifica y firma la compilación, y luego puede promocionar / hacer lo que quiera con esa compilación sin temor a que la política de retención lo elimine.
solo tiene que hacerlo como una tarea de administración diaria / semanal / mensual, elija su compilación de la lista desplegable en la pantalla de compilación y luego demuéstrelo todo.
resalta todas las compilaciones y luego haz clic en el botón Eliminar retención.
si te molesta tanto podrías escribir una secuencia de comandos para encontrar todas las compilaciones y luego eliminar el bloqueo.
psudo:
BuildDefinition.KeepForever = False;
Tengo una solución para esto, más bien una solución.
Personalicé nuestra definición de compilación con la siguiente secuencia (para TFS 2013) al comienzo del flujo de trabajo. Esta secuencia capta todas las versiones correctas para la definición y borra el Retener indefinidamente.
Esto significa que solo la última versión ejecutada tendrá la bandera. También significa que no puede establecer una compilación como retener indefinidamente para esa definición. Eso está bien para nosotros en esta situación específica, como lo es para las construcciones de integración continua (como el póster).
Editar: cambiar para incluir todas las compilaciones (solo se realizó con éxito) ya que una compilación está marcada como fallida y aún está configurada para retenerse indefinidamente si la compilación tiene éxito pero la versión falla.
<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>