Tugas rilis Azure DevOps SQL Dacpac - mengekstrak variabel build
Saya memiliki pipeline CI / CD yang menjalankan database (Visual Studio 2017 + SSDT) di pipeline Azure DevOps. Prosesnya berfungsi dengan baik, namun saya mencoba memasukkan beberapa informasi Build ke dalam database.
Saya membuat tabel logging untuk mencatat informasi build dan menggunakan ini sebagai referensi untuk informasi yang ingin saya login. Saya telah menyiapkan variabel di bagian "Variabel SQLCMD" Properti Proyek agar sesuai dengan yang saya inginkan (BuildID, Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceBranch, Build.SourceVersion, Build.SourceMessage).

Saya memasukkan "Argumen SQLPackage.ext Tambahan" untuk Azure DevOps merilis sqlcmd untuk mengekstraksi parameter ini:
/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)
Saya membuat skrip pasca penerapan yang akan mencatat nilai-nilai ini ke dalam tabel logging. Secara teoritis setiap kali rilis berhasil, informasi build harus dicatat:
INSERT INTO dbo.ReleaseLog ([BuildID],[TriggeredBy],[Reason],[SourceBranch],[SourceVersion],[SourceVersionMessage])
VALUES ('$(BuildID)','$(BuildTriggeredBy)','$(BuildReason)','$(BuildSourceBranch)','$(BuildSourceVersion)','$(BuildSourceMessage)')
Beberapa di antaranya berfungsi dengan baik, tetapi yang lainnya tidak berfungsi sama sekali. Yang berhasil adalah: BuildID, SourceBranch, SourceVersion
Yang tidak (dan mengembalikan "$ (VariableName)") adalah: Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceVersion

Ada yang tahu kenapa? Saya telah memeriksa semua variabel dan tampaknya baik-baik saja. Saya yakin semua variabel yang saya sertakan harus tersedia di akhir rilis. Tampaknya aneh bahwa beberapa variabel akan berfungsi ketika yang lain tidak. Saya telah memeriksa tiga kali (menyalin dan menempel nama variabel antara VS dan pipa rilis, ditambah menyalin nama yang tepat dari situs MS), jadi sepertinya bukan masalah kode. Bug Azure DevOps?
Jawaban
Tugas rilis Azure DevOps SQL Dacpac - mengekstrak variabel build
Itu karena Anda membuat skrip pasca penerapan di pipeline rilis , yang tidak bisa mendapatkan semua variabel yang telah ditentukan di pipeline build .
Anda dapat memeriksa variabel tersebut di rilis Klasik dan variabel artefak . Variabel Build.TriggeredBy.DefinitionName , Build.Reason , Build.SourceVersionMessage tidak ada dalam rilis Klasik dan variabel artefak, itu ada di Gunakan variabel yang telah ditentukan sebelumnya . Itulah alasan mengapa Anda tidak bisa mendapatkan variabel yang ditentukan itu di pipeline rilis Anda.
( Anda mengatakan Build.SourceVersion
dalam pertanyaan Anda, tetapi menurut gambar yang Anda berikan, tampaknya Anda menulis variabel yang salah, seharusnyaBuild.SourceVersionMessage
).
Untuk mengatasi masalah ini, Anda dapat mencoba membuat skrip pasca penerapan di pipeline build .