Во время деплоя веб-приложения – его можно задеплоить на т.н. “deployment slot” вместо деплоя непосредственно на PROD. Доступна эта возможность только в Standard и Premium пакетах подписки.
Фактически, такой слот является полноценным приложением с собственным именем хоста. Содержимое и элементы конфигурации могут быть переключены между двумя такими слотами (PROD и STAGING).
Добавление deployment slot
Проверяем группу ресурсов:
$ azure group show t_1 info: Executing command group show + Listing resource groups + Listing resources for the group data: Id: /subscriptions/784f2db5-***-560bd3043989/resourceGroups/t_1 data: Name: t_1 data: Location: westus data: Provisioning State: Succeeded data: Tags: null data: Resources: data: data: Id : /subscriptions/784f2db5-***-560bd3043989/resourceGroups/t_1/providers/microsoft.insights/alertrules/ForbiddenRequests prodt1 data: Name : ForbiddenRequests prodt1 data: Type : alertrules data: Location: westus data: Tags : hidden-link:/subscriptions/784f2db5-***-560bd3043989/resourceGroups/t_1/providers/Microsoft.Web/sites/prodt1=Resource data: data: Id : /subscriptions/784f2db5-***-560bd3043989/resourceGroups/t_1/providers/Microsoft.Web/sites/prodt1 data: Name : prodt1 data: Type : sites data: Location: westus data: Tags : data: data: Permissions: data: Actions: * data: NotActions: data:
Переходим в Settings, находим Deployment slots и жмем Add slot:
Указываем имя и выбираем PROD-приложение, из которого будет создан STAGING:
Жмем ОК, и ожидаем пару минут:
Обратите внимание на URL для staging-окружения.
Проверяем PROD:
$ curl http://prodt1.azurewebsites.net/ <!DOCTYPE html><html><head> <title>Microsoft Azure Web App - Welcome</title> ...
Проверяем STAG:
$ curl http://prodt1-staging.azurewebsites.net/ <!DOCTYPE html><html><head> <title>Microsoft Azure Web App - Welcome</title> ...
Теперь – выполним деплой и замену рабочих окружений.
Копируем файлы:
$ git clone https://user:[email protected]:443/prodt1.git Cloning into 'prodt1'... warning: You appear to have cloned an empty repository. Checking connectivity... done.
Проверяем:
$ ls -la prodt1/ total 0 drwxr-xr-x 3 username wheel 102 Jan 5 16:45 . drwxr-xr-x 11 username wheel 374 Jan 5 16:47 .. drwxr-xr-x 10 username wheel 340 Jan 5 16:45 .git
Добавляем новый файл:
$ cd prodt1/ $ echo "Hello, deploy slot PROD" > pindex.html $ git add index.html $ git commit -m "index.html prod" [master (root-commit) 04e35e3] index.html prod 1 file changed, 1 insertion(+) create mode 100644 index.html
Пушим и проверяем:
$ git push origin
$ curl http://prodt1.azurewebsites.net/index.html Hello, deploy slot PROD
Переключаем окружение:
Выбираем PROD > STAG:
Клонируем еще раз:
$ git clone https://user:[email protected]:443/prodt1.git Cloning into 'prodt1'... warning: You appear to have cloned an empty repository. Checking connectivity... done.
И снова добавляем файл, но немного изменим текст:
$ echo "Hello, deploy slot STAG" > index.html
Деплоим, и проверяем:
$ curl http://prodt1.azurewebsites.net/index.html Hello, deploy slot STAG
Переключаем слоты обратно:
Проверяем:
$ curl http://prodt1.azurewebsites.net/index.html Hello, deploy slot PROD
Готово.
Что бы проверить – какой из слотов активен в настоящий момент – можно использовать Azure CLI:
$ azure site list prod1 ... data: prod1 staging Running West US Standard prod1-staging.azurewebsites.net data: prod1 Running West US Standard prod1.azurewebsites.net
Переключаем (“свапаем”):
$ azure site swap prod1 info: Executing command site swap + Getting sites Swap slot "staging" from site "prod1" with slot "production" ? [y/n] y + Swapping slot "staging" from site "prod1" with slot "production" info: Site "prod1" slots has been swapped
Проверяем еще раз:
$ azure site list prod1 info: Executing command site list ... data: prod1 Running West US Standard prod1.azurewebsites.net data: prod1 staging Running West US Standard prod1-staging.azurewebsites.net
Больше команд:
$ azure site --help
Ссылки по теме