Получить путь к папке агента сборки в сборке TFS - PullRequest
0 голосов
/ 11 июня 2018

Как получить доступ к пути к папке агента сборки TFS при использовании пакетного файла?

enter image description here

Я вызываю инструмент RunScript из рабочего процесса сборки (вызывая пакетный файл Windows).Я пытался использовать переменную среды BUILD_REPOSITORY_LOCALPATH ($ (BUILD_REPOSITORY_LOCALPATH), $ env: BUILD_REPOSITORY_LOCALPATH), но они не дают никакого результата.Нужна помощь в этом.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

TF_BUILD_SOURCESDIRECTORY : Подкаталог источников рабочего каталога агента сборки.Этот каталог содержит ваш исходный код.Например: C:\Build\BuildBot3\CoolApp\CIBuild\src.

Если вы хотите получить C:\TFS_Build\src\V9, это просто локальный путь : путь, который вы указали на пути к серверу на вашем компьютере.Нет никаких встроенных переменных среды TF_BUILD , которые могли бы удовлетворить ваши требования.

Вы можете использовать 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");

Этот механизм будет работать, однако, только если ваше определение сборки на самом деле устанавливает рабочее пространство для включения этих файлов.

Подробнее см. Этот похожий вопрос: Как разрешить корневые и относительные пути папок TFS на сервере?


обновление отOP:

Из папки sourceDirectory я углубляюсь, чтобы найти файл проекта решения, путь, содержащий проект решения, - это путь к локальному каталогу, который мне нужен

0 голосов
/ 18 июня 2018

Я использовал другой обходной путь для этого вместо того, чтобы добраться до рабочего пространства.Из папки 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.             
        }

Это может быть очень грубый способ, это сработало для меня.

0 голосов
/ 11 июня 2018

Переменная, которую вы ищете - TF_BUILD_SOURCESDIRECTORY.Пожалуйста, обратитесь к документации по сборке XAML .

...