Pasar variables a la plantilla yaml (como parámetros) en azure pipelines

Aug 20 2020

Para minimizar los scripts de construcción duplicados, utilizamos plantillas en nuestras canalizaciones. Estas plantillas tienen parámetros. Sin embargo, ahora me encuentro con un problema, porque necesito pasar datos a una plantilla que aún no está disponible cuando comienza la canalización. (los datos se generan en algunos pasos durante el proceso). Dado que los parámetros se expanden cuando se inicia la canalización, no puedo pasar los datos a la plantilla a través de parámetros.

Sé que puedo hacer referencia a variables de salida de diferentes tareas, trabajos y etapas dentro de mi canalización, pero la plantilla que estoy usando no tiene conocimiento de la canalización circundante en la que se ejecuta. Por lo tanto, la plantilla no sabe cómo hacer referencia a las variables de salida de otros trabajos fuera de la plantilla, simplemente porque la plantilla no sabe qué trabajos se han ejecutado antes.

¿Existe alguna forma de asignar variables en mi plantilla? Idealmente, me gustaría hacer algo como esto:

stages:
- stage: Stage1
  jobs:
  - some job that creates output variables
- stage: Stage2
  jobs:
  - template: 'myTemplate.yaml'
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]

y tener la variable data1 disponible dentro de la plantilla.

Así que estoy tratando de evitar tener que usar: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] en la plantilla , porque es Stage1posible que ni siquiera exista en todas las canalizaciones que usan la plantilla.

De hecho, puedo hacer esto, si la plantilla solo contiene pasos, en lugar de varios trabajos:

- stage: Stage2
  jobs:
  - job: Job1
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    steps:
    - template: templates/Azure/CreateTenant.yaml

Desafortunadamente, mis plantillas contienen varios trabajos.

Actualización: he introducido una solicitud de función para soportar mejor esta situación: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

Respuestas

2 LeoLiu-MSFT Aug 21 2020 at 07:48

De hecho, puedo hacer esto, si la plantilla solo contiene pasos, en lugar de varios trabajos. Desafortunadamente, mis plantillas contienen varios trabajos.

Para resolver este problema, puede definir las variables a nivel de etapa en lugar de a nivel de trabajo:

  - stage: Stage2
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    jobs:
      - template: templates/Azure/CreateTenant.yaml

Entonces podríamos evitar tener que usar: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]en la plantilla.

Puede consultar el documento Ámbitos variables para obtener más detalles.