在管道的发布阶段强制进行数据播种

时间:2020-01-23 13:45:58

标签: azure-devops

我在使用devops将数据播种到thre数据库时遇到麻烦。我有一个带有以下构建步骤的YAML(我删除了不相关的步骤):

- task: CmdLine@2
  inputs:
    script: |
      dotnet tool install --global dotnet-ef --version 3.0
      dotnet tool restore
      dotnet ef migrations script -p $(Build.SourcesDirectory)/$(My.SQLProject)/$(My.SQLProject).csproj -o $(Build.ArtifactStagingDirectory)/migrations/script.sql -i

- task: PublishBuildArtifacts@1

这会很好地创建一个迁移SQL脚本,并将其弹出。

在发布期间,我使用ARM部署任务创建数据库,然后运行SQL脚本:

      - task: SqlAzureDacpacDeployment@1
        inputs:
          azureSubscription: 'my-sub'
          ServerName: 'my-server.database.windows.net'
          DatabaseName: 'my-db'
          SqlUsername: 'my-sqluser'
          SqlPassword: 'my-password'
          deployType: SqlTask
          SqlFile: '$(Pipeline.Workspace)/drop/migrations/script.sql'

这很好用-在数据库中创建了架构。

然后我使用连接字符串创建App Service,并且App Service连接到数据库就很好了。

我似乎无法工作的一点是数据播种。我在Google上搜索了很多,有很多文章谈论创建迁移和创建SQL脚本,然后在Devops中运行该脚本。关于在Devops之外播种数据的讨论很多,但我苦苦挣扎的一点是如何使它在Devops中播种数据。我注意到的一件奇怪的事是,如果我重新运行构建/部署YAML,它就可以播种数据而无需我告诉它。所以,我想有两个问题:

  1. 是在App Service启动期间在App Service代码中完成(或应该)进行数据播种的工作,还是应该在Devops的发布管道中鼓励这样做? (我不是App Service开发人员。开发人员表示,他认为这应该在App Startup上发生。并不是这样,我的想法是,如果他在代码中丢失了某些内容,也许我可以说“别担心,我可以开始将数据植入“ Devops”中。”

  2. 如果应该在Devops中完成,如何应该完成?我本以为“ dotnet ef数据库更新-p”应该可以做到,但是在发行管道中似乎不起作用。

非常感谢

1 个答案:

答案 0 :(得分:0)

经过一些实验,我得到了答案。它不是很漂亮,但是可以。我不知道为什么开发者的种子无法正常工作,但是我可以像这样在Devops中强制使用它:

  • 部署应用程序服务(AzureWebApp @ 1)
  • 添加连接字符串(AzureAppServiceSettings @ 1)
  • 重新部署应用程序服务(AzureWebApp @ 1)

这似乎“迫使”播种。工作完成。