如何部署 Azure CI/CD 来部署具有 2 个 sqlproj 的解决方案

问题描述 投票:0回答:1

我有 CI/CD 管道,可将 .Net MVC Web 应用程序部署到 Web 服务器。 发布任务有

"D:\Deployments\sqlpackage-win-x64-en-162.2.111.2\sqlpackage.exe"
 /a:publish /targetservername:test.server
 /targetdatabasename:testuser 
 /targetuser:$(DBUsername) 
 /targetpassword:$(DBPassword) 
 /sourcefile:"$(System.artifactsdirectory)\Test-YAML\drop\DB\test-dbproj.dacpac" 
 /profile:"$(System.artifactsdirectory)\Test-YAML\drop\DB\PublishProfiles\test_database_dbproj.publish.xml"

我想了解构建管道如何生成 /sourcefile:"$(System.artifactsdirectory)\Test-YAML\drop\DB est-dbproj.dacpac" 相似地 /profile:"$(System.artifactsdirectory)\Test-YAML\drop\DB\PublishProfiles est_database_dbproj.publish.xml"

我在构建管道上没有看到任何发布 dacpac 或 test_database_dbproj.publish.xml 的任务。 Test.sln 没有 *.sqlproj,而 Test-db.sln 有 2 个 sqlproj。要在构建中添加什么任务来发布 dacpac 或任何其他任务,并在发布管道中使用该任务来按照上面给出的方式或任何其他方法进行部署。

 parameters:
- name: buildConfiguration
  default: ''

jobs:
- job: BuildTest
  pool:
    vmImage: 'windows-2019'
  steps:
  - checkout: self
    clean: true
    fetchDepth: 1 # Fetch only one commit

  - task: NuGetCommand@2
    displayName: 'Nuget Restore'
    inputs:
      command: 'restore'
      restoreSolution: '**/Test.sln'
      feedsToUse: 'select'
  
  - task: DeleteFiles@1
    displayName: 'Delete NuGet PDB Files Package'
    inputs:
      SourceFolder: '$(UserProfile)\\.nuget\\packages'
      Contents: '**/*.pdb'

  - task: DeleteFiles@1
    displayName: 'Delete NuGet PDB Files Source'
    inputs:
      SourceFolder: '$(Build.Repository.LocalPath)'
      Contents: '**/*.pdb'

  - task: MSBuild@1
    inputs:
      solution: '**/Test.sln'
      configuration: '${{ parameters.buildConfiguration }}'
      msbuildArguments: '/T:Build /p:DeployOnBuild=True  /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True  /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\Web" /p:TransformConfigFiles=true /p:ExcludeFoldersFromDeployment="SqlServerTypes" /p:DebugSymbols=false /p:DebugType=None'

  - task: CopyFiles@2
    displayName: 'Copy Report Files to: $(build.artifactstagingdirectory)\\Reports'
    inputs:
      SourceFolder: Test.Reports
      Contents: '*'
      TargetFolder: '$(build.artifactstagingdirectory)\\Reports'
      condition: succeededOrFailed()

  - task: CopyFiles@2
    displayName: 'Copy Database Report Deployment Script'
    inputs:
      SourceFolder: Deployment
      Contents: '*'
      TargetFolder: '$(build.artifactstagingdirectory)\\Reports'
      condition: succeededOrFailed()

  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      ArtifactName: 'drop'
      publishLocation: 'Container'
asp.net-mvc azure-devops azure-pipelines sqlproj database-deployment
1个回答
0
投票

我想了解构建管道如何生成 /sourcefile:"$(System.artifactsdirectory)\Test-YAML\drop\DB est-dbproj.dacpac" 类似 /profile:"$(System.artifactsdirectory)\Test-YAML \drop\DB\PublishProfiles est_database_dbproj.publish.xml"

根据您的发布任务,dacpac 文件和发布配置文件位于

$(System.artifactsdirectory)
中,这是您的经典发布管道的工件目录。我猜测您将构建管道(CI)添加为版本的工件。并已将 dacpac 文件和配置文件发布为 CI 管道中的构建工件。
Test-YAML
是发布工件的源别名,
drop
是在构建管道中发布的工件的名称。

要运行发布任务中所示的脚本,您应该将 dacpac 和配置文件放入

DB
文件夹中,并将该文件夹复制到
$(Build.ArtifactStagingDirectory)
任务之前的
PublishBuildArtifacts@1
。 dacpac 是在
MSBuild@1
任务中生成的。发布配置文件通常是在 Visual Studio 中手动创建的,您可以将其放入存储库中。

我建议您在构建摘要页面中分享

drop
工件的结构,以帮助我们更好地了解发布如何使用构建工件。关于“Test.sln没有*.sqlproj而Test-db.sln有2个sqlproj”,我不确定这两个解决方案之间有什么关系。如果您想构建 Test-db.sln,只需添加一个
MSBuild@1
任务并将 dacpac 文件复制到
$(Build.ArtifactStagingDirectory)

您可以查看

MSBuild@1
任务的日志来查看dacpac如何生成的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.