给定一个IBuildDetail实例,我如何找出用于构建代码的本地路径?

时间:2016-02-05 03:06:11

标签: tfs tfs2013

我可以像这样访问它:

BuildDefinition.Workspace.Mappings.First(m => m.LocalItem != null).LocalItem

它给了我第一个活动映射的本地路径,我很好。问题是它返回当前的本地路径,而不是历史路径,这对我来说是个问题。

如何提取构建过程中使用的实际本地路径?

我正在使用TFS 2013。

编辑1

让我举个例子。

假设:

  1. 构建定义BuildDef映射到某个代理
  2. 上的文件夹D:\TFS

    情景:

    1. 运行BuildDef的版本。让它为Build1
    2. 在同一座席
    3. 上更改BuildDef到指向C:\TFS的映射
    4. 运行BuildDef的版本。让它为Build2
    5. 现在,假设我有IBuildDetail描述构建Build1。我正在寻找一种方法来提取构建时的映射。现在,我所知道的唯一方法是检查

      IBuildDetail.BuildDefinition.Workspace.Mappings
      

      集合,但它返回当前存储在构建定义中的当前映射,该映射指向C:\TFS。现在这不是我要找的,毕竟Build1正在处理D:\TFS

      编辑2

      我使用以下代码来获取构建:

      var spec = buildServer.CreateBuildDetailSpec(projectName);
      spec.QueryOrder = BuildQueryOrder.FinishTimeDescending;
      spec.MinFinishTime = DateTime.Now.Subtract(minFinishTimeOfs);
      spec.MaxFinishTime = DateTime.Now.Subtract(maxFinishTimeOfs);
      if (reason != null)
      {
          spec.Reason = reason.Value;
      }
      if (status != null)
      {
          spec.Status = status.Value;
      }
      if (withBuildErrors || errorKeywords != null)
      {
          spec.InformationTypes = new[] { InformationTypes.BuildError };
      }
      var buildDetails = buildServer.QueryBuilds(spec).Builds;
      if (errorKeywords != null)
      {
          buildDetails = buildDetails.Where(res => InformationNodeConverters.GetBuildErrors(res).Any(e => errorKeywords.Any(keyword => e.Message.Contains(keyword)))).ToArray();
      }
      if (controllerName != null)
      {
          buildDetails = buildDetails.Where(res => string.Equals(GetBuildControllerName(res), controllerName, StringComparison.OrdinalIgnoreCase)).ToArray();
      }
      

2 个答案:

答案 0 :(得分:1)

IBuildDetail.BuildDefinition.Workspace.Mappings 返回构建定义的当前映射,它不会根据您查询的构建进行更改。

我使用的另一种方法是在构建期间通过 IBuildDetail.Information.GetNode(13).Fields [" LocalPath"] 获取解决方案文件的本地路径。这将返回解决方案文件的整个路径,但在更新构建定义后不会更改。结果如下(使用不同映射的相同定义): enter image description here

代码供您参考:

json.dumps(objectName.__dict__)

答案 1 :(得分:0)

似乎你想获得构建代理工作目录。您可以查看IBuildAgent.BuildDirectory Property