我正在运行一个 CI/CD 管道,该管道在 Azure DevOps 管道中发布数据库(Visual Studio 2017 + SSDT)。该过程工作正常,但是我正在尝试将一些构建信息记录到数据库中。
我创建了一个日志表来记录构建信息并使用 this作为我想要记录的信息的引用。我已在项目属性“SQLCMD 变量”部分中设置变量以匹配我想要的变量(BuildID、Build.TriggeredBy.DefinitionName、Build.Reason、Build.SourceBranch、Build.SourceVersion、Build.SourceMessage)。
我将 sqlcmd 放入 Azure DevOps 版本的“附加 SQLPackage.ext 参数”中,用于提取这些参数:
/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 - extracting build variables
这是因为您在发布管道中创建了部署后脚本,该脚本无法获取构建管道中的所有预定义变量。
您可以检查 Classic release and artifacts variables 中的这些变量。变量 Build.TriggeredBy.DefinitionName、Build.Reason、Build.SourceVersionMessage 不在 Classic 版本和工件变量中,而是在 Use predefined variables 中。这就是您无法在发布管道中获取这些指定变量的原因。
(你在问题中提到了Build.SourceVersion
,但是根据你提供的图片,你似乎写了错误的变量,它应该是Build.SourceVersionMessage
)。
要解决此问题,您可以尝试在构建管道中创建部署后脚本。
关于azure-devops - Azure DevOps SQL Dacpac 发布作业 - 提取构建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63480194/