Есть ли способ автоматического развертывания моего веб-задания Azure без необходимости каждый раз щелкать правой кнопкой мыши и выбирать «Опубликовать как веб-задание Azure»? т. е. когда я регистрирую свое решение, оно автоматически развертывается в разделе веб-задания на портале Azure.
Как развернуть Azure WebJob в рамках автоматического развертывания VSTS
Ответы (4)
Пока я пытался это сделать, я обнаружил, что на данный момент нет инструментальной поддержки для основных проектов dotnet. Все предлагаемые решения webjobs.props/msbuild зависят от платформы dotnet.
Однако я также обнаружил, что веб-задание может быть чем угодно, исполняемым на локальном компьютере (это может быть node.js или просто пакетная команда).
Главное — понять, как веб-задания распознаются хостом:
- Веб-задание на хосте Windows — это (судя по тому, что я понял из экспериментов с ним) просто файл
run.cmd
, содержащий инструкции о том, как запустить веб-задание. Для ядра dotnet это будетdotnet MyDll.dll %*
(%*
для передачи аргументов для перенаправления вывода и т. д. с хоста). - Теперь, в зависимости от того, является ли задание непрерывным или запущенным, файл
run.cmd
должен располагаться либо вapp_data/jobs/continuous/[NameOfJob]
, либо вapp_data/jobs/triggered/[NameOfJob]
. Для триггерного задания вы также можете добавить расписание с помощью файлаsettings.job
, как описано в здесь. - Если в нужном месте есть
run.cmd
, он будет распознан как веб-задание.
Теперь, чтобы развернуть веб-задание с помощью VSTS независимо от среды выполнения, выполните следующие действия:
- Создайте/опубликуйте свое веб-задание, если необходимо получить исполняемые файлы.
- Добавьте файл run.cmd рядом с исполняемыми файлами веб-задания, который содержит правильные инструкции по запуску. Вы также можете добавить
settings.job
здесь, если это необходимо. - Создайте иерархию папок
app_data/jobs/[triggered/continuous]/[nameOfJob]
и скопируйте исполняемые файлы в самую нижнюю папку. Убедитесь, чтоrun.cmd
находится непосредственно в каталоге[nameOfJob]/
- Заархивируйте папку app_data, чтобы zip-пакет содержал всю иерархию
- Опубликуйте ZIP-файл, используя обычную задачу развертывания службы приложений Azure (так же, как развертывание веб-приложения).
И это все.
Да, ты можешь.
Брэди Гастер написал об этом в сообщение в блоге (сам не пробовал).
Из того, что я понял, TL;DR; резюме следующее:
добавьте файл с именем webjobs.props в папку свойств проекта веб-приложения или консольного приложения, которое вы публикуете.
После этого отредактируйте файл, чтобы ManagementCertificate
, SubscriptionId
и PublishSettingsPath
были заполнены правильными данными.
Теперь вы сможете публиковать файлы с помощью команды
msbuild WebJobDemo.Web.csproj /p:DeployOnBuild=true /p:PublishProfile=WebJobDemo /p:VisualStudioVersion=12.0 /p:Password=asdfasdf
(Обратите внимание, пост написан для VS2013)
После этого вы должны увидеть что-то вроде этого.
Конечно, вы можете автоматизировать это в VSTS (или любом другом инструменте сборки/развертывания, если на то пошло) всякий раз, когда что-то регистрируется в вашем репозитории.
(Довольно полный) ответ о том, как это сделать в VSTS через командную строку, можно найти в этом ответе: https://stackoverflow.com/a/45703975/352640
Вы можете сделать это через Непрерывная сборка интеграции (запускает сборку после регистрации).
Что касается развертывания веб-задания, вы можете создать пакет с помощью задачи Visual Studio Build с аргументом /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.stagingDirectory)"
.
Затем разверните его с помощью задачи развертывания приложений Azure.
Дополнительные сведения: Развертывание и планирование веб-заданий Azure из VSTS в веб-приложение Azure
В Visual Studio, чтобы включить автоматическое развертывание веб-заданий вместе с веб-проектом, щелкните правой кнопкой мыши веб-проект в обозревателе решений, а затем выберите: Добавить > Существующий проект как веб-задание Azure и создайте веб-задание.
Дополнительные сведения можно найти в статье MS — webjobs-dotnet-deploy-vs