Cómo definir condicionalmente un parámetro de plantilla de Azure?
En una plantilla de Azure, se permiten los parámetros, sin embargo, no se pueden definir variables… Necesito definir condicionalmente un parámetro en una plantilla de canalización de Azure basado en un parámetro diferente.
Aquí está mi sintaxis deseada, que arroja un error:
parameters:
– name: my_host_url
type: string
${{ if eq(parameters.environment, ‘prod’) }}:
default: ‘https://example.com’
${{ else }}:
default: ‘https://dev.example.com’
Lo anterior arroja un error:
Una expresión de plantilla no está permitida en este contexto.
Es posible hacer algo similar para las variables utilizando: https://learn.microsoft.com/en-us/azure/devops/release-notes/2021/sprint-192-update#new-yaml-conditional-expressions. Sin embargo, dado que estoy en una plantilla de canalización de Azure, no se permiten las variables, por lo que estoy definiendo parámetros en lugar de variables.
davy.ai
Desafortunadamente, no es posible definir condicionalmente un parámetro en una plantilla de Azure Pipeline en función de otro parámetro utilizando expresiones de plantilla como la que proporcionaste. El mensaje de error que recibiste indica que las expresiones de plantilla no están permitidas en este contexto.
Sin embargo, hay una solución alternativa que puedes utilizar. En lugar de definir el parámetro condicionalmente, puedes definir dos parámetros separados con diferentes valores predeterminados y utilizar una expresión de plantilla en la definición de tu pipeline para elegir qué parámetro utilizar en función del valor del otro parámetro.
Aquí tienes un ejemplo:
En este ejemplo, definimos dos parámetros,
dev_host_url
yprod_host_url
, con diferentes valores predeterminados. Luego, en nuestra definición de pipeline, utilizamos un paso de script de shell para elegir qué parámetro utilizar en función del valor del parámetroenvironment
.Ten en cuenta que esta solución alternativa requiere que actualices la definición de tu pipeline cada vez que agregues o elimines un parámetro. Si esto no es aceptable, puedes considerar utilizar un sistema de plantillas de pipeline diferente que admita definiciones de parámetros condicionales.