我可以像这样访问它:
BuildDefinition.Workspace.Mappings.First(m => m.LocalItem != null).LocalItem
它给了我第一个活动映射的本地路径,我很好。问题是它返回当前的本地路径,而不是历史路径,这对我来说是个问题。
如何提取构建过程中使用的实际本地路径?
我正在使用TFS 2013。
编辑1
让我举个例子。
假设:
BuildDef
映射到某个代理D:\TFS
醇>
情景:
BuildDef
的版本。让它为Build1
BuildDef
到指向C:\TFS
的映射
BuildDef
的版本。让它为Build2
现在,假设我有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();
}
答案 0 :(得分:1)
IBuildDetail.BuildDefinition.Workspace.Mappings 返回构建定义的当前映射,它不会根据您查询的构建进行更改。
我使用的另一种方法是在构建期间通过 IBuildDetail.Information.GetNode(13).Fields [" LocalPath"] 获取解决方案文件的本地路径。这将返回解决方案文件的整个路径,但在更新构建定义后不会更改。结果如下(使用不同映射的相同定义):
代码供您参考:
json.dumps(objectName.__dict__)
答案 1 :(得分:0)
似乎你想获得构建代理工作目录。您可以查看IBuildAgent.BuildDirectory Property。