Есть ли способ программно получить имя узла развертывания FTP?

Я нахожусь в процессе развертывания, предназначенного для автоматизированной службы приложений Azure, и я использую развертывание по FTP.

К сожалению, имена хостов для FTP-развертывания кажутся разными в разных приложениях, и я хотел бы, чтобы мои скрипты могли сами определить правильное имя.

Есть ли что-нибудь в лазурном интерфейсе командной строки, которое может дать мне значение имени хоста FTP? Я использую 2.0 (блестящий новый), если это вообще помогает.


person Alexander Trauzzi    schedule 06.03.2017    source источник
comment
Если это полезно, пожалуйста, помогите отметить его как ответ, который поможет большему количеству сообществ, у которых есть такая же проблема.   -  person Tom Sun - MSFT    schedule 09.03.2017
comment
Как только у меня что-то получится, я обязательно это сделаю.   -  person Alexander Trauzzi    schedule 09.03.2017


Ответы (2)


Я бы не рекомендовал делать это в продакшене, но это работает. Он очень хакерский, поэтому остерегайтесь его хрупкости:

$ az appservice web show -n ${WEB_APP} -g ${RES_GRP} -o json --query "hostNames" |
    grep -v '.scm.' |
    grep azurewebsites.net | # Drop custom domains here
    xargs host | # Resolve the scale unit name
    grep cloudapp.net |
    tail -1 |
    cut -d'.' -f 1

Выход:

waws-prod-am2-103

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

waws-prod-am2-103.ftp.azurewebsites.windows.net

При этом, опять же, я бы посоветовал ПРОТИВ делать это и использовать API-интерфейсы Kudu для загрузки Zip-файлов вместо этого (если вы действительно не хотите/не можете выполнять развертывание из системы управления версиями). Том Сан — MSFT уже рекомендовал этот подход, и я поддерживаю его в этом вопросе.

person evilSnobu    schedule 06.03.2017
comment
Честно говоря, хотя вы и не рекомендуете это, это почти кажется предпочтительным подходом, потому что он не требует от меня настройки проприетарного API Kudu. Я определенно не хочу использовать git для развертывания, так как в конечном итоге это потребует кладжей и создаст кучу других проблем для моих сценариев развертывания. - person Alexander Trauzzi; 06.03.2017
comment
Еще одним вариантом может быть WebDeploy (поскольку служба приложений поддерживает его на конечной точке .scm.), но, на мой взгляд, это гораздо сложнее, чем вызов PUT на контроллере Kudu zip. - person evilSnobu; 06.03.2017
comment
WebDeploy — это тоже только для Windows, не так ли? В любом случае, я понимаю, что то, что вы говорите, имеет массу смысла. Итак, я попытаюсь просто перекинуть файлы на конечную точку kudu. В противном случае я всегда знаю, что есть этот вариант FTP. - person Alexander Trauzzi; 06.03.2017
comment
Только для Windows, и у меня всегда мурашки по коже, когда я смотрю на этот синтаксис. Вот почему я рекомендовал его последним. - person evilSnobu; 07.03.2017

Насколько мне известно, Azure CLI не позволяет получить значение имени хоста FTP. Но мы могли бы получить имя узла с помощью Azure Rest API ListPublishingProfileXmlWithSecrets, чтобы получить имя узла FTP Azure WebApp из PublishingProfile.

Если PowerShell подходит для вашего случая, мы также можем использовать команду PowerShell Get-AzureRmWebAppPublishingProfile, чтобы получить PublishProfile веб-сайта Azure.

Если FTP не является единственным выбором для развертывания веб-приложения Azue, мы также можем использовать Kudu API для развертывания веб-сайта Azure. Мы можем легко получить учетные данные для развертывания с помощью команды CLI azure webapp publishingprofile show resourcegroup WebAppname.

введите здесь описание изображения

Обновление:

Для команды az Azure CLI 2.0 мы могли бы использовать az appservice web deployment list-site-credentials для получения учетных данных для развертывания веб-сайта. Дополнительные команды см. в документе.

az appservice web deployment list-site-credentials --resource-group resourcegroup --name WebAppname

введите здесь описание изображения

person Tom Sun - MSFT    schedule 06.03.2017
comment
Я работаю в Unix и работаю в контейнере сборки, развертывая приложение nodejs. Я бы предпочел использовать bash для своих сценариев оболочки. Есть ли более приятный внешний интерфейс для API-интерфейсов Kudu zip? Кажется, это было бы неплохо иметь как часть az. - person Alexander Trauzzi; 06.03.2017
comment
Есть ли эквивалент того, что вы поделились здесь с новой командой az? webapp publishingprofile show больше не существует? - person Alexander Trauzzi; 07.03.2017
comment
Пожалуйста, попробуйте использовать команду az appservice web deployment list-site-credentials --resource-group resourcegroup --name WebAppname для получения учетных данных, я обновил ответ. - person Tom Sun - MSFT; 07.03.2017
comment
Хм, кажется, я не получаю никаких URI развертывания, когда запускаю это. - person Alexander Trauzzi; 10.03.2017
comment
URI развертывания https://user:password@{sitename}.scm.azurewebsites.net/api/zip/{path}/. О том, как использовать API kudu для развертывания веб-сайта, см. в блог - person Tom Sun - MSFT; 10.03.2017
comment
Что я должен использовать для имени пользователя и пароля? Я создал специальный субъект приложения для своего сервера развертывания... - person Alexander Trauzzi; 10.03.2017
comment
Используя команду az appservice web deployment list-site-credentials, мы можем получить имя пользователя публикации и пароль публикации. - person Tom Sun - MSFT; 10.03.2017
comment
Да, я понимаю. Но имя пользователя и пароль возвращаются нулевыми. - person Alexander Trauzzi; 10.03.2017
comment
пожалуйста, используйте publishingusername и publishpassword для развертывания uri. - person Tom Sun - MSFT; 10.03.2017
comment
Это те, которые возвращаются как null. - person Alexander Trauzzi; 10.03.2017