使用 Power Shell 脚本下载 DacPac

问题描述

我目前有一个管道,用于构建 DacPacs 并将其部署到我们的本地数据库。但是,我们有一些自托管客户端,他们现在在每个版本上都有一个迁移脚本。我们希望将它们转换为也能够使用 DacPacs 进行部署。我想知道是否可以使用 Powershell 脚本从 Azure DevOps 上的 artifacts 目录中提取 DacPac 文件

解决方法

是否可以使用 Powershell 脚本从 Azure DevOps 上的 artifacts 目录中提取 DacPac 文件?

在 Azure Pipeline 中,您需要通过 Publish Build Artifacts task 将文件发布到 Build artifacts。

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop1'
  inputs:
    PathtoPublish: 'dacpac file path'
    ArtifactName: drop

然后您可以使用以下 Powershell 脚本下载目标文件:

 $token = "PAT"

$url1= "https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/build/builds/{BuildId}/artifacts?artifactName={ArtifactsName}&api-version=5.1"

$response1 = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json

$containerid = $response1.resource.data
echo $containerid

$result= ("$containerid" -split "/")[1]

echo $result
    
$url="https://dev.azure.com/{OrganizationName}/_apis/resources/Containers/$($result)/{ArtifactsName}?itemPath={path to the item including the root}" #e.g.item file path drop%2FForumContext1.dacpac use %2F replace /
    
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
    
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/octet-stream -OutFile "C:\Response.dacpac"

另一方面,Azure Devops 也支持将 Dacpac 文件直接部署到本地数据库。

在发布管道中,您可以在 Deployment Group 作业中使用 SQL Server 数据库部署任务。

enter image description here