Microsoft Azure WebJobs — это новая функция Microsoft Azure Web Sites, подробнее о ней вы можете прочитать тут.
Несмотря на то, что вы можете легко добавить новую WebJob используя портал управления Microsoft Azure, вы, возможно, захотите развертывать WebJob другими способами — ftp/git/WebDeploy. В этом посте я покажу, как WebJob хранятся в вашем Azure WebSites и как вы можете развернуть новую WebJob.
Где хранятся WebJobs?
WebJobs сохраняются в следующей директории вашего сайта:
site\wwwroot\App_Data\jobs\{job type}\{job name}
Где {job type} может быть либо continuous для постоянно запущенных WebJob, либо triggeredдля тех, которые стартуют по триггеру (по требованию или расписанию).
{job name} — это имя вашей WebJobs
Таким образом, постоянно работающая WebJob с именем myjob будет располагаться в
site\wwwroot\App_Data\jobs\continuous\myjob
Что должно быть внутри директории с WebJob?
Директория с WebJob может содержать от одного до стольких файлов, сколько вам требуется, но по меньшей мере должна содержать скрипт, стартующий процесс WebJob. На текущий момент это может быть:
- Командный файл (.exe/.cmd/.bat)
- Bash (.sh)
- JavaScript (.js для node.js)
- PHP (.php)
- Python (.py)
Скрипты запускаются автоматически по следующей логике:
- Сначала ищется файл с именем run.{поддерживаемое расширение} (побеждает первый найденный)
- Если он не найден, ищется любой файл с поддерживаемым расширением
- Если не найден и он — это не запускаемая WebJob
Примечание: если у вас есть какой-то другой движок исполнения скриптов, который вы хотите использовать
и который не поддерживается на данный момент, вы всегда можете создать файл run.cmd и написать там команду для выполнения (например, powershell -Command run.ps)
Развертывание WebJob
Итак, благодаря этой информацией вы знаете, как создать постоянно работающую WebJob с названием myjob, и все что остается сделать — поместить бинарные файлы в нужную директорию.
Один из способов это сделать — соединиться с вашим сайтом через FTP, создать директорию с правильным именем и скопировать туда бинарные файлы (содержащие хотя бы один поддерживаемый скриптовый файл). Тогда WebJob будет определена автоматически и немедленно начнет выполняться.
Развертывание WebSite+WebJobs
Для развертывания сайта с WebJobs все, что вам нужно сделать — убедится, что вы разворачиваете вашу WebJob в верное место. Для примера, взгляните на следующую структуру сайта на node.js с WebJob:
./server.js
./App_Data/jobs/continuous/myjob/run.cmd
Пока проект содержит эти два файла — это веб-сайт с постоянно запущенной WebJob, и вы можете использовать любой инструмент для развертывания, который вы предпочитаете — ftp/WebDeploy/git/…
Обновление развёртывания
Постоянно запущенные WebJob (continuous) — после того, как вы развернете новую WebJob на месте старой, текущий запущенный процесс будет прерван и перезапущен с новыми бинарными файлами.
triggered — обновление развертывания не затрагивает текущую запущенную WebJob, но следующий запуск произойдет уже с новыми файлами
Примечание: Перед тем, как WebJob запускается, её бинарные файлы копируются во временную директорию, поэтому вы всегда можете безопасно обновлять развернутую WebJob, не опасаясь блокировки файлов.
Предостережение касательно Triggered WebJob
Одна проблема, с который мы сталкиваемся при развертывании triggered WebJob этим способом, заключается в том, что, фактически, это получается WebJob, запускаемая по требованию, и вам требуется нажать кнопку RUN ONCE в портале управления, чтобы запустить её. На данный момент нет простого способа добавить расписание для неё.
Обходным путем может быть создание пустого запланированного WebJob с необходимым именем и тогда развертывание заменит файлы, но сохранит текущее расписание.