我们使用 SqlAzureDacpacDeployment 任务来部署对数据库的更改。但我们的 DBA 希望在部署自行执行之前批准部署脚本。
SqlAzureDacpacDeployment 任务显然可以生成脚本
- task: SqlAzureDacpacDeployment@1
displayName: Task "Generate SQL Script"
inputs:
azureSubscription: ******
AuthenticationType: servicePrincipal
ServerName: ******
DatabaseName: ******
DeploymentAction: Script
DacpacFile: '****.dacpac'
AdditionalArguments: '/p:ExcludeObjectTypes=Users;Logins;RoleMembership;Permissions /p:ScriptDatabaseOptions=false'
但脚本仅在管道完成后才可用,并且仅在日志中
SqlAzureDacpacDeployment 任务完成后是否可以获得脚本。例如将其保存到工件中?
我对此不确定,但我会尝试将输出路径添加到AdditionalArguments,然后发布该工件。
- task: SqlAzureDacpacDeployment@1
displayName: Task "Generate SQL Script"
inputs:
azureSubscription: ******
AuthenticationType: servicePrincipal
ServerName: ******
DatabaseName: ******
DeploymentAction: Script
DacpacFile: '****.dacpac'
AdditionalArguments: '/p:ExcludeObjectTypes=Users;Logins;RoleMembership;Permissions /p:ScriptDatabaseOptions=false /OutputPath:"$(Build.ArtifactStagingDirectory)"'
部署任务创建一个变量来保存部署脚本的路径。我使用与您类似的代码来构建脚本,但在我的例子中使用“name: ChangeScript”为其指定一个名称,以便我可以在后续步骤中引用它。 然后,我使用以下任务将脚本发布为工件。
- task: PublishBuildArtifacts@1
displayName: Publish Change Script
inputs:
PathtoPublish: '$(ChangeScript.SqlDeploymentOutputFile)'
ArtifactName: 'SQLDBChangeScript'
publishLocation: 'Container'