Con la esperanza de que alguien pueda ayudarme con esto, mirando hacia atrás en mi registro de git, ahora he probado 14 cosas diferentes para tratar de que esto funcione. Aquí está el escenario:

  • Creé una variable en la interfaz de usuario llamada deploy_custom_env y verifiqué "El usuario puede establecer la variable en tiempo de ejecución". Lo inicialicé a "predeterminado", pero espero que los usuarios lo anulen al iniciar ejecuciones manuales.

  • Estoy tratando de usar esta variable en condition para algunas de las etapas de mi canalización.

  • He probado muchas, muchas cosas diferentes. Aquí hay unos ejemplos:

Primero:

condition: ne(variables.deploy_custom_env, 'default')

Y

condition: ne('${{ variables.deploy_custom_env }}', 'default')

Y

variables:
- name: isCustomEnv
  value: ne[($(deploy_custom_env), 'default')]

E incluso

variables:
  - name: isCustomEnv
    value: ne[(variables.deploy_custom_env, 'default')]

Curiosamente, al intentar usar lo anterior, ambas de las siguientes condiciones dan como resultado etapas omitidas:

condition: eq(variables.isCustomEnv, true)
condition: eq(variables.isCustomEnv, false)

¿Significa esto que es tanto true como false? (Estoy bromeando, por supuesto: no tengo ni idea de a qué se evalúa esto en realidad). También intenté habilitar System.debug y marcar "Habilitar diagnósticos del sistema" `, pero cuando mis etapas se saltan, puedo ' Realmente veo a qué se están evaluando estas variables.

Agradecería cualquier sugerencia o documentación que me ayude a solucionar este problema. Seguramente esto es algo que la gente hace. Además, recomendación para cualquiera de los lectores de Azure: me encantaría ver este ejemplo en la documentación en alguna parte.

Miré lo siguiente para intentar responder a esto:

En este último, vi la diferencia entre tiempo de compilación y tiempo de ejecución, con la siguiente nota:

La diferencia entre las sintaxis de expresión de tiempo de ejecución y tiempo de compilación es principalmente el contexto disponible. En una expresión en tiempo de compilación ($ {{}}), tiene acceso a parámetros y variables definidas estáticamente. En una expresión en tiempo de ejecución ($ []), tiene acceso a más variables pero no a parámetros.

Eso parece relacionado, pero ¿cómo puedo traducir esto en algo que funcione en mis condition s?

0
erewok 5 mar. 2021 a las 20:08

2 respuestas

La mejor respuesta

Te daré una sintaxis de variable más para probar, y luego otra forma de hacerlo

Esta sintaxis funciona para una variable descrita como indicó anteriormente:

stages:
  - stage: FirstStage
    jobs:
      - job: FirstJob
        pool:
          vmImage: 'windows-latest'
        steps:
        - pwsh: Write-Host "deploy custom environment is default"
          displayName: Run if default
          condition: eq(variables['deploy_custom_env'], 'default')
        - pwsh: Write-Host "deploy custom environment is notdefault"
          displayName: Run if not default
          condition: ne(variables['deploy_custom_env'], 'default')

Otra forma de hacerlo es no usar una variable declarada en la interfaz de usuario, sino un parámetro para su compilación; esto establecerá un valor predeterminado y le permitirá cambiarlo cuando ponga en cola una compilación:

parameters:
- name: deploy_custom_env
  type: string
  default: 'default'

stages:
  - stage: FirstStage
    jobs:
      - job: FirstJob
        pool:
          vmImage: 'windows-latest'
        steps:
        - pwsh: Write-Host "deploy custom environment is default"
          displayName: Run if default
          condition: eq('${{ parameters.deploy_custom_env }}', 'default')
        - pwsh: Write-Host "deploy custom environment is notdefault"
          displayName: Run if not default
          condition: ne('${{ parameters.deploy_custom_env }}', 'default')

Esto tiene la ventaja de colocar la solicitud del valor con su valor predeterminado justo frente a usted cuando pone en cola la compilación; no tiene que profundizar en la variable.

<×NOTE: Este enfoque funciona en una canalización, no funcionará para una condición en una plantilla o plantilla anidada, ya que cuando un parámetro está disponible puede ser ... complicado.

0
WaitingForGuacamole 5 mar. 2021 a las 20:03

Si está haciendo esto en el archivo yml, entonces $ (deploy_custom_env) debería funcionar.

0
loganwol 5 mar. 2021 a las 18:37