Azure DevOps SQL Dacpac release job - การแยกตัวแปรบิวด์
ฉันมีไปป์ไลน์ 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?
คำตอบ
Azure DevOps SQL Dacpac release job - การแยกตัวแปรบิวด์
นั่นเพราะคุณสร้างสคริปต์การปรับใช้โพสต์ในท่อปล่อยซึ่งไม่สามารถรับตัวแปรทั้งหมดที่กำหนดไว้ล่วงหน้าในการสร้างท่อส่ง
คุณตรวจสอบตัวแปรเหล่านั้นได้ในตัวแปรรุ่นคลาสสิกและตัวแปรอาร์ติแฟกต์ ตัวแปรBuild.TriggeredBy.DefinitionName , Build.Reason , Build.SourceVersionMessageไม่ได้ในรุ่นคลาสสิกและสิ่งประดิษฐ์ตัวแปรในการใช้งานที่กำหนดไว้ล่วงหน้าตัวแปร นั่นคือสาเหตุที่คุณไม่สามารถรับตัวแปรที่ระบุเหล่านั้นในไปป์ไลน์รุ่นของคุณได้
( คุณพูดBuild.SourceVersion
ในคำถามของคุณ แต่ตามภาพที่คุณให้มาดูเหมือนว่าคุณเขียนตัวแปรผิดมันควรจะเป็นBuild.SourceVersionMessage
)
เมื่อต้องการแก้ไขปัญหานี้คุณอาจจะพยายามที่จะสร้างสคริปต์การปรับใช้โพสต์ในการสร้างท่อส่ง