Использование команд git на этапе сборки TeamCity

Один из моих проектов сборки TeamCity v7.0 основан на использовании разницы между текущей веткой разработки и основной веткой, чтобы определить, что нужно запустить. Я написал небольшой скрипт, который использует что-то вроде:

git diff origin/master..origin/QA --name-only --diff-filter=AM | DoSomethingWithThoseFiles

К сожалению, в журнале сборки указано, что git diff не работает. Когда я захожу в каталог buildAgent/work для этого проекта, я вижу, что папки .git нет, поэтому он не может выполнять необходимые операции git.

Я поместил teamcity.git.use.local.mirrors=true в файл buildAgent.properties, как указано в TW-15873, но это не помогает в так или иначе.

Могу ли я что-нибудь сделать, чтобы получить список файлов, измененных между двумя ветвями в сценарии для моего этапа сборки?


person Jake Stevenson    schedule 24.07.2012    source источник
comment
Было ли решение для этого? У меня также возникают трудности с использованием TeamCity 8.1. Я использую режим проверки VCS автоматически на агенте, но это, похоже, не помогает. Каталог .git по-прежнему отсутствует.   -  person user24601    schedule 23.12.2015


Ответы (3)


Попробуйте изменить режим проверки VCS на «Всегда извлекать файлы в агенте», как описано здесь. Это должно дать скрипту сборки доступ к папке .git.

person Mike Two    schedule 27.07.2012
comment
Это помогло мне частично, но сравнение между origin/Master и текущей веткой не работает. Вместо этого кажется, что он распознает только ОДНУ локальную или удаленную ветку! Я думаю, ТС делает что-то странное - клонирует клон или что-то необычное. git fetch выдает ошибку, что buildAgent/system/git/git-14CE2659.git не является репозиторием git, хотя текущий репозиторий находится в buildAgent/work/blah. - person Jake Stevenson; 20.08.2012
comment
К сожалению, кажется, что если вам нужен доступ с проверкой подлинности ssh, например. чтобы внести изменения в удаленный репозиторий git, это не работает, поскольку TeamCity стирает ключи ssh после извлечения. confluence.jetbrains.com/display/TCD9/SSH+Keys+Management - person Klas Mellbourn; 24.11.2015
comment
Мне также пришлось явно указать путь к исполняемому файлу Git, чтобы это работало. - person Fabian Pas; 21.11.2016

Ответ @Mike Two правильный, нужно настроить корень VCS для автоматического использования режима проверки на агенте, а не на сервере. В документах TC не упоминается, что этот обязательный параметр по умолчанию скрыт как «дополнительный». Итак, вот картина того, что искать.

Дополнительные настройки

К вашему сведению, моя конкретная ошибка шага решения VS2013 была из MSBuild, как показано ниже. Я использую последнюю версию TeamCity Enterprise 9.0 EAP (сборка 31963). [PreBuildEvent] Exec [14:21:55][Exec] git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\MYPROJECT\bin\Debug\version.txt" [14:21:55][Exec] fatal: Not a git repository (or any of the parent directories): .git [14:21:55][Exec] C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1131, 5): error MSB3073: The command "git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\Higgens\bin\Debug\version.txt"" exited with code 128. [14:21:55]

//редактировать; Я не знал, как добавить это в комментарий.

person AnneTheAgile    schedule 04.12.2014

Настройка teamcity.git.use.shallow.clone=false и teamcity.git.fetchAllHeads=true может быть тем, чего не хватает, по крайней мере, в последней версии TC.

person Leponzo    schedule 07.05.2021