Übung: Einrichten der Azure DevOps-Umgebung

Abgeschlossen

In diesem Abschnitt konfigurieren Sie Ihre Azure DevOps-Organisation so, dass Sie mit dem Rest dieses Moduls fortfahren und eine Azure Kubernetes Service-Umgebung (AKS) erstellen können, in der Sie Ihre Anwendung bereitstellen.

Um diese Ziele zu erreichen, führen Sie diese Schritte aus:

  • Hinzufügen eines Benutzers zu Ihrer Azure DevOps-Organisation
  • Einrichten Ihres Azure DevOps-Projekts
  • Verwalten Ihres Workflows mit Azure Boards
  • Erstellen von Azure-Ressourcen mit der Azure CLI
  • Sie erstellen Pipelinevariablen in Azure Pipelines.
  • Erstellen einer Dienstverbindung für die Authentifizierung bei Azure
  • Aktualisieren Ihres Kubernetes-Bereitstellungsmanifests

Hinzufügen eines Benutzers zu Ihrer Organisation

Sie benötigen ein Azure-Abonnement, um dieses Modul absolvieren zu können. Zum Einstieg können Sie Azure kostenlos nutzen.

Obwohl für das Arbeiten mit Azure DevOps nicht nötig, ist ein Azure-Abonnement für die Bereitstellung in Azure-Ressourcen über Azure DevOps erforderlich. Um den Prozess zu vereinfachen, melden Sie sich mit demselben Microsoft-Konto bei Ihrem Azure-Abonnement und Ihrer Azure DevOps-Organisation an.

Wenn Sie sich bei Azure und Azure DevOps mit unterschiedlichen Microsoft-Konten anmelden, können Sie trotzdem fortfahren, indem Sie Ihrer DevOps-Organisation einen Benutzer unter dem Microsoft-Konto hinzufügen, das Ihrem Azure-Abonnement zugeordnet ist. Weitere Informationen finden Sie unter Hinzufügen von Benutzern zu Ihrer Organisation oder Ihrem Projekt. Wählen Sie beim Hinzufügen des Benutzers die Zugriffsebene Basic aus.

Nachdem Sie den Benutzer mit der Zugriffsebene „Basic“ hinzugefügt haben, melden Sie sich von Azure DevOps ab und anschließend mit dem Microsoft-Konto, das Ihrem Azure-Abonnement zugeordnet ist, wieder an.

Einrichten des Azure DevOps-Projekts

In diesem Abschnitt führen Sie eine Vorlage zum Erstellen Ihres Projekts in Azure DevOps aus.

Ausführen der Vorlage

Führen Sie die Vorlage aus, um Ihr Azure DevOps-Projekt für dieses Modul einzurichten:

Führen Sie im Portal „Azure DevOps Demo Generator“ die folgenden Schritte aus, um die Vorlage auszuführen:

  1. Wählen Sie Anmelden aus, und stimmen Sie den Nutzungsbedingungen zu.

  2. Wählen Sie auf der Seite Neues Projekt erstellen Ihre Azure DevOps-Organisation aus, und geben Sie einen Projektnamen ein, z. B. Space Game – Web – Kubernetes.

    Screenshot of the Azure DevOps Demo Generator showing the process to create the project.

  3. Wählen Sie Ja, ich möchte dieses Repository forken und dann Autorisieren aus. Wenn ein Fenster eingeblendet wird, erteilen Sie die Berechtigung für den Zugriff auf Ihr GitHub-Konto.

    Wichtig

    Die Aktivierung dieser Option ist erforderlich, damit die Vorlage eine Verbindung mit Ihrem GitHub-Repository herstellen kann. Wählen Sie sie auch dann aus, wenn Sie das Repository Space Game bereits geforkt haben, da die Vorlage Ihren vorhandenen Fork verwendet.

  4. Wählen Sie Projekt erstellen aus, und warten Sie, bis die Ausführung der Vorlage abgeschlossen ist. Dies kann einige Minuten dauern.

  5. Wählen Sie Zu Projekt navigieren aus, um in Azure DevOps auf Ihr Projekt zuzugreifen.

Wichtig

Die Lektion Bereinigen Ihrer Azure DevOps-Umgebung in diesem Modul enthält wichtige Schritte für die Bereinigung. Es wird empfohlen, diese Schritte auszuführen, um zu vermeiden, dass Ihnen kostenlose Buildminuten ausgehen. Auch wenn Sie dieses Modul nicht abschließen, sollten Sie die Bereinigungsschritte unbedingt durchführen.

Festlegen der Sichtbarkeit Ihres Projekts

Zunächst ist Ihr Fork des Repositorys „Space Game“ auf GitHub auf „Public“ (Öffentlich) festgelegt, während das mit der Azure DevOps-Vorlage erstellte Projekt auf „Private“ (Privat) festgelegt ist. Auf eine öffentliches Repository auf GitHub kann jeder zugreifen, während ein privates Repository nur für Sie und die Personen zugänglich ist, für die Sie es freigeben möchten. Auf ähnliche Weise bieten öffentliche Projekte in Azure DevOps schreibgeschützten Zugriff für nicht authentifizierte Benutzer, während private Projekte erfordern, dass Benutzern Zugriff gewährt wird und sie authentifiziert werden, um auf die Dienste zuzugreifen.

Derzeit ist es nicht erforderlich, diese Einstellungen für die Zwecke dieses Moduls zu ändern. Für Ihre persönlichen Projekte müssen Sie jedoch die Sichtbarkeit und den Zugriff bestimmen, den Sie anderen gewähren möchten. Bei einem Open-Source-Projekt können Sie z. B. sowohl Ihr GitHub-Repository als auch das Azure DevOps-Projekt öffentlich machen. Wenn Ihr Projekt geschützt ist, sollten Sie sowohl Ihr GitHub-Repository als auch das Azure DevOps-Projekt als privat festlegen.

Später können die folgenden Ressourcen hilfreich sein, um zu bestimmen, welche Option für Ihr Projekt am besten geeignet ist:

Versetzen des Arbeitselements in die Ausführung

In diesem Schritt weisen Sie sich selbst ein Arbeitselement in Azure Boards zu und ändern seinen Status in Wird ausgeführt. In der Praxis erstellen Sie und Ihr Team Arbeitselemente am Anfang jedes Sprints oder jeder Arbeitsiteration.

Durch das Zuweisen von Arbeitselementen erhalten Sie eine Prüfliste, anhand derer Sie arbeiten können, die anderen Teammitglieder Einblick in Ihren Fortschritt und die verbleibende Arbeit gewährt. Sie hilft auch bei der Erzwingung von WIP-Limits (Work-in-Progress, In Bearbeitung), um zu vermeiden, dass vom Team zu viel Arbeit auf einmal übernommen wird.

  1. Navigieren Sie in Azure DevOps zu Boards, und wählen Sie dann im Menü Boards aus.

    Screenshot of Azure DevOps showing the location of the Boards menu.

  2. Weisen Sie sich selbst das Arbeitselement Multicontainerversion der Website mit Kubernetes-Orchestrierung erstellen zu, indem Sie unten auf der Karte den nach unten zeigenden Pfeil auswählen.

    Screenshot of Azure Boards showing the location of the down arrow.

  3. Ziehen Sie das Arbeitselement aus der Spalte Anstehend in die Spalte Wird ausgeführt. Am Ende dieses Moduls verschieben Sie die Aufgabe in die Spalte Fertig, nachdem Sie sie abgeschlossen haben.

    Screenshot of Azure Boards showing the card in the Doing column.

Erstellen der Azure Kubernetes Service-Umgebung

In diesem Schritt erstellen Sie die erforderlichen Azure Kubernetes Service-Ressourcen, um die neue Containerversion der Website bereitzustellen.

Im vorherigen Modul, Erstellen einer Releasepipeline mit Azure Pipelines, haben Sie Azure-Ressourcen im Azure-Portal erstellt. Zwar ist das Portal nützlich, um Azure-Funktionen zu erkunden und einfache Aufgaben auszuführen, aber das Erstellen von Komponenten wie Azure Kubernetes Service kann hier zeitaufwändig sein.

In diesem Modul verwenden Sie die Azure CLI, um die Ressourcen zu erstellen, die zum Bereitstellen und Ausführen Ihrer Anwendung in Azure Kubernetes Service erforderlich sind. Der Zugriff auf die Azure CLI ist über ein Terminal oder Visual Studio Code möglich. In diesem Modul greifen Sie jedoch über die Azure Cloud Shell auf die Azure CLI zu. Cloud Shell ist eine browserbasierte in der Cloud gehostete Shellumgebung, die mit der Azure CLI zur Verwendung mit Ihrem Azure-Abonnement vorkonfiguriert ist.

Wichtig

Für die Übungen in diesem Modul benötigen Sie ein eigenes Azure-Abonnement.

Cloud Shell starten

  1. Wechseln Sie zum Azure-Portal, und melden Sie sich an.

  2. Wählen Sie im Menü die Option Cloud Shell und dann Bash aus, wenn Sie dazu aufgefordert werden.

    Screenshot of the Azure portal showing the location of the Cloud Shell menu item.

Hinweis

Für Cloud Shell ist eine Azure-Speicherressource erforderlich, damit Sie alle in Cloud Shell erstellten Dateien dauerhaft speichern können. Wenn Sie Cloud Shell erstmals öffnen, werden Sie aufgefordert, eine Ressourcengruppe, ein Speicherkonto und eine Azure Files-Freigabe zu erstellen. Dieses Setup wird automatisch für alle zukünftigen Cloud Shell-Sitzungen verwendet.

Auswählen einer Azure-Region

Eine Region bezieht sich auf ein oder mehrere Azure-Rechenzentren in einem geografischen Gebiet. Regionen wie „USA, Osten“, „USA, Westen“ und „Europa, Norden“ sind Beispiele solcher Gebiete. Jede Azure-Ressource, so auch eine App Service-Instanz, ist einer Region zugeordnet.

Um die Ausführung von Befehlen zu vereinfachen, legen Sie zunächst eine Standardregion fest. Nachdem Sie eine Standardregion festgelegt haben, wird bei nachfolgenden Befehlen standardmäßig diese Region verwendet, sofern Sie nicht ausdrücklich eine andere Region angeben.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um die Regionen aufzulisten, die in Ihrem Azure-Abonnement verfügbar sind:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Wählen Sie in der Ausgabe in der Spalte „Name“ eine Region aus, die sich geografisch in Ihrer Nähe befindet. Sie können z. B. eastasia oder westus2 auswählen.

  3. Führen Sie den folgenden Befehl aus, um Ihre Standardregion festzulegen. Ersetzen Sie REGION durch den Namen der zuvor gewählten Region.

    az configure --defaults location=<REGION>
    

    In diesem Beispiel wird westus2 als Standardregion festgelegt.

    az configure --defaults location=westus2
    

Erstellen von Bash-Variablen

Durch Verwenden einiger Bash-Variablen, können Sie den Setupvorgang bequemer und weniger fehleranfällig gestalten. Dieser Ansatz hilft, versehentliche Tippfehler zu vermeiden, indem Sie freigegebene Zeichenfolgen als Variablen definieren, die in Ihrem gesamten Skript verwendet werden können.

  1. Generieren Sie in Cloud Shell eine Zufallszahl, um die Erstellung global eindeutiger Namen für bestimmte Dienste im nächsten Schritt zu vereinfachen.

    resourceSuffix=$RANDOM
    
  2. Erstellen Sie global eindeutige Namen für Ihre Azure Container Registry- und Azure Kubernetes Service-Instanz. Beachten Sie, dass diese Befehle doppelte Anführungszeichen verwenden. Dadurch wird Bash angewiesen, die Variablen mithilfe der Inlinesyntax zu interpolieren.

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. Erstellen Sie eine weitere Bash-Variable, um den Namen Ihrer Ressourcengruppe zu speichern.

    rgName='tailspin-space-game-rg'
    
  4. Suchen Sie die neueste AKS-Version.

    az aks get-versions
    

    Notieren Sie sich die neueste Version.

Erstellen von Azure-Ressourcen

Hinweis

In diesem Tutorial werden zu Lernzwecken die Standardnetzwerkeinstellungen verwendet. Diese Einstellungen ermöglichen den Zugriff auf Ihre Website aus dem Internet. In der Praxis konfigurieren Sie jedoch möglicherweise ein virtuelles Azure-Netzwerk, sodass sich Ihre Website in einem Netzwerk befindet, das nicht vom Internet aus erreichbar ist und auf das nur Sie und Ihr Team zugreifen können. Zu einem späteren Zeitpunkt können Sie das Netzwerk dann neu konfigurieren, um die Website den Benutzern zur Verfügung zu stellen.

  1. Führen Sie den folgenden Befehl aus, um eine Ressourcengruppe mit dem zuvor festgelegten Namen zu erstellen:

    az group create --name $rgName
    
  2. Führen Sie den folgenden az acr create-Befehl aus, um eine Azure Container Registry-Instanz mit dem zuvor festgelegten Namen zu erstellen:

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. Führen Sie den Befehl az aks create aus, um eine AKS-Instanz mit dem zuvor festgelegten Namen zu erstellen. Ersetzen Sie <latest-AKS-version> durch die Version, die Sie sich zuvor notiert haben.

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

    Hinweis

    Die AKS-Bereitstellung kann 10 bis 15 Minuten dauern.

  4. Erstellen Sie eine Variable zum Speichern der ID des Dienstprinzipals, der für die AKS-Instanz konfiguriert ist:

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. Erstellen Sie eine Variable zum Speichern der ID der Azure Container Registry-Instanz:

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. Führen Sie den az acr list-Befehl aus, um die Anmeldeserver-URL für Ihre Azure Container Registry-Instanz (ACR) abzurufen:

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

    Notieren Sie sich unbedingt den Anmeldeserver für Ihre Containerregistrierung. Sie benötigen diese Informationen später beim Konfigurieren Ihrer Pipeline. Ein Beispiel:

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. Führen Sie den Befehl az role assignment create aus, um eine Rollenzuweisung zum Autorisieren des AKS-Clusters zum Herstellen einer Verbindung mit der Azure Container Registry-Instanz zu erstellen:

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

Wichtig

Die Lektion Bereinigen Ihrer Azure DevOps-Umgebung in diesem Modul enthält wichtige Schritte für die Bereinigung. Es wird empfohlen, diese Schritte auszuführen, um zu vermeiden, dass Ihnen kostenlose Erstellungsminuten ausgehen. Auch wenn Sie dieses Modul nicht abschließen, sollten Sie die Bereinigungsschritte unbedingt durchführen.

Erstellen einer Variablengruppe

In diesem Abschnitt fügen Sie Ihrer Pipeline eine Variable hinzu, um den Namen Ihrer Azure Container Registry-Instanz zu speichern. Es empfiehlt sich, den Namen Ihrer Azure Container Registry-Instanz als Variable in Ihrer Pipelinekonfiguration zu definieren, anstatt ihn hart zu codieren. Dadurch ist Ihre Konfiguration leichter wiederverwendbar. Falls sich der Name Ihrer Instanz ändert, können Sie die Variable einfach aktualisieren und Ihre Pipeline auslösen, ohne Ihre Konfiguration ändern zu müssen.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann im linken Navigationsbereich Bibliothek aus.

    Screenshot of Azure Pipelines showing the Library menu option.

  3. Wählen Sie Variablengruppen und dann + Variablengruppe aus, um eine neue Variablengruppe hinzuzufügen.

  4. Geben Sie im Abschnitt Eigenschaften als Variablengruppennamen Release ein.

  5. Wählen Sie im Abschnitt Variablen die Option Hinzufügen aus.

  6. Geben Sie RegistryName als Variablennamen und den Anmeldeserver Ihrer Azure Container Registry-Instanz als Wert ein, z. B. tailspinspacegame4692.azurecr.io.

  7. Klicken Sie oben auf der Seite auf Speichern, um Ihre Pipelinevariable zu speichern. Dies ist ein Beispiel dafür, wie Ihre Variablengruppe aussehen könnte.

    Screenshot of Azure Pipeline showing the variable group. The group contains one variable.

Erstellen von Dienstverbindungen

Der nächste Schritt ist das Erstellen von Dienstverbindungen, mit denen Azure Pipelines auf Ihre Azure Container Registry- und Azure Kubernetes Service-Instanz zugreifen kann. Azure Pipelines verwendet diese erstellten Dienstverbindungen zum Pushen Ihrer Container, aber auch, um den AKS-Cluster anzuweisen, sie zu pullen, um den bereitgestellten Dienst zu aktualisieren.

Wichtig

Achten Sie darauf, dass Sie sowohl beim Azure-Portal als auch bei Azure DevOps mit demselben Microsoft-Konto angemeldet sind.

Erstellen einer Dienstverbindung für die Docker-Registrierung

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Project settings (Projekteinstellungen) in der unteren Ecke der Seite aus.

  3. Wählen Sie im Abschnitt Pipelines die Option Dienstverbindungen aus.

  4. Wählen Sie Neue Dienstverbindung und dann Docker-Registrierung aus, und wählen Sie dann Weiter aus.

  5. Wählen Sie oben auf der Seite Azure Container Registry und dann als Authentifizierungstyp Dienstprinzipal aus.

  6. Füllen Sie die folgenden Werte für jede Einstellung aus:

    Einstellung Wert
    Subscription Ihr Azure-Abonnement
    Azure-Containerregistrierung Wählen Sie die zuvor von Ihnen erstellte Registrierung aus.
    Name der Dienstverbindung Container Registry-Verbindung
  7. Achten Sie darauf, dass das Kontrollkästchen Zugriffsberechtigungen für alle Pipelines gewähren aktiviert ist.

  8. Wählen Sie Speichern aus, wenn Sie fertig sind.

Erstellen einer ARM-Dienstverbindung

Jetzt erstellen Sie eine Azure Resource Manager-Dienstverbindung, um sich bei Ihrem AKS-Cluster zu authentifizieren. Wir verwenden eine ARM-Dienstverbindung anstelle von Kubernetes, da seit Kubernetes 1.24 standardmäßig keine langlebigen Token mehr erstellt werden. Weitere Informationen finden Sie in diesem DevOps-Blogbeitrag: Service Connection guidance for AKS customers using Kubernetes tasks (Leitfaden für Dienstverbindungen für AKS-Kunden, die Kubernetes-Aufgaben verwenden).

  1. Wählen Sie Neue Dienstverbindung, Azure Resource Manager und anschließend Weiter aus.

  2. Wählen Sie Dienstprinzipal (automatisch) und dann Weiter aus.

  3. Wählen Sie Abonnement für „Bereichsebene“ aus.

  4. Füllen Sie die folgenden Werte für jede Einstellung aus.

    Einstellung Wert
    Subscription Ihr Azure-Abonnement
    Resource group Wählen Sie die zuvor von Ihnen erstellte Registrierung aus.
    Name der Dienstverbindung Kubernetes-Clusterverbindung
  5. Achten Sie darauf, dass das Kontrollkästchen Zugriffsberechtigungen für alle Pipelines gewähren aktiviert ist.

  6. Wählen Sie Speichern aus, wenn Sie fertig sind.

Erstellen einer Pipelineumgebung

  1. Wählen Sie Pipelines und dann Umgebungen aus.

    Screenshot of Azure Pipelines showing the Environments menu option.

  2. Wählen Sie Umgebung erstellen aus, um eine neue Umgebung zu erstellen.

  3. Geben Sie Dev in das Feld Name ein.

  4. Wählen Sie im Abschnitt Ressource die Option Keine und dann Erstellen aus, um Ihre Pipelineumgebung zu erstellen.

Aktualisieren des Kubernetes-Bereitstellungsmanifests

In diesem Abschnitt aktualisieren Sie die Kubernetes-Manifestdatei deployment.yml so, dass auf die zuvor erstellte Containerregistrierung verwiesen wird.

  1. Navigieren Sie zu Ihrem GitHub-Konto, und wählen Sie das Repository aus, das Sie für dieses Modul geforkt haben: mslearn-tailspin-spacegame-web-kubernetes.

  2. Öffnen Sie die Datei manifests/deployment.yml im Bearbeitungsmodus.

    Screenshot of GitHub showing the location of the edit mode icon.

  3. Ändern Sie die Containerimageverweise so, dass Ihr ACR-Anmeldeserver verwendet wird. Im folgenden Manifest wird tailspinspacegame2439.azurecr.io als Beispiel verwendet.

    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. Committen Sie die Änderungen in Ihrem Branch main.