ส่งผ่านตัวแปรไปยังเทมเพลต yaml (เช่นพารามิเตอร์) ในท่อสีฟ้า

Aug 20 2020

เพื่อลดการสร้างสคริปต์ที่ซ้ำกันให้เหลือน้อยที่สุดเราใช้เทมเพลตในไปป์ไลน์ของเรา เทมเพลตเหล่านี้มีพารามิเตอร์ อย่างไรก็ตามตอนนี้ฉันพบปัญหาเนื่องจากฉันต้องส่งข้อมูลไปยังเทมเพลตที่ยังไม่พร้อมใช้งานเมื่อไปป์ไลน์เริ่มทำงาน (ข้อมูลถูกสร้างขึ้นในบางขั้นตอนระหว่างไปป์ไลน์) เนื่องจากพารามิเตอร์ถูกขยายเมื่อไปป์ไลน์เริ่มต้นฉันจึงไม่สามารถส่งผ่านข้อมูลไปยังเทมเพลตผ่านพารามิเตอร์ได้

ฉันรู้ว่าฉันสามารถอ้างอิงตัวแปรเอาต์พุตของงานงานและขั้นตอนต่างๆภายในไปป์ไลน์ของฉันได้ แต่เทมเพลตที่ฉันใช้ไม่มีความรู้เกี่ยวกับไปป์ไลน์โดยรอบที่ถูกเรียกใช้ดังนั้นเทมเพลตจึงไม่รู้วิธีอ้างอิงตัวแปรเอาต์พุต จากงานอื่น ๆ นอกเทมเพลตเพียงเพราะเทมเพลตไม่ทราบว่ามีการดำเนินการงานใดมาก่อน

มีวิธีใดบ้างที่ฉันสามารถแมปตัวแปรในเทมเพลตของฉันได้ ตามหลักการแล้วฉันต้องการทำสิ่งนี้:

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

และมีตัวแปร data1 อยู่ในเทมเพลต

ดังนั้นฉันจึงพยายามหลีกเลี่ยงการใช้: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] ในเทมเพลตเนื่องจากStage1อาจไม่มีอยู่ในไปป์ไลน์ทั้งหมดที่ใช้เทมเพลต

ฉันสามารถทำได้จริงหากเทมเพลตมีเพียงขั้นตอนแทนที่จะเป็นงานหลายงาน:

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

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

น่าเสียดายที่เทมเพลตของฉันมีงานหลายงาน

อัปเดต: ฉันได้ป้อนคำขอคุณสมบัติเพื่อรองรับสถานการณ์นี้ให้ดีขึ้น: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

คำตอบ

2 LeoLiu-MSFT Aug 21 2020 at 07:48

ฉันสามารถทำได้จริงถ้าเทมเพลตมีเพียงขั้นตอนแทนที่จะเป็นงานหลายงาน น่าเสียดายที่เทมเพลตของฉันมีงานหลายงาน

ในการแก้ไขปัญหานี้คุณสามารถกำหนดตัวแปรที่ระดับพื้นที่งานแทนระดับงาน:

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

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

จากนั้นเราสามารถหลีกเลี่ยงการใช้: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]ในเทมเพลต

คุณสามารถตรวจสอบขอบเขตตัวแปรของเอกสารสำหรับรายละเอียดเพิ่มเติม