Passa le variabili al modello yaml (come i parametri) nelle pipeline azzurre

Aug 20 2020

Per ridurre al minimo gli script di build duplicati, utilizziamo modelli nelle nostre pipeline. Questi modelli hanno parametri. Tuttavia, ora mi imbatto in un problema, perché ho bisogno di passare i dati a un modello che non è ancora disponibile all'avvio della pipeline. (i dati vengono generati in alcuni passaggi durante la pipeline). Poiché i parametri vengono espansi all'avvio della pipeline, non posso passare i dati al modello tramite i parametri.

So di poter fare riferimento a variabili di output di diverse attività, lavori e fasi all'interno della mia pipeline, ma il modello che sto utilizzando non ha alcuna conoscenza della pipeline circostante in cui viene eseguito. Quindi il modello non sa come fare riferimento alle variabili di output da altri lavori al di fuori del modello, semplicemente perché il modello non sa quali lavori sono stati eseguiti prima.

C'è un modo per mappare le variabili nel mio modello? Idealmente vorrei fare qualcosa del genere:

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']]

e avere la variabile data1 disponibile all'interno del modello.

Quindi sto cercando di evitare di dover usare: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] nel modello , perché Stage1potrebbe non esistere nemmeno in tutte le pipeline che utilizzano il modello.

In realtà posso farlo, se il modello contiene solo passaggi, invece di più lavori:

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

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

Sfortunatamente, i miei modelli contengono più lavori

Aggiornamento: ho inserito una richiesta di funzionalità per supportare meglio questa situazione: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

Risposte

2 LeoLiu-MSFT Aug 21 2020 at 07:48

Posso farlo effettivamente, se il modello contiene solo passaggi, invece di più lavori. Sfortunatamente, i miei modelli contengono più lavori

Per risolvere questo problema, è possibile definire le variabili a livello di fase anziché a livello di lavoro:

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

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

Quindi potremmo evitare di dover usare: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]nel modello.

È possibile controllare gli ambiti variabili del documento per ulteriori dettagli.