Azure DevOps SQL Dacpac 发布作业 - 提取构建变量
Azure DevOps SQL Dacpac release job - extracting build variables
我有一个 CI/CD 管道 运行 在 Azure DevOps 管道中发布数据库 (Visual Studio 2017 + SSDT)。该过程运行良好,但我正在尝试将一些构建信息记录到数据库中。
我创建了一个日志 table 来记录构建信息,并使用 this 作为我想要记录的信息的参考。我在项目属性“SQLCMD 变量”部分设置了变量以匹配我想要的变量(BuildID、Build.TriggeredBy.DefinitionName、Build.Reason、Build.SourceBranch、Build.SourceVersion、Build.SourceMessage).
我在 Azure DevOps 的“附加 SQLPackage.ext 参数”中放入了用于提取这些参数的 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)
我创建了一个 post 部署脚本,它将把这些值记录到日志 table 中。理论上每次发布成功,应该记录构建信息:
INSERT INTO dbo.ReleaseLog ([BuildID],[TriggeredBy],[Reason],[SourceBranch],[SourceVersion],[SourceVersionMessage])
VALUES ('$(BuildID)','$(BuildTriggeredBy)','$(BuildReason)','$(BuildSourceBranch)','$(BuildSourceVersion)','$(BuildSourceMessage)')
其中一些可以正常工作,但其他一些则根本不起作用。有效的是:
BuildID、SourceBranch、SourceVersion
没有的(和 return "$(VariableName)")是:
Build.TriggeredBy.DefinitionName、Build.Reason、Build.SourceVersion
有人知道为什么吗?我已经检查了所有变量,它们似乎没问题。我相信我包含的所有变量都应该在发布结束时可用。有些变量会起作用而其他变量却不起作用,这似乎很奇怪。我已经进行了三重检查(在 VS 和发布管道之间复制并粘贴了变量名称,并从 MS 站点复制了确切的名称),所以它看起来不像是代码问题。 Azure DevOps 错误?
Azure DevOps SQL Dacpac release job - extracting build variables
那是因为您在 发布管道 中创建了一个 post 部署脚本,它无法在 构建 [=] 中获取所有这些预定义变量26=]管道。
您可以检查 Classic release and artifacts variables. The variables Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceVersionMessage are not in the Classic release and artifacts variables, it in the Use predefined variables 中的那些变量。这就是您无法在发布管道中获取那些指定变量的原因。
(你的问题说的是Build.SourceVersion
,但是根据你提供的图片,好像你写错了变量,应该是Build.SourceVersionMessage
).
要解决此问题,您可以尝试在 build 管道中创建 post 部署脚本。
对于找到此内容的任何其他人,希望这将填补更多空白。
在数据库项目中定义一个变量
首先你必须在数据库项目文件的属性中定义一个变量(这里我叫我的YatesEnv):
- 右键单击该项目并查看其属性
- Select SQLCMD 变量
- 添加一个具有默认值的新变量
更新脚本文件
接下来更新您的 Post 或预部署脚本文件以使用它并注意它是如何作为字符串出现的,但我将它放在一个变量中以帮助我测试脚本:
declare @Environment varchar(200) = '$(YatesEnv)'
if @Environment = 'DEV'
begin
INSERT INTO [dbo].[Person] ([FirstName],[LastName],[DateOfBirth]) VALUES ('Bob', 'DEV', DATEADD(YEAR, -30, GETDATE()))
end
else if @Environment = 'QA'
begin
INSERT INTO [dbo].[Person] ([FirstName],[LastName],[DateOfBirth]) VALUES ('Bob', 'QA', DATEADD(YEAR, -30, GETDATE()))
end
更新发布管道任务
我们希望所有这些都构建一次,然后在您的 RELEASE 管道的每个部分中,您将像这样填充变量:
- Select“SQL 服务器数据库部署”任务
- 使用 /v:VariableName="some value" 语法更新“附加参数”部分。请注意,我对变量内容使用了双引号,因为单引号会导致管道错误。
我有一个 CI/CD 管道 运行 在 Azure DevOps 管道中发布数据库 (Visual Studio 2017 + SSDT)。该过程运行良好,但我正在尝试将一些构建信息记录到数据库中。
我创建了一个日志 table 来记录构建信息,并使用 this 作为我想要记录的信息的参考。我在项目属性“SQLCMD 变量”部分设置了变量以匹配我想要的变量(BuildID、Build.TriggeredBy.DefinitionName、Build.Reason、Build.SourceBranch、Build.SourceVersion、Build.SourceMessage).
我在 Azure DevOps 的“附加 SQLPackage.ext 参数”中放入了用于提取这些参数的 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)
我创建了一个 post 部署脚本,它将把这些值记录到日志 table 中。理论上每次发布成功,应该记录构建信息:
INSERT INTO dbo.ReleaseLog ([BuildID],[TriggeredBy],[Reason],[SourceBranch],[SourceVersion],[SourceVersionMessage])
VALUES ('$(BuildID)','$(BuildTriggeredBy)','$(BuildReason)','$(BuildSourceBranch)','$(BuildSourceVersion)','$(BuildSourceMessage)')
其中一些可以正常工作,但其他一些则根本不起作用。有效的是: BuildID、SourceBranch、SourceVersion
没有的(和 return "$(VariableName)")是: Build.TriggeredBy.DefinitionName、Build.Reason、Build.SourceVersion
有人知道为什么吗?我已经检查了所有变量,它们似乎没问题。我相信我包含的所有变量都应该在发布结束时可用。有些变量会起作用而其他变量却不起作用,这似乎很奇怪。我已经进行了三重检查(在 VS 和发布管道之间复制并粘贴了变量名称,并从 MS 站点复制了确切的名称),所以它看起来不像是代码问题。 Azure DevOps 错误?
Azure DevOps SQL Dacpac release job - extracting build variables
那是因为您在 发布管道 中创建了一个 post 部署脚本,它无法在 构建 [=] 中获取所有这些预定义变量26=]管道。
您可以检查 Classic release and artifacts variables. The variables Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceVersionMessage are not in the Classic release and artifacts variables, it in the Use predefined variables 中的那些变量。这就是您无法在发布管道中获取那些指定变量的原因。
(你的问题说的是Build.SourceVersion
,但是根据你提供的图片,好像你写错了变量,应该是Build.SourceVersionMessage
).
要解决此问题,您可以尝试在 build 管道中创建 post 部署脚本。
对于找到此内容的任何其他人,希望这将填补更多空白。
在数据库项目中定义一个变量
首先你必须在数据库项目文件的属性中定义一个变量(这里我叫我的YatesEnv):
- 右键单击该项目并查看其属性
- Select SQLCMD 变量
- 添加一个具有默认值的新变量
更新脚本文件
接下来更新您的 Post 或预部署脚本文件以使用它并注意它是如何作为字符串出现的,但我将它放在一个变量中以帮助我测试脚本:
declare @Environment varchar(200) = '$(YatesEnv)'
if @Environment = 'DEV'
begin
INSERT INTO [dbo].[Person] ([FirstName],[LastName],[DateOfBirth]) VALUES ('Bob', 'DEV', DATEADD(YEAR, -30, GETDATE()))
end
else if @Environment = 'QA'
begin
INSERT INTO [dbo].[Person] ([FirstName],[LastName],[DateOfBirth]) VALUES ('Bob', 'QA', DATEADD(YEAR, -30, GETDATE()))
end
更新发布管道任务
我们希望所有这些都构建一次,然后在您的 RELEASE 管道的每个部分中,您将像这样填充变量:
- Select“SQL 服务器数据库部署”任务
- 使用 /v:VariableName="some value" 语法更新“附加参数”部分。请注意,我对变量内容使用了双引号,因为单引号会导致管道错误。