Принудительное заполнение данных на этапе выпуска трубопровода - PullRequest
0 голосов
/ 23 января 2020

У меня проблемы с отправкой данных в базу данных через devops. У меня есть 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'

Это работает нормально - схема в БД создается.

Затем я создаю Служба приложений со строкой подключения и Служба приложений прекрасно подключаются к БД.

Бит, который я не могу заставить работать, - это заполнение данных. Я много гуглил и есть много статей, в которых рассказывается о создании миграций и создании сценариев SQL, а затем о запуске сценариев в Devops. И есть много того, что говорит о заполнении данных за пределами Devops, но я сталкиваюсь с тем, как заставить их заполнять данные в Devops. Одна странная вещь, которую я заметил, заключается в том, что, если я перезапущу сборку / развертывание YAML, он затем заполняет данные, и мне не нужно об этом говорить. Итак, я предполагаю, что есть два вопроса:

  1. Является ли отправка данных чем-то, что ДОЛЖНО (или ДОЛЖНО) быть сделано в коде службы приложения во время запуска службы приложения, или это должно быть спровоцировал во время релиза конвейер в Devops? (Я не разработчик службы приложений. Разработчик говорит, что он думает, что это должно произойти при запуске приложения. Я не думаю, что если ему что-то не хватает в его коде, возможно, я могу сказать: «Не волнуйтесь, Я могу начать заполнять данные в Devops ".

  2. Если это должно быть сделано в Devops, Как это должно быть сделано? Я бы подумал, что" do tnet ef update базы данных -p "должно это сделать, но, похоже, это не работает в конвейере выпуска.

Большое спасибо

1 Ответ

0 голосов
/ 24 января 2020

После некоторых экспериментов у меня есть ответ. Это не красиво, но это работает. Я не знаю, почему не работает механизм разработки, но я могу заставить его в Devops так:

  • Развернуть службу приложений (AzureWebApp@1)
  • Добавить Строки подключения (AzureAppServiceSettings@1)
  • Повторно разверните службу приложений (AzureWebApp@1)

Это, по-видимому, "вызывает" заполнение. Работа выполнена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...