2015-10-07 129 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(); 
      }