Meneruskan variabel ke template yaml (seperti parameter) di pipeline biru

Aug 20 2020

Untuk meminimalkan duplikasi skrip build, kami menggunakan template di pipeline kami. Template ini memiliki parameter. Namun, sekarang saya mengalami masalah, karena saya harus meneruskan data ke template yang belum tersedia saat pipeline dimulai. (data dihasilkan dalam beberapa langkah selama pipeline). Karena parameter diperluas saat pipeline dimulai, saya tidak dapat meneruskan data ke template melalui parameter.

Saya tahu saya dapat mereferensikan variabel keluaran dari berbagai tugas, pekerjaan, dan tahapan dalam pipeline saya, tetapi template yang saya gunakan tidak memiliki pengetahuan tentang pipeline sekitarnya tempat ia dijalankan. Jadi, template tidak tahu cara mereferensikan variabel keluaran dari pekerjaan lain di luar template, hanya karena template tidak mengetahui pekerjaan apa yang telah dijalankan sebelumnya.

Adakah cara untuk memetakan variabel di template saya? Idealnya saya ingin melakukan sesuatu seperti ini:

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

dan memiliki variabel data1 tersedia dalam template.

Jadi saya mencoba untuk menghindari penggunaan: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] di template , karena Stage1mungkin tidak ada di semua pipeline yang menggunakan template.

Saya benar-benar dapat melakukan ini, jika templat hanya berisi langkah-langkah, alih-alih banyak pekerjaan:

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

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

Sayangnya, templat saya berisi banyak pekerjaan

Pembaruan: Saya telah memasukkan permintaan fitur untuk mendukung situasi ini dengan lebih baik: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

Jawaban

2 LeoLiu-MSFT Aug 21 2020 at 07:48

Saya sebenarnya dapat melakukan ini, jika templat hanya berisi langkah-langkah, bukan beberapa pekerjaan. Sayangnya, templat saya berisi banyak pekerjaan

Untuk mengatasi masalah ini, Anda dapat menentukan variabel di tingkat tahapan alih-alih tingkat pekerjaan:

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

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

Kemudian kita dapat menghindari penggunaan: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]di template.

Anda dapat memeriksa lingkup Variabel dokumen untuk lebih jelasnya.