Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure Developer CLI (azd) stöder Distributionsfack för Azure App Service för appar som finns i App Service. Du kan definiera slotar i infrastrukturen, distribuera kod till en specifik slot, och växla slotar när du är redo att promotera en release.
Använd den här metoden för uppsättning, blågröna distributioner, röktestning och rollbacks utan att lägga till anpassade distributionsskript.
Förutsättningar
- Ett
azdprojekt som distribuerar en tjänst till Azure App Service. - Infrastruktur som kod som definierar dina App Service-resurser i Bicep.
- En App Service-plan på standardnivån (
S1) eller högre. Kostnadsfria, delade och grundläggande nivåer stöder inte distributionsplatser.
Definiera ett distributionsfack i Bicep
Definiera produktionsplatsen som vanligt och lägg sedan till en Microsoft.Web/sites/slots resurs för varje fack som du vill azd rikta in dig på.
resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
name: 'my-appservice-plan'
location: resourceGroup().location
sku: {
name: 'S1'
tier: 'Standard'
}
}
resource webApp 'Microsoft.Web/sites@2021-03-01' = {
name: 'my-appservice'
location: resourceGroup().location
kind: 'app'
properties: {
serverFarmId: appServicePlan.id
}
}
resource stagingSlot 'Microsoft.Web/sites/slots@2021-03-01' = {
name: '${webApp.name}/staging'
location: webApp.location
properties: {}
}
Om du använder Azure Verified Modules (AVM) definierar du webbappen och distributionsfackmodulerna i samma distribution och skickar appnamnet till fackmodulen.
Distribuera till ett fack med azd
Kör azd up och azd provision och azd deploy som vanligt.
azd up
Vid den första distributionen azd distribueras till produktionsplatsen och eventuella platser som definierats i infrastrukturen. Den här första distributionen upprättar samma baslinje i huvudapplikationen och varje slot.
Efter den första distributionen ändras hur det väljer distributionsmålet när platser finns.
azd fortsätter inte att distribuera direkt till produktionsappen när platser är tillgängliga. I stället distribuerar du till ett fack, validerar versionen och byter den sedan till produktion.
Så här väljer azd distributionsmålet
När azd deploy körs för en App Service som har distributionsplatser väljer den målet genom att kontrollera distributionshistoriken för huvudappen och sedan utvärdera de tillgängliga platserna.
Beteendet fungerar på följande sätt:
- Om det inte finns några tidigare distributioner, distribuerar
azdtill huvudappen och alla slotar. - Om det finns tidigare distributioner och det inte finns några platser, distribueras
azdendast till huvudappen. - Om det finns tidigare distributioner och exakt ett fack finns distribueras
azdendast till det facket. - Om det finns tidigare distributioner och det finns två eller flera platser, använder
azdden plats som anges av en miljövariabel eller uppmanar dig att välja en.
Important
Efter den första distributionen azd distribueras inte direkt till huvudappen för App Service när det finns platser. Det här beteendet är avsiktligt och hjälper till att förhindra oavsiktliga direkt-till-produktionsdistributioner. Om du vill uppdatera produktionen distribuerar du till ett fack och byter sedan facket till produktion (@main).
Välj ett fack med en miljövariabel
När tjänsten har två eller flera platser efter den första distributionen kan du hoppa över den interaktiva prompten genom att ange en miljövariabel för den tjänst som du vill distribuera.
Använd följande format:
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME
Skapa variabelnamnet från tjänstnamnet i azure.yaml med versaler och ersätt bindestreck med understreck.
Om din tjänst till exempel heter my-apianvänder du AZD_DEPLOY_MY_API_SLOT_NAME.
azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api
Du kan lagra det här värdet i din azd miljö med hjälp azd env setav eller definiera det direkt i CI-systemet innan du kör azd deploy.
Om din tjänst har exakt ett fack ignorerar azd miljövariabeln eftersom det bara finns ett möjligt distributionsmål.
Om din tjänst har två eller fler platser och miljövariabeln inte har angetts, azd uppmanas du att välja en plats.
Kringgå slotidentifiering och distribuera till huvudappen
I vissa scenarier kan du behöva azd distribuera direkt till den huvudsakliga App Service-appen även när det finns distributionsplatser. Ett exempel:
- Din CI-pipeline måste uppdatera huvudappen samtidigt som befintliga platser lämnas orörda.
- Du återställer efter en felaktig slot-status och vill distribuera produktionswebbplatsen på nytt direkt.
- Du återställer baslinjen för huvudappen innan du konfigurerar nya slotar.
För att kringgå slotidentifiering anger du följande miljövariabel för tjänsten:
AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS
Skapa variabelnamnet från tjänstnamnet i azure.yaml med versaler och ersätt bindestreck med understreck. Ange värdet som true för att hoppa över slotidentifiering och distribuera till huvudappen.
Om din tjänst till exempel heter my-apianvänder du AZD_DEPLOY_MY_API_IGNORE_SLOTS.
azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api
När AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS är inställt på true, distribueras azd till huvudappen och ignorerar alla AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME-värden för samma tjänst. Nollställ variabeln eller ställ in den på false för att återgå till standardbeteendet som tar hänsyn till slotar.
CI och icke-interaktivt beteende
När du kör azd deploy --no-prompt eller driftsätter från CI fungerar valet av slots på olika sätt beroende på hur många slots som är tillgängliga:
| Slotar | Miljövariabelbeteende | Result |
|---|---|---|
0 |
Ej tillämpbart. |
azd distribueras till huvudappen. |
1 |
Ignoreras om inte AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS är true. |
azd driftsätts till den enda distributionsplatsen, eller till huvudappen när distributionsplatser ignoreras. |
2+ |
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME krävs för att undvika att fråga, såvida inte AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS är true. |
azd driftsätts till den angivna platsen, driftsätts till huvudappen när platser ignoreras, eller misslyckas om inget mål kan väljas. |
Om du automatiserar distributioner för en App Service som har två eller flera platser anger du AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME i pipelinemiljön innan du kör azd deploy. Om du vill tvinga fram en distribution direkt till huvudmiljön från CI när distributionsplatser finns, ställer du i stället in AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS på true.
Växla distributionsplatser för Azure App Service
azure.appservice Använd tillägget för att växla platser efter validering. Om tillägget inte redan är installerat azd uppmanas du att installera det första gången du kör kommandot.
Kör den interaktiva upplevelsen:
azd appservice swap
Om det bara finns en icke-produktionsplats hoppar azd du över prompterna och växlar direkt med produktion.
För automatisering anger du käll- och målplatserna explicit. Använd @main för att referera till produktionsplatsen.
azd appservice swap --src staging --dst @main
azd appservice swap --src @main --dst staging
azd appservice swap --service myapi --src staging --dst @main
Använd dessa mönster för att stödja vanliga versionsflöden:
- Höj upp en validerad mellanlagringsdistribution till produktion med
--src staging --dst @main. - Återställ genom att växla tillbaka produktionen till stagingmiljön med
--src @main --dst staging. - Rikta in dig på en specifik App Service-backad tjänst i ett multiserviceprojekt
azdmed--service.
Växling är den avsedda metoden för att uppdatera produktionen när platserna har konfigurerats. Använd azd deploy för att uppdatera ett fack och använd azd appservice swap sedan för att höja upp facket till produktion.
Rekommenderat arbetsflöde för distributionsplats
- Definiera en eller flera App Service-distributionsplatser i dina Bicep-mallar.
- Tilldela App Service-resurserna med hjälp av
azd provisionellerazd up. - Låt den första distributionen upprätta en baslinje för huvudappen och varje fack.
- Distribuera senare programuppdateringar till ett mellanlagringsfack genom att ange
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAMEnär du har två eller flera platser, eller genom att välja facket när du uppmanas att göra det. Om du vill tvinga fram en direkt distribution till huvudmiljön från CI när det finns distributionsplatser anger duAZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTStilltruei stället. - Verifiera den mellanlagrade distributionen.
- Kör
azd appservice swap --src <slot> --dst @mainför att främja lanseringen. - Om det behövs kör du den omvända växlingen för att återställa.