Uso del inicio de sesión porcentual en scripts de compilación de TeamCity


Estoy intentando configurar un proceso de compilación de TeamCity que ejecute un script de línea de comandos personalizado. El script utiliza una variable por lo que necesita un signo de porcentaje (por ejemplo, %x). Pero TeamCity usa signos de porcentaje para sus propiedades (por ejemplo, %build.number%), por lo que el signo de porcentaje en el script se elimina cuando se ejecuta.

Si el script contiene esto:

for /d %x in ("c:\*") do @echo "%x"

Esto es lo que realmente ejecuta:

for /d x in ("\*") do @echo "x"

¿Cómo puedo escribir mi script para que pueda incluir variables?

 32
Author: tspauld, 2010-12-08

3 answers

Intenta for /d %%x in ("c:\*") do @echo "%%x" (es decir, duplica los signos%).

Pero debería haber una manera de decirle a TC que deje el archivo en paz. Sería horrible si TC eliminara los signos de porcentaje en las fuentes. Por lo tanto, estoy bastante seguro de que hizo algo en la configuración para habilitar el reemplazo de %.

En una nota similar, es realmente TC que se mete con el script? ¿O estás usando una herramienta de compilación para generar el script o algo así?

 31
Author: Aaron Digulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-27 12:45:33

Si desea pasar % a TeamCity, debe escaparlo con otro %, es decir, para % debe ser %%.

Pero la línea de comandos de Windows considera % como un carácter de escape, por lo que debe escaparlo nuevamente agregando otro % antes de cada %, es decir, para %% debe pasar %%%%

El flujo es:

%%%% in cmd -> %% in TeamCity -> % actual sign.

Tl; dr: la respuesta a su pregunta será:

for /d %%%%x in ("c:\*") do @echo "%%%%x"
 54
Author: Marat Turaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-17 10:27:27

Parece que TeamCity simplemente pega lo que ingresa en el archivo a .cmd La instrucción for requiere porcentajes dobles en estos casos. Entonces parece que TeamCity elimina uno de estos signos %, por lo tanto, por qué tspauld lo hizo funcionar (así es también como lo hice funcionar).

En los registros parece que TeamCity crea un archivo aquí Program Files\TeamCity\buildAgent\temp\agentTmp pero el for cmd se ejecuta y muere demasiado pronto para ver lo que ha escrito, presumiblemente si la primera línea fuera una tarea de ejecución larga, podría comprobar esto (molesto 'pausa' no funcionó).

 3
Author: Verdon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-18 04:37:22