2015-10-07 128 views
0

我在TFS構建中定製了代碼活動。其中之一是TFS Build不知道的後臺線程。TFS構建(2013) - 構建停止處理

我想找出是否有該線程檢查是否有「停止建設」已請求的方式。 我目前使用:(即在當前構建狀態檢查而無需CodeActivityContext)

(因爲這仍然讓後續任務,我不能使用AsyncCodeActivity(和它的取消機構)NB)心跳系統,並依賴TFS Build流程循環中的熱點超時,但這並非萬無一失。 IBuildDetail.BuildFinished存在,但是如果構建完成,還有catch 22,你如何獲得iBuildDetail?由於代碼活動是「無狀態的」,因此使用先前的「CodeActivityContext」來獲取iBuildDetail不起作用,即上下文不再存在。 我能到_buildServer.GetBuild(_buildUri)的代碼路徑 ,但無法找到如何建立你的當前builduri

感謝(不要與構建定義,服務器,代理或數字混淆)

回答

1

好消息,我找到了解決辦法

我在BuildUri長期追了上來,原來在iBuildDetails的底部,是「開放的」

這原來是BuildUri

像這樣的代碼工作... static private Uri _buildUri; static private IBuildServer _buildServer;

...

protected override void Execute(CodeActivityContext context) 
    { 
     // Obtain the runtime value of the Text input argument 
     string ScriptPath = context.GetValue(this.InScriptPath); 
     _thisContext = context; 

     IBuildDetail buildDetail = _thisContext.GetExtension<IBuildDetail>(); 
     _buildUri = buildDetail.Uri; // This is the complete string 
     _buildServer = buildDetail.BuildServer; 

...... 在後臺的TThread

  try 
      { 
       IBuildDetail buildDetail = _buildServer.GetBuild(_buildUri); // this does not work as it is not the BuildUri 
       if (buildDetail != null) 
       { 
        if (buildDetail.Status == BuildStatus.Stopped) 
        { 
          TerminateProcess(); 
        } 
       } 
      } 
      catch (Exception Ex) 
      { 
        TerminateProcess(); 
      }