TeamCity dice usar "Parámetros de compilación" en lugar de "/ propiedad:" en un paso de MSBuild. Qué significa eso?

80

Tengo una configuración de servidor TeamCity para hacer mis compilaciones de CI. Estoy compilando y probando una solución C # y ejecuto algunas tareas personalizadas de MSBuild. Una de estas tareas es imprimir una advertencia en la salida de mi compilación ...

Los parámetros de la línea de comandos de MSBuild contienen parámetros "/ property:" o "/ p:". En su lugar, utilice Build Parameteres.

No entiendo qué significa esto ni cómo eliminarlo. No busca bien en Google (con o sin el error tipográfico). Ejecuté la tarea desde la línea de comando (con /verbosity:diagnostic) y no aparece, así que creo que es un mensaje de TeamCity.

La tarea de MSBuild es

<Target Name="InstallDb">
  <MakeDir Directories="$(DbPath)" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseDrop.sql" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseCreate.sql -v DbPath=&quot;$(DbPath)&quot;" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseProgrammability.sql" />
</Target>

Y la información de paso relevante de TeamCity es

Versión de MSBuild: 4.0
MSBuild ToolsVersion: 4.0
Ejecutar plataforma: x64
Destinos: InstallDb
Parámetros de línea de comandos: /property:DbPath=%env.DB_PATH%

Anthony Mastrean
fuente
5
@AnneTheAgile simplemente agrega un parámetro de compilación del sistema TeamCity . Es uno de los 3 tipos de parámetros de construcción que mencionaste. Lo nombra como 'system. <name-of-my-build-parameter>' y proporcione el valor que desee. TeamCity lo enviará automáticamente a MSBuild. Puede verificar el valor del parámetro en el informe de compilación. Hay una pestaña para los parámetros donde se enumeran todos.
Anthony Mastrean

Respuestas:

58

Tienes que agregar Build Parametersbajo Properties and environmentvariables en la configuración

'ingrese la descripción de la imagen aquí

Entonces, en los parámetros de la línea de comando en Build StepMSBUild, elimine cualquier propiedad que se especifique /p:y agregue cada una de ellas a la Build Parameters(captura de pantalla anterior) y proporcione los valores

manojlds
fuente
5
@Anthony Mastrean Sí -Build parameters are passed to a build. Build parameters can be of two types: system properties and environment variables. Environment variables are supported by any build runner, however system properties are only available for build runners with property notion. For example, Command line runner does not support properties.
manojlds
8
¡Gracias! Esto funcionó, pero tuve que visitar este documento para comprender realmente la implementación / uso.
Anthony Mastrean
2
de los documentos de la ciudad del equipo: los parámetros de configuración proporcionan una forma de anular algunas configuraciones en una configuración de compilación heredada de una plantilla. Nunca se pasan a una compilación.
topwik
8
Esto parece ser un problema si tiene dos pasos de MSBuild dentro de la misma configuración de compilación que usan el mismo parámetro, pero valores diferentes. Si tienen que definirse en el nivel de "Configuración de compilación", entonces parece que es imposible pasar diferentes valores del mismo parámetro a un paso de compilación.
TSmith
2
Esto sería genial. Excepto que es un error. ¿Qué sucede si desea que se pasen diferentes parámetros a dos pasos de compilación diferentes que comparten el mismo nombre de parámetro?
Doug
39

¡Todo sucede detrás de escena! Solo tienes que seguir las convenciones correctas. En su secuencia de comandos de MSBuild, usa la notación de variable regular

$(DbPath)

Y en TeamCity, define un sistema o variable env

system.DbPath

TeamCity enviará automáticamente todas sus variables de sistema / env a su tarea de MSBuild, eliminando la parte 'sistema' o 'env'. Y no tiene que escribir /property:DbPath=system.DbPathen su tarea de TeamCity.

Anthony Mastrean
fuente
Según los documentos , solo las variables del sistema se inyectan en los scripts.
ladenedge
1
Según tengo entendido, las variables de entorno se establecen como variables de entorno reales en el agente de compilación. Si bien es posible que no se pasen al script / paso de compilación como las variables del sistema, están disponibles para su uso. MSBuild debe usar variables de entorno para proporcionar valores $(MyVar)porque tengo una variable de entorno de TeamCity que proporciona un valor para una herramienta de línea cmd tonta a la que llamo con MSBuild.
Anthony Mastrean