teamcity teamcity-8.0

Ejecutar condicionalmente un paso de compilación de TeamCity



teamcity-8.0 (3)

He estado investigando este caso de uso ya que tengo un problema muy similar para resolver. La mejor solución que he encontrado hasta ahora es la que figura en la respuesta de fwise: incluir todos los pasos posibles que pueda necesitar dentro de su plantilla, pero luego, caso por caso, deshabilitar los pasos no requeridos para cada proyecto.

Entonces, en su caso, debe incluir su paso de compilación ''instalador'' en el nivel de raíz, pero deshabilitarlo para cualquier proyecto que herede esta plantilla y no tenga un instalador.

Para un único paso opcional, este parece ser un buen enfoque, pero es cierto que no se adaptaría muy bien a las plantillas complejas grandes con muchos pasos opcionales.

Lo recogí de la documentación de TeamCity aquí :

  • Puede reordenar los pasos de compilación según sea necesario. Tenga en cuenta que si tiene una configuración de compilación heredada de una plantilla, no puede reordenar los pasos de compilación heredados. Sin embargo, puede insertar pasos de compilación personalizados (no heredados) en cualquier lugar y en cualquier orden, incluso antes o entre pasos de compilación heredados. Los pasos de compilación heredados solo se pueden reordenar en la plantilla original.
  • Puede deshabilitar un paso de compilación de forma temporal o permanente, incluso si se hereda de una plantilla de configuración de compilación.

Estoy trabajando en la definición de una plantilla de creación de propósito general para todos nuestros proyectos, que he colocado en el nivel de "proyecto raíz" (gracias a esta nueva característica de TeamCity 8). Algunos de nuestros proyectos crean un instalador, que necesita ser generado por un "paso de compilación" separado que ejecuta un script de powershell. Sin embargo, algunos de nuestros proyectos no crean este instalador y, por lo tanto, no necesitan este paso de compilación adicional.

¿Hay alguna manera de ejecutar condicionalmente un paso de compilación, basado en un parámetro de compilación? Pensé que quizás la función "deshabilitar el paso de compilación" podría aprovecharse aquí, pero no veo una forma de definir el estado habilitado / deshabilitado de un paso a través de un parámetro.

Por supuesto, podría convertir este condicionamiento en el paso de compilación que realiza la generación del instalador, pero sería más claro si esto se pudiera manejar desde dentro de la propia teamcity.


He tenido la necesidad de pasos de compilación condicionales en numerosas ocasiones pero, desafortunadamente, la función no existe en este momento. http://youtrack.jetbrains.com/issue/TW-17939

No hay ninguna razón por la que no pueda tener una plantilla utilizada por muchas configuraciones de compilación y luego simplemente deshabilite el paso de compilación en las configuraciones / proyectos de compilación que no necesitan crear el instalador. La desactivación del paso en una configuración de compilación individual no afecta a la plantilla principal en la que se basa.

No es tan ordenado como tener un tiempo de ejecución / método dinámico incorporado a TC pero lo uso en ocasiones. He hecho lo que iwo ha sugerido también.


Parece que TC no admite la ejecución de pasos de corredor condicional en su nivel excepto la política de ejecución (solo si el estado de compilación es exitoso, si todos los pasos anteriores finalizaron correctamente, incluso si algunos pasos previos fallaron, siempre) pero eso no es lo que desea.

Por lo tanto, parece que necesita proporcionar un parámetro de compilación del sistema personalizado para su instalador generador de paso de compilación de powershell como sistema. Genere lo que debería ser un bool (puede ocultarlo, solicitarlo, obtener su valor basado en un parámetro de configuración, etc.), y luego en tu corredor de powershell, agrega esto:

param([int]$Generate) if ($Generate) { Write-Host "generating installer..." # call your func() } else { Write-Host "skip installer" }

En su configuración de corredor, agregue -Generar% system.Generate% como argumento de script (¡cuidado, no argumento de comando adicional!). % system.Generate% debería expandirse a 1 o 0 en función de su valor de tiempo de ejecución.