问题描述
我目前有一个管道,用于构建 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 数据库部署任务。