TFS Build(2013) - 构建停止处理

时间:2015-10-07 00:58:57

标签: tfs build

我在TFS Build中有自定义代码活动。其中一个是TFS Build不知道的后台线程。

  
    

我想知道此线程是否有办法检查是否已请求“停止构建”。 (即检查当前构建状态而不需要CodeActivityContext)

  

(注意:我不能使用AsyncCodeActivity(及其取消机制),因为这仍会阻止后续任务) 我目前正在使用心跳系统并依赖于TFS Build流循环的热量超时,但这不是万无一失的。 IBuildDetail.BuildFinished存在但是如果构建完成则有捕获22,你如何得到iBuildDetail?

因为代码活动是“无状态的”,所以使用先前的“CodeActivityContext”来获取iBuildDetail不起作用,即上下文不再存在。 我可以到_buildServer.GetBuild(_buildUri)的代码路径 但无法找到如何建立您当前的builduri(不要与构建定义,服务器,代理或数字混淆)

由于

1 个答案:

答案 0 :(得分:1)

好消息,我找到了解决方案

我陷入了BuildUri术语,它发现在iBuildDetails的底部,是" Uri"

原来是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();
            }