Задание выпуска Azure DevOps SQL Dacpac - извлечение переменных сборки

Aug 19 2020

У меня работает конвейер CI / CD, который выпускает базу данных (Visual Studio 2017 + SSDT) ​​в конвейерах Azure DevOps. Процесс работает нормально, однако я пытаюсь записать некоторую информацию о сборке в базу данных.

Я создал таблицу регистрации для регистрации информации о сборке и использовал ее в качестве справочника для информации, которую я хочу регистрировать. Я установил переменные в разделе «Переменные SQLCMD» свойств проекта, чтобы они соответствовали тем, которые я хочу (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 - извлечение переменных сборки

Это потому, что вы создали сценарий после развертывания в конвейере выпуска , который не может получить все эти предопределенные переменные в конвейере сборки .

Вы можете проверить эти переменные в классической версии и переменных артефактов . Переменные Build.TriggeredBy.DefinitionName , Build.Reason , Build.SourceVersionMessage не входят в классическую версию и переменные артефактов , а находятся в параметре Использовать предопределенные переменные . Это причина, по которой вы не могли получить эти переменные в своем конвейере выпуска.

( Вы сказали Build.SourceVersionв своем вопросе, но в соответствии с предоставленным вами изображением кажется, что вы написали неправильную переменную, так и должно бытьBuild.SourceVersionMessage ).

Чтобы решить эту проблему, вы можете попробовать создать сценарий после развертывания в конвейере сборки .