Рубрики
Uncategorized

Gotchas при развертывании WebJob для Azure.

Azure App Services — развертывание .NET Core 3.1 работник как график вызвал WebJOB через DevOps. Tagged webdev, devops, dotnet, Azure.

Эта статья будет охватывать некоторые проблемы, которые я столкнулся с созданием нового .NET Core 3.1 работник в качестве запланированного срабатываемого веб-сайта на Azure App Services (AAS)

Возможно, вам может быть немного знакомым с: .NET Core, Azure DevOps, AAS, Kudu.

Цели

Наклониться в конвенциях как можно больше. Избегайте сложной настройки к трубопроводам YAML или трубопроводы развертывания или ненужные дополнительные скрипты и файлы в репо.

Начиная

Окружающая обстановка

  • Создайте AAS в качестве Windows только потому, что WebJobs еще не доступен в Linux.
  • Включить всегда — включенно (так работает планировщик). Вы можете увидеть CORE 3.1 Время выполнения не находится на Windows AAS в соответствии с GUI Azure Portal, но это на самом деле.

Трубопровод

Создание приложения с нуля легко: Dotnet New Roading - знайте MyFirst. Работник

Создать очень базовый .net Core Azure-Pipure.yaml, все, что ему нужно сделать, это запустить основной публикацию задания, а затем опубликовать артефакт. Основной шаблон для DEVOPS делает это из коробки.

Используйте это руководство: https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/dotnet-core?view=azure-devops.

steps:

# ...

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'MyFirstWorker'

Запустите сборку и проверьте, ваш работник был опубликован.

Сначала Голча:

Всегда генерируйте EXE. Kudu ищет определенные файлы для запуска. Если вы используете агент DevOps Ubuntu, вы не получите EXE. Так как мы можем всегда получить один?

Вам нужно редактировать аргументы публикации в вашем трубопроводе YAML и добавить -R -R Win-X86-Some - содержал ложь Отказ Это заставит ядро выпрынуть EXE для Windows, даже при публикации на Ubuntu. Без создания самостоятельного развертывания. Хотя, нет ничего плохого в создании SCD, если хотите. может даже быть хорошей идеей, но для этого учебника я хочу пойти от Dotnet New В рабочее развертывание, не освещая каждую функцию в ядре и не добавляя больше скриптов и файлов на мой репо.

ЗАМЕТКА: Чтобы посмотреть, как Kudu выбирает что-то, чтобы запустить, проверьте Wiki для WebJobs Куду Вики Отказ

Второй Готча:

Путь, который вы развернуте в AAS для веб-заданий, очень специфичен. Это должно быть в одном из следующих действий:

Для спускового (или запланированного) работы папка — wwwroot \ app_data \ jobs \ triggered \ {имя работы} и для непрерывной работы, это wwwroot \ app_data \ jobs \ endive \ {имя задания} Отказ Это легко достигается путем установки --output Флаг на ваш dotnet publish публиковать в каталог такое.

Mark Heath имеет отличный пост блога на очень похожую тему:

Почему app_data папка? Ну, это специальная папка ASP.NET, предназначенная для хранения данных вашего приложения. Веб-сервер не будет служить содержимым этой папки, поэтому все в безопасности. Он также считается особым случаем для развертывания — поскольку он может содержать сгенерированные приложения файлы данных, его содержимое не будет удалено или сбросить при развертывании новой версии вашего приложения.

Чтобы расширить на последнюю строчку Marks, в трубопроводах Azure DevOps -> Развертывание -> Развертывание задачи AAS На самом деле есть флажок для удаления папки App_Data, если хотите. Я думал, что это было интересно.

Kudu WebJob Wiki также говорит:

Как альтернатива, D: \ Home \ сайт \ Jobs \ ... может быть использован вместо D: \ Home \ сайт \ wwwroot \ app_data \ jands \ ... . Это полезно при использовании run-zip, что делает D: \ Home \ сайт \ wwwroot стать только для чтения.

Но я не проверил это.

Третий Готча:

Убедитесь, что скопируйте всегда файл settings.job. И это использует https://github.com/atifaziz/ncrontab который требует поля секунд. Я впервые попробовал 5 0 * * * * а потом пришлось вернуться и сделать 0 5 0 * * * Это означает, что через 5 минут после полуночи каждый день каждый день.

Это тривиально для проверки, перейдите к вашему AA AS в портале, и щелкните лезвие WebJob, вы должны увидеть ваше расписание.

Полный яхл

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: False
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsiteName'

Вещи, как хотели знать больше о:

  • Как использовать Run-Zip WebJobs
  • Как добавить WebApp в мой репо и разверните это с моим WebJob одновременно.

SEO Теги: Azure, App, Услуги, Развертывание. Net, Core, 3.1, работник, график, сработал, WebJob, DevOps

Оригинал: «https://dev.to/victorioberra/gotchas-when-deploying-a-webjob-to-azure-2ij0»