Данное приложение создано при помощи генератора express-generator в ходе прослушивания семинара "Разворачиваем Node.JS приложение в Azure на базе Linux App Service" от Microsoft
Перснальная ссылка на просмотр семинара присылается после регистрации на семинар.
В ходе работы над тестовым проектом ведущий показывает примеры работы с командной строкой Azure - Azure CLI для Linux. Он работает с версией Azure CLI 1.0 переключая ее в режим управления службами asm - Azure Service Manager. В командной строке Linux это команда azure.
Однако на момент прослушивания семинара (13.06.2018) в документации к Azure от Microsoft рекомендовано использовать версию Azure CLI 2.0 В командной строке Linux это команда az.
Сложность в том, что некоторые команды, которые показывает ведущий, выполнить в новой версии нельзя, так как теперь основным режимом работы Microsoft Azure является менеджер ресурсов Azure arm - Azure Resource Manager. При этом ASM все еще поддерживается. Например, в az (новый подход) невозможно выполнить команду, создающую сценарии развертывания проекта, предлагаемую автором:
azure config deploymentscript
Эти два режима основаны на разных подходах к облачным сервисам приложения/платформ/инфраструктуры. Разница между ними рассматривается, например, в статье Understanding key difference between Azure ASM and Azure ARM.
В панели управления Azure Cloud в настоящее время можно использовать движок Kudu.
kudu Kudu is the engine behind git/hg deployments, WebJobs, and various other features in Azure Web Sites. It can also run outside of Azure.
Чтобы посмотреть текущий скрипт развертывания, нужно в панели проекта перейти по пути:
Проект > Средства разработки > Дополнительные инструменты > Вперед и далее либо через файловый браузер по ссылке Files, либо открыв Debug Console > Bash, перейти к файлу по пути:
/home/site/deployments/tools/deploy.sh
Источник: Project Kudu, Customizing deployments.
Файл ".deployment", видимо, по умолчанию отсутствует, что, в приниципе, соответствует алгоритмы развертывания в Kudu: When deploying a git repository via Kudu, the rules for picking a specific project are as follows:
- If there's a .deployment file at the root of the repository go to step 4, otherwise go to the next step.
- Scan for solution files, if there's multiple solutions, fail, if there's 1 solution file go to next step, if none, go to step 6.
- Now that we have a solution, pick the first website or WAP in that solution and deploy it, if there's none, then fail.
- Find the target project file, if there's multiple projects, fail, if there's 1 project file, deploy it, otherwise go to next step.
- look for a website project in the specified folder (by finding a solution that has a website with the same path), if more than one, fail, otherwise deploy the website project.
- Find the target WAP, if there's none then Xcopy deploy all the repository files (excluding .git and .hg) to the web root.
Проблема связана с ручным самодельным или измененным исходным сценарием развертывания, которые можно добавить в проект самостоятельно, либо воспользовавшись местоположением файла deploy.sh из Решения проблемы 1. Проблема связана с символами конца строки в Windows (где может вестись разработка) и Unix (где происходит развертывание в Azure). Символы Windows - "CRLF", Unix - "LF". Из-за этого различия при выполнения сценария развертывания deploy.sh выдается ошибка (с доп. информацией):
remote: Running custom deployment command...
remote: Running deployment command...
remote: deploy.sh: line 2: $'\r': command not found
remote: deploy.sh: line 7: $'\r': command not found
remote: deploy.sh: line 10: $'\r': command not found
remote: deploy.sh: line 11: syntax error near unexpected token `$'{\r''
remote: deploy.sh: line 11: `exitWithMessageOnError () {
remote: '
remote:
remote: App container will begin restart within 10 seconds.
remote: Error - Changes committed to remote repository but deployment to website failed.
To https://[email protected]:443/webinar-azure.git
6125e07..d5a8e89 master -> master
Для решения данной проблемы нужно просто пересохранить файлы с символами конца строки для Unix. В Visual Studio Code это делается крайне просто выбором переключателя в строке состояния внизу окна редактора:
В итоге, для создания собственного сценария развертывания для своего приложения в Azure, необходимо дополнить свой проект (корневую папку) двумя файлами:
- .deployment
- deploy.sh
Содержимое файла .deployment:
[config]
command=deploy.sh
Содержимое файла deploy.sh определяется по необходимости.