Övning – Konfigurera din Azure DevOps-miljö

Slutförd

I det här avsnittet konfigurerar du din Azure DevOps-organisation så att den fortsätter med resten av den här modulen och skapar en Azure Kubernetes Service-miljö (AKS) som du vill distribuera ditt program till.

För att uppnå dessa mål kommer du att:

  • Lägg till en användare i din Azure DevOps-organisation.
  • Konfigurera ditt Azure DevOps-projekt.
  • Hantera arbetsflödet med Azure Boards.
  • Skapa Azure-resurser med Hjälp av Azure CLI.
  • Skapa pipelinevariabler i Azure Pipelines.
  • Skapa en tjänstanslutning för att autentisera med Azure.
  • Uppdatera kubernetes-distributionsmanifestet.

Lägga till en användare i din organisation

För att slutföra den här modulen krävs en Azure-prenumeration. Du kan komma igång med Azure kostnadsfritt.

Även om det inte är nödvändigt att arbeta med Azure DevOps är en Azure-prenumeration nödvändig för att distribuera till Azure-resurser via Azure DevOps. Om du vill göra processen enklare använder du samma Microsoft-konto för att logga in på både din Azure-prenumeration och din Azure DevOps-organisation.

Om du loggar in på Azure och Azure DevOps med olika Microsoft-konton kan du fortfarande fortsätta genom att lägga till en användare i din DevOps-organisation under det Microsoft-konto som är associerat med din Azure-prenumeration. Mer information finns i Lägga till användare i din organisation eller projekt. När du lägger till användaren väljer du åtkomstnivån Grundläggande.

När du har lagt till användaren med grundläggande åtkomstnivå loggar du ut från Azure DevOps och loggar in igen med det Microsoft-konto som är associerat med din Azure-prenumeration.

Hämta Azure DevOps-projektet

I det här avsnittet kör du en mall för att skapa projektet i Azure DevOps.

Kör mallen

Kör en mall som konfigurerar din Azure DevOps-organisation.

Viktig

Demogeneratorn för Azure DevOps stöds inte längre, men du kan fortfarande använda den för att skapa demomiljöer. Det finns för närvarande ingen ersättning, och dess funktioner eller tillgänglighet kan ändras på vägen.

  1. Hämta och kör ADOGenerator-projektet i Visual Studio eller valfri IDE.

  2. När du uppmanas att ange mallnumret i listan med mallar anger du 40 för Automatisera distributioner med flera containrar till Azure Kubernetes Services med Azure Pipelines och trycker sedan på Retur.

  3. Välj din autentiseringsmetod. Du kan konfigurera och använda en personlig åtkomsttoken (PAT) eller använda enhetsinloggning.

    Observera

    Om du konfigurerar en PAT måste du auktorisera de nödvändiga omfången. För den här modulen kan du använda Fullständig åtkomst, men i en verklig situation bör du se till att du endast beviljar de nödvändiga omfången.

  4. Ange ditt Azure DevOps-organisationsnamn och tryck sedan på Retur.

  5. Om du uppmanas till det anger du din Azure DevOps PAT och trycker sedan på Retur.

  6. Ange ett projektnamn som Space Game – web – Kubernetes och tryck sedan på Retur.

  7. När projektet har skapats går du till din Azure DevOps-organisation i webbläsaren (på https://dev.azure.com/<your-organization-name>/) och väljer projektet.

Förgrena lagringsplatsen

Om du inte redan har gjort det, skapa en förgrening av projektet mslearn-tailspin-spacegame-web-kubernetes.

  1. På GitHub går du till lagringsplatsen mslearn-tailspin-spacegame-web-kubernetes .

  2. Välj Fork längst upp till höger på skärmen.

  3. Välj ditt GitHub-konto som ägare och välj sedan Skapa förgrening.

Viktig

Enheten Rensa din Azure DevOps-miljö i den här modulen innehåller viktiga steg för rensning. Vi rekommenderar att du utför de här stegen för att undvika att det tar slut på lediga byggminuter. Även om du inte slutför den här modulen är det viktigt att följa rensningsstegen.

Ange projektets synlighet

Ursprungligen är din förgrening av Space Game-lagringsplatsen på GitHub inställd på offentlig medan projektet som skapats av Azure DevOps-mallen är inställt på privat. En offentlig lagringsplats på GitHub kan nås av vem som helst, medan en privat lagringsplats endast är tillgänglig för dig och de personer som du väljer att dela den med. På samma sätt ger offentliga projekt i Azure DevOps skrivskyddad åtkomst till icke-autentiserade användare, medan privata projekt kräver att användarna beviljas åtkomst och autentiseras för att få åtkomst till tjänsterna.

För närvarande är det inte nödvändigt att ändra någon av dessa inställningar i den här modulen. För dina personliga projekt måste du dock fastställa den synlighet och åtkomst som du vill bevilja andra. Om projektet till exempel är öppen källkod kan du välja att göra både din GitHub-lagringsplats och ditt Azure DevOps-projekt offentliga. Om projektet är proprietärt skulle du vanligtvis göra både din GitHub-lagringsplats och ditt Azure DevOps-projekt privata.

Senare kan följande resurser vara användbara för att avgöra vilket alternativ som är bäst för projektet:

Flytta arbetsobjektet till Pågående

I det här steget tilldelar du en arbetsuppgift till dig själv i Azure Boards och flyttar den till tillståndet Doing. I verkliga scenarier skulle du och ditt team skapa arbetsobjekt i början av varje sprint eller arbetst iteration.

När du tilldelar arbetsobjekt får du en checklista att arbeta från och ger andra teammedlemmar insyn i dina framsteg och återstående arbete. Det hjälper också till att upprätthålla begränsningar för pågående arbete (WIP) för att förhindra att teamet tar på sig för mycket arbete samtidigt.

  1. Gå till Boards i Azure DevOps och välj sedan Boards på menyn.

    Skärmbild av Azure DevOps som visar platsen för menyn Boards.

  2. Tilldela arbetsobjektet Skapa flercontainerversion av webbplatsen, som samordnats med Kubernetes, till dig själv genom att välja nedåtpilen längst ned på kortet.

    Skärmbild av Azure Boards som visar platsen för nedåtpilen.

  3. Dra och släpp arbetsobjektet från kolumnen Att göra till kolumnen Doing . Du flyttar uppgiften till kolumnen Klar i slutet av den här modulen när du har slutfört den.

    Skärmbild av Azure Boards som visar kortet i kolumnen Doing.

Skapa Azure Kubernetes Service-miljön

I det här steget skapar du nödvändiga Azure Kubernetes Service-resurser för att distribuera den nya containerversionen av webbplatsen.

I den här modulen använder du Azure CLI för att skapa de resurser som krävs för att distribuera och köra ditt program på Azure Kubernetes Service. Azure CLI kan nås från en terminal eller via Visual Studio Code. I den här modulen får du dock åtkomst till Azure CLI från Azure Cloud Shell. Cloud Shell är en webbläsarbaserad gränssnittsupplevelse som finns i molnet och som är förkonfigurerad med Azure CLI för användning med din Azure-prenumeration.

Viktig

För att slutföra övningarna i den här modulen behöver du en egen Azure-prenumeration.

Starta Cloud Shell

  1. Gå till Azure-portalen och logga in.

  2. Välj alternativet 'Cloud Shell' i menyn och välj sedan upplevelse 'Bash' när du blir tillfrågad.

    Skärmbild av Azure-portalen som visar platsen för Menyalternativet Cloud Shell.

Observera

Cloud Shell kräver att en Azure Storage-resurs bevarar alla filer som du skapar i Cloud Shell. När du först öppnar Cloud Shell uppmanas du att skapa en resursgrupp, ett lagringskonto och en Azure Files-resurs. Den här konfigurationen används automatiskt för alla framtida Cloud Shell-sessioner.

Välj en Azure-region

En region refererar till ett eller flera Azure-datacenter som finns i ett geografiskt område. Regioner som östra USA, västra USA och norra Europa är exempel på sådana områden. Varje Azure-resurs, inklusive en App Service-instans, är associerad med en region.

För att förenkla körningen av kommandon börjar du med att ange en standardregion. När du har angett en standardregion använder efterföljande kommandon den regionen som standard, såvida du inte uttryckligen anger en annan region.

  1. Kör följande kommando från Cloud Shell för att visa de regioner som är tillgängliga i din Azure-prenumeration:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Välj en region från kolumnen Namn i utdata som är geografiskt nära dig. Du kan till exempel välja eastasia eller westus2.

  3. Kör följande kommando för att ange din standardregion. Ersätt REGION med namnet på den region som du valde tidigare.

    az configure --defaults location=<REGION>
    

    I det här exemplet anges westus2 som standardregion.

    az configure --defaults location=westus2
    

Skapa Bash-variabler

Om du använder Bash-variabler kan konfigurationsprocessen bli enklare och mindre felbenägen. Den här metoden hjälper till att undvika oavsiktliga skrivfel genom att definiera delade textsträngar som variabler som kan användas i hela skriptet.

  1. Generera ett slumptal från Cloud Shell för att förenkla skapandet av globalt unika namn för vissa tjänster i nästa steg.

    resourceSuffix=$RANDOM
    
  2. Skapa globalt unika namn för azure containerregistret och Azure Kubernetes Service-instansen. Observera att dessa kommandon använder dubbla citattecken, vilket instruerar Bash att interpolera variablerna med hjälp av den infogade syntaxen.

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. Skapa en annan Bash-variabel för att lagra namnet på resursgruppen.

    rgName='tailspin-space-game-rg'
    
  4. Hitta den senaste AKS-versionen.

    az aks get-versions
    

    Notera den senaste versionen.

Skapa Azure-resurser

Observera

I den här handledningen används standardnätverksinställningar i utbildningssyfte. De här inställningarna gör att din webbplats kan nås från Internet. I praktiken kan du dock välja att konfigurera ett virtuellt Azure-nätverk som placerar din webbplats i ett nätverk som inte är internetroutningsbart och endast är tillgängligt för dig och ditt team. Senare kan du konfigurera om nätverket så att webbplatsen blir tillgänglig för användarna.

  1. Kör följande kommando för att skapa en resursgrupp med det namn som du definierade tidigare:

    az group create --name $rgName
    
  2. Kör kommandot az acr create för att skapa ett Azure Container Registry med det namn som du definierade tidigare:

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. Kör kommandot az aks create för att skapa en AKS-instans med det namn som du definierade tidigare. Ersätt <latest-AKS-version> med den version som du antecknade tidigare.

    az aks create \
      --name $aksName \
      --resource-group $rgName \
      --enable-addons monitoring \
      --kubernetes-version <latest-AKS-version> \
      --generate-ssh-keys
    

    Observera

    Det kan ta 10–15 minuter att slutföra AKS-distributionen.

  4. Skapa en variabel för att lagra ID:t för tjänstens huvudnamn som konfigurerats för AKS-instansen:

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. Skapa en variabel för att lagra ID:t för Azure Container Registry:

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. Kör kommandot az acr list för att hämta inloggningsserverns URL för din Azure Container Registry-instans (ACR):

    az acr list \
     --resource-group $rgName \
     --query "[].{loginServer: loginServer}" \
     --output table
    

    Se till att anteckna inloggningsservern för containerregistret. Du behöver den här informationen senare när du konfigurerar din pipeline. Här är ett exempel:

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. Kör kommandot az role assignment create för att skapa en rolltilldelning för att auktorisera AKS-klustret att ansluta till Azure Container Registry:

    az role assignment create \
      --assignee $clientId \
      --role AcrPull \
      --scope $acrId
    

Viktig

Enheten Rensa din Azure DevOps-miljö i den här modulen innehåller viktiga steg för rensning. Vi rekommenderar att du utför de här stegen för att undvika att det tar slut på lediga byggminuter. Även om du inte slutför den här modulen är det viktigt att följa rensningsstegen.

Skapa en variabelgrupp

I det här avsnittet lägger du till en variabel i pipelinen för att lagra namnet på ditt Azure Container Registry. Du bör definiera namnet på din Azure Container Registry-instans som en variabel i pipelinekonfigurationen istället för att hårdkoda det. Detta gör konfigurationen mer återanvändbar och om namnet på instansen ändras kan du enkelt uppdatera variabeln och utlösa pipelinen utan att behöva ändra konfigurationen.

  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Pipelinesoch välj sedan Bibliotek i det vänstra navigeringsfönstret.

    Skärmbild av Azure Pipelines som visar menyalternativet Bibliotek.

  3. Välj variabelgrupperoch välj sedan + variabelgrupp för att lägga till en ny variabelgrupp.

  4. I avsnittet Egenskaper anger du Release för variabelgruppens namn.

  5. Under avsnittet Variabler väljer du Lägg till.

  6. Ange RegistryName som variabelnamn, och ange inloggningsservern för ditt Azure Container Registry som värde, till exempel tailspinspacegame4692.azurecr.io.

  7. Längst upp på sidan väljer du Spara för att spara pipelinevariabeln. Det här är ett exempel på hur din variabelgrupp kan se ut

    Skärmbild av Azure Pipeline som visar variabelgruppen. Gruppen innehåller en variabel.

Skapa tjänstanslutningar

Nästa steg är att skapa tjänstanslutningar som gör att Azure Pipelines kan komma åt dina Azure Container Registry- och Azure Kubernetes Service-instanser. Genom att skapa dessa tjänstanslutningar kan Azure Pipelines skicka dina containrar och instruera AKS-klustret att hämta dem för att uppdatera den distribuerade tjänsten.

Viktig

Kontrollera att du är inloggad på Azure-portalen och Azure DevOps med samma Microsoft-konto.

Skapa en Docker Registry-tjänstanslutning

  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Projektinställningar i det nedre hörnet på sidan.

  3. Välj Tjänstanslutningar under avsnittet Pipelines.

  4. Välj Ny tjänstanslutningoch välj sedan Docker Registryoch välj sedan Nästa.

  5. Längst upp på sidan väljer du Azure Container Registryoch väljer sedan tjänstens huvudnamn för autentiseringstyp.

  6. Ange följande värden för varje inställning:

    Inställning Värde
    Abonnemang Din Azure-prenumeration
    Azure-containerregister Välj den du skapade tidigare
    Namn på tjänstanslutning containerregisteranslutning
  7. Kontrollera att kryssrutan för Bevilja åtkomstbehörighet till alla pipelines är markerad.

  8. Välj Spara när du är klar.

Skapa ARM-tjänstanslutning

Nu ska du skapa en Azure Resource Manager-tjänstanslutning för att autentisera med ditt AKS-kluster. Vi använder en ARM-tjänstanslutning i stället för Kubernetes eftersom långlivade token inte längre skapas som standard sedan Kubernetes 1.24. Mer information finns i det här DevOps-blogginlägget: Vägledning för tjänstanslutning för AKS-kunder som använder Kubernetes-uppgifter.

  1. Välj Ny tjänstanslutning, välj Azure Resource Manageroch välj sedan Nästa.

  2. Välj tjänstens huvudnamn (automatiskt)och välj sedan Nästa.

  3. Välj Prenumeration för omfångsnivå.

  4. Ange följande värden för varje inställning.

    Inställning Värde
    Abonnemang Din Azure-prenumeration
    Resursgrupp Välj den du skapade tidigare
    Namn på tjänstanslutning Kubernetes-klusteranslutning
  5. Kontrollera att kryssrutan för Bevilja åtkomstbehörighet till alla pipelines är markerad.

  6. Välj Spara när du är klar.

Skapa en flödesmiljö

  1. Välj Pipelinesoch välj sedan Miljöer.

    Skärmbild av Azure Pipelines som visar menyalternativet Miljöer.

  2. Välj Skapa miljö för att skapa en ny miljö.

  3. I fältet Namn anger du Dev.

  4. Välj Ingen i avsnittet Resurs och välj sedan Skapa för att skapa din pipelinemiljö.

Uppdatera Kubernetes-distributionsmanifestet

I det här avsnittet uppdaterar du Kubernetes-manifestet deployment.yml så att det pekar på containerregistret som du skapade tidigare.

  1. Gå till ditt GitHub-konto och välj den lagringsplats som du förgrenade för den här modulen: mslearn-tailspin-spacegame-web-kubernetes.

  2. Öppna filen manifest/deployment.yml i redigeringsläge.

    Skärmbild av GitHub som visar platsen för ikonen för redigeringsläge.

  3. Ändra containeravbildningsreferenserna så att du använder ACR-inloggningsservern. Följande manifest använder tailspinspacegame2439.azurecr.io som exempel.

    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
            - name: web
              image: tailspinspacegame4692.azurecr.io/web
              ports:
              - containerPort: 80
    
    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: leaderboard
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: leaderboard
      template:
        metadata:
          labels:
            app: leaderboard
        spec:
          containers:
            - name: leaderboard
              image: tailspinspacegame4692.azurecr.io/leaderboard
              ports:
              - containerPort: 80
    
  4. Begå ändringarna till din main-gren.