Как остановить 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.