Использование знака процента в скриптах сборки TeamCity
Я пытаюсь настроить процесс сборки TeamCity, который запускает пользовательскую командную строку script. script использует переменную, поэтому ей нужен знак процента (например, %x
). Но TeamCity использует процентные знаки для своих свойств (например, %build.number%
), поэтому знак процента в script удаляется при его запуске.
Если script содержит следующее:
for /d %x in ("c:\*") do @echo "%x"
Это то, что он действительно запускает:
for /d x in ("\*") do @echo "x"
Как я могу написать свой script, чтобы он мог включать переменные?
Ответы
Ответ 1
Попробуйте for /d %%x in ("c:\*") do @echo "%%x"
(т.е. дублируйте знаки%).
Но должен быть способ сообщить TC оставить файл в покое. Было бы ужасно, если бы TC удалил процентные знаки в источниках. Поэтому я уверен, что вы что-то сделали в конфигурации, чтобы включить замену %
.
На аналогичной ноте, действительно ли это TC, который работает с script? Или вы используете инструмент построения для создания script или что-то в этом роде?
Ответ 2
Если вы хотите передать% в TeamCity, вам следует избегать его с другими%, то есть для% он должен быть %%.
Но оконная командная строка считает% в качестве escape-символа, поэтому вам следует избегать ее снова, добавив еще% до каждого%, то есть для %% вы должны передать %%%%
Поток:
%%%% in cmd -> %% in TeamCity -> % actual sign.
tl; dr: ответ на ваш вопрос будет:
for /d %%%%x in ("c:\*") do @echo "%%%%x"
Ответ 3
Кажется, что TeamCity просто придерживается того, что вы входите в файл a .cmd
Оператор for
требует двойных процентов в этих случаях.
Затем кажется, что TeamCity удаляет один из этих знаков %
, поэтому почему tspauld заставил его работать (это также то, как я его запустил).
В журналах кажется, что TeamCity создает файл здесь Program Files\TeamCity\buildAgent\temp\agentTmp
, но для cmd выполняется и слишком быстро умирает, чтобы увидеть, что он написал, предположительно, если первая строка была длинной исполняемой задачей, вы могли бы проверить это (досадно "пауза" не срабатывала).