Azure DevOps SQL Dacpac release job - การแยกตัวแปรบิวด์

Aug 19 2020

ฉันมีไปป์ไลน์ CI / CD ที่ทำงานซึ่งเผยแพร่ฐานข้อมูล (Visual Studio 2017 + SSDT) ​​ในไปป์ไลน์ Azure DevOps กระบวนการทำงานได้ดีอย่างไรก็ตามฉันกำลังพยายามบันทึกข้อมูล Build บางอย่างลงในฐานข้อมูล

ฉันสร้างตารางการบันทึกสำหรับการบันทึกข้อมูลบิลด์และใช้สิ่งนี้เป็นข้อมูลอ้างอิงสำหรับข้อมูลที่ฉันต้องการบันทึก ฉันได้ตั้งค่าตัวแปรในส่วน Project Properties "SQLCMD Variables" เพื่อให้ตรงกับที่ฉันต้องการ (BuildID, Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceBranch, Build.SourceVersion, Build.SourceMessage)

ฉันใส่ลงใน "อาร์กิวเมนต์ SQLPackage.ext เพิ่มเติม" สำหรับ Azure DevOps ปล่อย sqlcmd สำหรับการแยกพารามิเตอร์เหล่านี้:

/v:BuildID=$(Build.BuildId) /v:BuildTriggeredBy=$(Build.TriggeredBy.DefinitionName) /v:BuildReason=$(Build.Reason) /v:BuildSourceBranch=$(Build.SourceBranch) /v:BuildSourceVersion=$(Build.SourceVersion) /v:BuildSourceMessage=$(Build.SourceVersionMessage)

ฉันสร้างสคริปต์หลังการปรับใช้ซึ่งจะบันทึกค่าเหล่านี้ลงในตารางการบันทึก ในทางทฤษฎีทุกครั้งที่รีลีสสำเร็จข้อมูลบิลด์ควรถูกบันทึก:

INSERT INTO dbo.ReleaseLog ([BuildID],[TriggeredBy],[Reason],[SourceBranch],[SourceVersion],[SourceVersionMessage]) 
VALUES ('$(BuildID)','$(BuildTriggeredBy)','$(BuildReason)','$(BuildSourceBranch)','$(BuildSourceVersion)','$(BuildSourceMessage)')

บางส่วนของเหล่านี้ทำงานได้ดี แต่อย่างอื่นไม่ทำงานเลย สิ่งที่ใช้งานได้ ได้แก่BuildID, SourceBranch, SourceVersion

สิ่งที่ไม่ (และส่งคืน "$ (VariableName)") ได้แก่Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceVersion

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

คำตอบ

1 LeoLiu-MSFT Aug 20 2020 at 15:55

Azure DevOps SQL Dacpac release job - การแยกตัวแปรบิวด์

นั่นเพราะคุณสร้างสคริปต์การปรับใช้โพสต์ในท่อปล่อยซึ่งไม่สามารถรับตัวแปรทั้งหมดที่กำหนดไว้ล่วงหน้าในการสร้างท่อส่ง

คุณตรวจสอบตัวแปรเหล่านั้นได้ในตัวแปรรุ่นคลาสสิกและตัวแปรอาร์ติแฟกต์ ตัวแปรBuild.TriggeredBy.DefinitionName , Build.Reason , Build.SourceVersionMessageไม่ได้ในรุ่นคลาสสิกและสิ่งประดิษฐ์ตัวแปรในการใช้งานที่กำหนดไว้ล่วงหน้าตัวแปร นั่นคือสาเหตุที่คุณไม่สามารถรับตัวแปรที่ระบุเหล่านั้นในไปป์ไลน์รุ่นของคุณได้

( คุณพูดBuild.SourceVersionในคำถามของคุณ แต่ตามภาพที่คุณให้มาดูเหมือนว่าคุณเขียนตัวแปรผิดมันควรจะเป็นBuild.SourceVersionMessage )

เมื่อต้องการแก้ไขปัญหานี้คุณอาจจะพยายามที่จะสร้างสคริปต์การปรับใช้โพสต์ในการสร้างท่อส่ง