如何使用批处理文件访问TFS构建代理文件夹路径?
我从构建工作流调用runcript工具(调用windows batchfile)。 我尝试使用环境变量BUILD_REPOSITORY_LOCALPATH($(BUILD_REPOSITORY_LOCALPATH),$ env:BUILD_REPOSITORY_LOCALPATH)但是他们提出任何结果。 需要一些帮助。
答案 0 :(得分:1)
我使用了另一种解决方法,而不是通过工作区获取。从sourceDirectory文件夹我深入查找我的解决方案项目文件,包含我的解决方案项目的路径是我需要的本地目录路径
从批处理文件中我调用我的exe并传递%TF_BUILD_SOURCESDIRECTORY%作为参数。
string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory) //targetdirectory would be the input parameter from batch file
for (int i = 0; i < subdirectoryEntries.Length ; i++)
{
//My root folder always contains a specific folder with name MyFolder and a file Myfile.sln
if (subdirectoryEntries[i].ToString().ToLower().Contains(@"MyFolder"))
{
Console.Writeline("My source code path is " + targetDirectory);
}
//Similarly I check for Myfile.sln and then get my path.
}
这可能是一种非常粗暴的方式,这对我有用。
答案 1 :(得分:0)
您要查找的变量是TF_BUILD_SOURCESDIRECTORY
。请参阅XAML build documentation。
答案 2 :(得分:0)
TF_BUILD_SOURCESDIRECTORY :构建代理工作目录的sources子目录。该目录包含您的源代码。例如:C:\Build\BuildBot3\CoolApp\CIBuild\src
。
如果您想获得C:\TFS_Build\src\V9
,它只是本地路径:您已在服务器上映射服务器路径的路径。没有任何内置TF_BUILD environment variables可以达到您的要求。
您可以使用TFS API获取相关信息,首先获取构建服务器工作区的工作区信息,然后执行get选项,示例代码供您参考:
// Get the workspace information for the build server's workspace var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(sourcesDirectory); // Get the TFS Team Project Collection information from the workspace cache // information then load the TFS workspace itself. var server = new TfsTeamProjectCollection(workspaceInfo.serverUri); var workspace = workspaceInfo.GetWorkspace(server);
拥有工作区后,您可以查询它以获取路径映射。它 将根据服务器从本地路径进行必要的转换 您的工作区映射。例如:
workspace.GetServerItemForLocalItem("C:\TFS_Build\src\V9");
和
workspace.GetLocalItemForServerItem("$/DEV/V9");
但是,如果您的构建定义,此机制将起作用 实际上设置工作区以包含这些文件。
更多详情请参阅此类似问题:How do I resolve the root and relative paths of TFS folders on the server?
来自OP的更新:
从sourceDirectory文件夹我深入查找我的解决方案项目 文件,包含我的解决方案项目的路径是本地目录 我需要的路径