Как остановить TeamCity от превращения символических ссылок в файлы при использовании режима проверки сервера с сервером Windows и агентом Mac?

Мы переходим от комбинации CC/CC.NET к TeamCity.

Ядром нашего продукта является Windows, но у нас есть агент Mac.

У нас установлен режим проверки VCS на "Автоматически на сервере". Значение источника будет проверено на сервере (Windows), а затем скопировано в агенты (включая агент Mac) по мере необходимости.

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

Проблема заключается в том, что исходная копия с сервера TeamCity закручивает символические ссылки в каталоге framework. Это приводит к тому, что наш продукт не может построить (error: BWToolkitFramework/BWToolkitFramework.h: No such file or directory).

Вот как выглядит ls -l внутри корневого каталога рамки на моей машине:

total 24
lrwxr-xr-x  1 myuser  admin   35 Nov 22 10:45 BWToolkitFramework -> Versions/Current/BWToolkitFramework
lrwxr-xr-x  1 myuser  admin   24 Nov 22 10:45 Headers -> Versions/Current/Headers
lrwxr-xr-x  1 myuser  admin   26 Nov 22 10:45 Resources -> Versions/Current/Resources
drwxr-xr-x  5 myuser  admin  170 Nov 22 10:45 Versions

И вот как это выглядит на машине сборки:

total 24
-rwxrwxr--  1 root  admin   40 Nov 19 16:21 BWToolkitFramework
-rwxrwxr--  1 root  admin   29 Nov 19 16:21 Headers
-rwxrwxr--  1 root  admin   31 Nov 19 16:21 Resources
drwxrwxr--  4 root  admin  136 Nov 19 16:21 Versions

Кроме того, вместо того, чтобы появляться как ссылки на машине сборки (маленькая стрелка накладывается на значок), они отображаются в виде файлов с исполняемым значком unix. Если вы откроете один из этих файлов, который должен быть ссылкой, вы получите что-то похожее на следующее (это из ссылки BWToolkitFramework):

link Versions/Current/BWToolkitFramework

Это, по-видимому, проблема с параметром checkout сервера в TeamCity, потому что CruiseControl работает на том же компьютере, что и прямая проверка SVN, и у меня не было проблем.

Есть ли способ исправить это, кроме изменения нашей конфигурации TeamCity, чтобы использовать проверку SVN на клиентской опции?

Ответы

Ответ 1

Я написал эту проблему как TW-14499 в случае официального ответа/исправления.

Он был просто отмечен как дубликат TW-5953 Symlinks не поддерживаются для проверки на стороне сервера SVN, так что это известная проблема, которая была открыта около 2 года. Если кто-то еще сталкивается с этим, проголосуйте за/комментируйте вопрос в надежде, что он будет исправлен.

Ответ 2

По-видимому, jgit исправил это с 12/4/2014, поэтому TeamCity исправит это в конечном итоге. Обходным путем является указание TC использовать клиентский агент для проверок git. enter image description here

Ответ 3

Подобно этому (просто это git): http://youtrack.jetbrains.com/issue/TW-12648

В моем случае он работал с SVN при проверке агента вместо сервера. Вы можете изменить это в настройках сборки при настройках управления версиями.

Ответ 4

Здесь мой сценарий:

  • Мне нужно использовать проверку на стороне сервера
  • Я использую Git

Поскольку TeamCity не имеет этого исправления, я создал командную строку script для запуска сразу после обновления моих источников в следующем примере:

rm /Git/MyLibrary/External/FacebookSDK/FacebookSDK.framework/Headers
rm /Git/MyLibrary/External/FacebookSDK/FacebookSDK.framework/Resources

ln -s /Git/MyLibrary/External/FacebookSDK/FacebookSDK.framework/Versions/A/Headers     /Git/MyLibrary/External/FacebookSDK/FacebookSDK.framework/Headers
ln -s /Git/MyLibrary/External/FacebookSDK/FacebookSDK.framework/Versions/A/Resources     /Git/MyLibrary/External/FacebookSDK/FacebookSDK.framework/Resources

Этот script воссоздает символические ссылки на моем сервере Mac.