tfs रिलीज़ मैनेजमेंट सेट अनिश्चित काल तक बनाए रखने के लिए बनाता है




tfsbuild release-management (3)

रिलीज मैनेजमेंट लैब प्रबंधन के मॉडल का अनुसरण करता है, जिससे एक बिल्ड तैनात किया जाता है, इसे अनिश्चित रूप से बनाए रखा जाता है।

यह आपको निर्माण की गुणवत्ता आदि को बदलने की अनुमति देता है क्योंकि निर्माण को सत्यापित और हस्ताक्षरित किया जाता है, फिर आप उस डर के बिना उस बिल्ड के प्रचार / प्रोत्साहन कर सकते हैं जो उसे अवधारण नीति द्वारा हटा दिया जाएगा।

आपको इसे दैनिक / साप्ताहिक / मासिक व्यवस्थापक कार्य के रूप में करने की आवश्यकता है, बिल्ड स्क्रीन में ड्रॉप डाउन सूची से अपना निर्माण चुनें और फिर सभी दिखाएं।

सभी बिल्ड को हाइलाइट करें और फिर प्रतिधारण बटन हटाएं पर क्लिक करें।

अगर यह आपको परेशान करता है कि आप सभी बिल्ड्स को खोजने के लिए एक स्क्रिप्ट लिख सकते हैं और फिर लॉक को हटा सकते हैं

psudo:

BuildDefinition.KeepForever = False;

हम अपने विभिन्न देव सर्वरों के हमारे समाधान की तैनाती को स्वचालित बनाने के लिए माइक्रोसॉफ्ट के रिलीज़ प्रबंधन टूल का उपयोग कर रहे हैं। यह टूल हमारे लिए आदर्श है क्योंकि यह अधिक जटिल तैनाती कर सकता है जो एकाधिक सर्वरों को चलाता है। इस मायने में, यह ठीक काम कर रहा है और सब कुछ ठीक से तैनात है।

एक छोटी सी समस्या यह है कि रिलीज प्रबंधन के बाद स्वचालित रूप से एक बिल्ड को तैनात किया जाता है, तो यह "अनिश्चितकालीन रूप से बनाए रखें" को सेट करता है, जिसे लॉक आइकन द्वारा दर्शाया गया है। चूंकि हम निरंतर तैनाती कर रहे हैं, इसलिए हम बड़ी संख्या में निर्माण कर रहे हैं और बिल्ड परिभाषा की अवधारण नीति ओवरराइड की गई है। इसलिए मुझे समय-समय पर जाना होगा और पिछले सभी बिल्डों को उजागर करना होगा और अनिर्दिष्ट रूप से बनाए रखना रद्द करना होगा

चूंकि हम रिलीज मैनेजमेंट (हम दुर्भाग्य से अनुमति नहीं है) के साथ पिछले देव की तैनाती नहीं कर रहे हैं, हमें इन सभी देवों को बनाए रखने की आवश्यकता नहीं है

क्या रिलीज़ मैनेजमेंट को बदलने का एक तरीका है जिससे कि वह अनिश्चित काल तक बनाए रखने के लिए सेट नहीं करता?

अद्यतन: चूंकि यह वर्तमान में संभव नहीं है, इसलिए यदि आप यह सुविधा चाहें, तो कृपया इसके लिए UserVoice पर वोट दें: https://visualstudio.uservoice.com/forums/121579- विज़ुअल- स्टूडियो / सुझाव / 6537614 -allow-retain-indefinitely करने वाली नहीं होने वाली सेट


टीएफएस 2013.3 के आरएम के लिए, यह संभव नहीं है। इस पोस्ट पर टेओडोरा स्टेनेव के अनुसार, यह डिजाइन द्वारा किया गया है

Visual Studio UserVoice साइट पर एक अनुरोध पोस्ट करने के लिए स्वतंत्र महसूस करें


मेरे पास इसका समाधान है, बल्कि एक वैकल्पिक हल

मैंने वर्कफ़्लो की शुरुआत में निम्नलिखित अनुक्रम (टीएफएस 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>