Übung: Einrichten der Azure DevOps-Umgebung

Abgeschlossen

In dieser Lerneinheit wird Ihre Azure DevOps-Organisation so eingerichtet, dass Sie den Rest dieses Moduls abschließen können. Außerdem erstellen Sie die Azure App Service-Umgebungen, in denen die Bereitstellung erfolgt.

Führen Sie die folgenden Schritte aus, um diese Ziele zu erreichen:

  • Fügen Sie einen Benutzer hinzu, um sicherzustellen, dass Azure DevOps eine Verbindung mit Ihrem Azure-Abonnement herstellen kann.
  • Richten Sie ein Azure DevOps-Projekt für dieses Modul ein.
  • Verschieben Sie in Azure Boards das Arbeitselement für dieses Modul in die Spalte Doing (Wird ausgeführt).
  • Stellen Sie sicher, dass das Projekt lokal eingerichtet ist, damit Sie Änderungen in die Pipeline pushen können.
  • Erstellen Sie die Azure App Service- und Azure Functions-App mithilfe der Azure CLI in Azure Cloud Shell.
  • Erstellen Sie Pipelinevariablen, die die Namen der App Service- und Azure Functions-Instanz definieren.
  • Erstellen Sie eine Dienstverbindung, die Azure Pipelines den sicheren Zugriff auf Ihr Azure-Abonnement ermöglicht.

Hinzufügen eines Benutzers zu Azure DevOps

Für die Bearbeitung dieses Moduls benötigen Sie ein eigenes Azure-Abonnement. Zum Einstieg können Sie Azure kostenlos nutzen.

Obwohl Sie für die Arbeit mit Azure DevOps kein Azure-Abonnement benötigen, wird Azure DevOps in dieser Übung zur Bereitstellung für Azure-Ressourcen in Ihrem Azure-Abonnement verwendet. Um den Prozess zu vereinfachen, melden Sie sich mit demselben Microsoft-Konto bei Ihrem Azure-Abonnement und der Azure DevOps-Organisation an.

Wichtig

Wenn Sie sich mit unterschiedlichen Konten anmelden, sollten Sie Ihrer DevOps-Organisation unter dem Microsoft-Konto, das Sie für die Anmeldung bei Azure verwenden, einen Benutzer hinzufügen. 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.

Melden Sie sich anschließend von Azure DevOps ab, und melden Sie sich mit dem neuen Benutzerkonto an. Verwenden Sie das Microsoft-Konto, das Sie zur Anmeldung bei Ihrem Azure-Abonnement verwenden.

Abrufen des Azure DevOps-Projekts

Stellen Sie sicher, dass Sie Ihre Azure DevOps-Organisation so eingerichtet haben, dass Sie den Rest dieses Moduls absolvieren können. Führen Sie hierzu eine Vorlage aus, die ein Projekt in Azure DevOps erstellt.

Die Module in diesem Lernpfad sind fortschreitend in der Reihenfolge angeordnet, in der Sie das Tailspin-Webteam bei seiner DevOps-Reise begleiten. Zu Lernzwecken verfügt jedes Modul über sein eigenes Azure DevOps-Projekt.

Ausführen der Vorlage

  1. Führen Sie eine Vorlage aus, die Ihre Azure DevOps-Organisation einrichtet:

  2. Wählen Sie auf der Website mit dem Azure DevOps Demo Generator die Option Anmelden aus. Akzeptieren Sie die Nutzungsbedingungen, wenn Sie dazu aufgefordert werden. Die Seite Neues Projekt erstellen wird angezeigt.

  3. Geben Sie auf der Seite Neues Projekt erstellen einen Projektnamen ein (z. B. Space Game – Web – Azure Functions), und wählen Sie dann unter Organisation auswählen die Organisation aus, die Sie für Ihr Azure-Abonnement verwenden.

    Screenshot: Azure DevOps-Demo-Generator, der zeigt, wie das Projekt erstellt wird.

  4. Klicken Sie im nächsten Abschnitt auf Ja, ich möchte dieses Repository forken und dann auf Autorisieren.

    Wenn ein Fenster angezeigt wird, müssen Sie den Zugriff auf Ihr GitHub-Konto autorisieren.

    Wichtig

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

  5. Wählen Sie Create Project (Projekt erstellen) aus.

    Die Ausführung der Vorlage dauert einige Zeit.

  6. Wenn das Projekt erfolgreich bereitgestellt wurde, wählen Sie Zu Projekt navigieren aus, um zu Ihrem Projekt in Azure DevOps zu wechseln.

Wichtig

Die Seite Bereinigen der Azure DevOps-Umgebung in diesem Modul enthält wichtige Schritte, die Sie selbst dann ausführen müssen, wenn Sie dieses Modul nicht abschließen. Durch das Bereinigen stellen Sie sicher, dass Sie weiterhin über kostenlose Erstellungsminuten verfügen.

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:

Zuweisen eines Arbeitselements und Festlegen des Zustands „Wird ausgeführt“

Hier weisen Sie sich selbst in Azure Boards ein Arbeitselement zu und legen den Arbeitselementstatus auf Wird ausgeführt fest. In der Praxis würden Sie und Ihr Team Arbeitselemente zu Beginn jedes Sprints oder jeder Arbeitsiteration erstellen.

In dieser Übung wird eine Checkliste erstellt, mit der gearbeitet werden soll. So können andere Teammitglieder einsehen, woran Sie gerade arbeiten und wie viel Arbeit noch übrig ist. Das Arbeitselement hilft auch bei der Erzwingung von WIP-Grenzwerten (Work-in-Progress, In Bearbeitung), um zu verhindern, dass das Team zu viel Arbeit auf einmal übernimmt.

  1. Navigieren Sie von Azure DevOps aus zur Kategorie Boards, und wählen Sie dann im Menü die Option Boards aus.

    Azure DevOps mit der Position des Boards-Menüs

  2. Öffnen Sie das Arbeitselement zum Refactoring der Bestenlisten-API als Azure-Funktion, indem Sie den Titel auswählen. Weisen Sie sich selbst dieses Arbeitselement zu, und wählen Sie dann Speichern und schließen aus.

  3. Klicken Sie unten auf der Karte auf den Pfeil nach unten, und wählen Sie Wird ausgeführt aus, oder wählen Sie die Karte aus, und ziehen Sie sie in die Spalte „Wird ausgeführt“.

    Screenshot: Arbeitselementkarte mit hervorgehobener Position des Pfeils nach unten

  4. Das Arbeitselement wird aus der Spalte Ausstehend in die Spalte Wird ausgeführt verschoben.

    Screenshot: Azure Boards mit hervorgehobener Arbeitselementkarte in der Spalte „Wird ausgeführt“

Am Ende dieses Moduls verschieben Sie die Karte in die Spalte Done (Erledigt), nachdem Sie die Aufgabe abgeschlossen haben.

Erstellen der Azure App Service- und Azure Functions-Umgebungen

Hier erstellen Sie die App Service- und Azure Functions-App, die für die Bereitstellung der neuen Version der Website und der API erforderlich ist.

Im Learn-Modul Erstellen einer Releasepipeline in Azure-Pipelines haben Sie App Service über das Azure-Portal aufgerufen. Obwohl das Portal eine großartige Möglichkeit ist, um zu erkunden, was in Azure verfügbar ist, oder um grundlegende Aufgaben zu erledigen, kann das Aufrufen von Komponenten wie App Service mühsam sein.

In diesem Modul verwenden Sie die Azure CLI, um eine App Service-Instanz aufzurufen. Der Zugriff auf die Azure CLI ist über ein Terminal oder über Visual Studio Code möglich. Hier greifen Sie über Azure Cloud Shell auf die Azure CLI zu. Diese browserbasierte Shell ist in der Cloud gehostet. In Cloud Shell ist die Azure CLI für die Verwendung mit Ihrem Azure-Abonnement konfiguriert.

Wichtig

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

Aufrufen der Cloud Shell über das Azure-Portal

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie in den globalen Steuerelementen im Seitenkopf die Option Cloud Shell aus.

    Screenshot: Position des Menüelements „Cloud Shell“ im Azure-Portal.

    Ein Terminal wird geöffnet und stellt eine Verbindung mit Azure Cloud Shell her.

  3. Wählen Sie ggf. im Terminalmenü Bash aus.

    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

Bei einer Region handelt es sich um mindestens ein Azure-Rechenzentrum an einem geografischen Standort. Beispiele für Regionen sind „USA, Osten“, „USA, Westen“ und „Europa, Norden“. Jeder Azure-Ressource, einschließlich App Service-Instanzen, wird eine Region zugewiesen.

Um die Ausführung von Befehlen zu erleichtern, legen Sie zunächst eine Standardregion fest. Diese wird in den von Ihnen eingegebenen Befehlen verwendet, bis Sie eine andere Region angeben.

  1. Führen Sie in Cloud Shell den folgenden Befehl az account list-locations 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 Spalte Name in der Ausgabe eine Region in Ihrer Nähe aus. Wählen Sie zum Beispiel eastasia oder westus2 aus.

  3. Führen Sie az configure aus, um Ihre Standardregion festzulegen. Ersetzen Sie <REGION> durch den Namen der ausgewählten Region.

    az configure --defaults location=<REGION>
    

    In diesem Beispiel wird westus2 als Standardregion festgelegt:

    az configure --defaults location=westus2
    

Erstellen von Bash-Variablen

Hier erstellen Sie Bash-Variablen, um den Setupvorgang bequemer und weniger fehleranfällig zu gestalten. Die Verwendung von Variablen für freigegebene Textzeichenfolgen hilft dabei, versehentliche Schreibfehler zu vermeiden.

  1. Generieren Sie über Cloud Shell eine Zufallszahl, mit der im nächsten Schritt global eindeutige Namen für bestimmte Dienste erstellt werden.

    resourceSuffix=$RANDOM
    
  2. Erstellen Sie drei global eindeutige Namen für Ihre APP Service-, Azure Function- und Storage-Konten. Diese Befehle verwenden doppelte Anführungszeichen und weisen Bash damit an, die Variablen mithilfe der Inlinesyntax aufzulösen.

    webName="tailspin-space-game-web-${resourceSuffix}"
    leaderboardName="tailspin-space-game-leaderboard-${resourceSuffix}"
    storageName="tailspinspacegame${resourceSuffix}"
    
  3. Erstellen Sie zwei weitere Bash-Variablen, um die Namen der Ressourcengruppe und des App Service-Plans zu speichern.

    rgName='tailspin-space-game-rg'
    planName='tailspin-space-game-asp'
    

Erstellen der erforderlichen Azure-Ressourcen

Für die Bereitstellung der Lösung sind mehrere Azure-Ressourcen erforderlich, die Sie jetzt erstellen werden.

Hinweis

In dieser Übung werden die Standardnetzwerkeinstellungen verwendet, damit Ihre Website über das Internet zugänglich ist. In der Praxis können Sie ein virtuelles Azure-Netzwerk konfigurieren, um Ihre Website in einem Netzwerk zu platzieren, auf das nur Sie und Ihr Team zugreifen können. Später können Sie das virtuelle Netzwerk neu konfigurieren, um die Website den Benutzern zur Verfügung zu stellen.

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

    az group create --name $rgName
    
  2. Führen Sie den folgenden az appservice plan create-Befehl aus, um einen App Service-Plan mit dem in der vorherigen Aufgabe definierten Namen zu erstellen:

    az appservice plan create \
      --name $planName \
      --resource-group $rgName \
      --sku B1 \
      --is-linux
    

    Der Parameter --sku gibt den B1-Plan an. Dieser Plan wird im Basic-Tarif ausgeführt. Der Parameter --is-linux gibt Linux-Worker an (Threads, die in Ereignissen und in der Aufgabenplanung verwendet werden).

    Wichtig

    Wenn die B1-SKU in Ihrem Azure-Abonnement nicht verfügbar ist, wählen Sie einen anderen Plan aus, z. B. S1 (Standard).

  3. Führen Sie den folgenden az webapp create-Befehl aus, um die App Service-Instanz zu erstellen:

    az webapp create \
      --name $webName \
      --resource-group $rgName \
      --plan $planName \
      --runtime "DOTNETCORE|6.0"
    
  4. Für Azure Functions ist ein Speicherkonto für die Bereitstellung erforderlich. Führen Sie den folgenden az storage account create-Befehl aus, um es zu erstellen:

    az storage account create \
      --name $storageName \
      --resource-group $rgName \
      --sku Standard_LRS
    
  5. Führen Sie den folgenden Befehl az functionapp create aus, um die Azure Functions-App-Instanz zu erstellen. Ersetzen Sie die <region> durch Ihre bevorzugte Region.

    az functionapp create \
      --name $leaderboardName \
      --resource-group $rgName \
      --storage-account $storageName \
      --functions-version 4 \
      --consumption-plan-location <region>
    
  6. Führen Sie den folgenden az webapp list-Befehl aus, um den Hostnamen und Status der App Service-Instanz aufzulisten:

    az webapp list \
      --resource-group $rgName \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

    Notieren Sie sich den Hostnamen für den ausgeführten Dienst. Er sollte (mit Ausnahme des Zufallszahlenbezeichners) in etwa wie folgt aussehen. Sie benötigen den Webhostnamen später, wenn Sie Ihre Arbeit überprüfen.

    HostName                                        State
    ----------------------------------------------  -------
    tailspin-space-game-web-4692.azurewebsites.net  Running
    
  7. Führen Sie den folgenden Befehl az functionapp list aus, um den Hostnamen und Status der Azure Functions-Instanz aufzulisten.

    az functionapp list \
      --resource-group $rgName \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

    Notieren Sie sich den Hostnamen für den ausgeführten Dienst. Er sollte (mit Ausnahme des Zufallszahlenbezeichners) in etwa wie folgt aussehen. Sie benötigen den Bestenlistenhostnamen später, wenn Sie Ihre Arbeit überprüfen.

    HostName                                                State
    ------------------------------------------------------  -------
    tailspin-space-game-leaderboard-4692.azurewebsites.net  Running
    
  8. Kopieren Sie diese beiden Namen an einen Speicherort, auf den Sie später problemlos zugreifen können.

  9. Öffnen Sie optional einen Browser, und geben Sie einen Hostnamen ein, um die Ausführung zu überprüfen. Die Standardstartseite wird angezeigt.

Wichtig

Auf der Seite Clean up your Azure DevOps environment (Bereinigen der Azure DevOps-Umgebung) in diesem Modul werden wichtige Bereinigungsschritte erläutert. Durch die Bereinigung wird sichergestellt, dass Azure-Ressourcen nach Abschluss dieses Moduls nicht in Rechnung gestellt werden. Achten Sie darauf, dass Sie die Bereinigungsschritte auch ausführen, wenn Sie dieses Modul nicht abschließen.

Erstellen von Pipelinevariablen in Azure Pipelines

Im Modul Erstellen einer Releasepipeline mit Azure Pipelines haben Sie Ihrer Pipeline eine Variable hinzugefügt, um den Namen Ihrer Web-App in App Service zu speichern. Hier gehen Sie genauso vor. Außerdem fügen Sie den Namen der Leaderboard-App für die Azure Functions-Instanz hinzu.

Sie könnten diese Namen in Ihrer Pipelinekonfiguration hartcodieren, aber wenn Sie sie als Variablen definieren, lässt sich Ihre Konfiguration besser wiederverwenden. Außerdem können Sie, wenn sich die Namen Ihrer Instanzen ändern, die Variablen aktualisieren und Ihre Pipeline auslösen, ohne Ihre Konfiguration zu ändern.

Fügen Sie Ihrem Projekt jetzt eine Variablengruppe hinzu.

  1. Ihr Projekt Space Game - Web - Azure Functions sollte in Azure DevOps geöffnet sein.

  2. Wählen Sie im Menü Pipelines und unter Pipelines die Option Bibliothek aus. Der Bereich „Bibliothek“ wird angezeigt.

    Screenshot: Azure DevOps mit hervorgehobener Option „Bibliothek“ unter „Pipelines“

  3. Wählen Sie in der Befehlsleiste oder in der Mitte des Bereichs die Option Variablengruppe aus. Die Seite Neue Variablengruppe wird angezeigt.

  4. Geben Sie als Namen für die Variablengruppe Release ein.

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

  6. Geben Sie als Namen Ihrer Variable WebAppName ein. Geben Sie als Wert den Namen der App Service-Instanz ein, die für Ihre Web-App erstellt wurde, z. B. tailspin-space-game-web-4692.

    Wichtig

    Legen Sie den Namen der App Service-Instanz fest, nicht den vollständigen Hostnamen. In dieser Übung ist tailspin-space-game-web-4692 beispielsweise der Instanzteil des Hostnamens tailspin-space-game-web-4692.azurewebsites.net.

  7. Fügen Sie eine weitere Variable namens LeaderboardAppName mit dem Wert Ihrer Bestenlisteninstanz hinzu, z. B. tailspin-space-game-leaderboard-4692.

  8. Fügen Sie eine letzte Variable namens ResourceGroupName mit dem Wert tailspin-space-game-rg hinzu.

  9. Wählen Sie in der Befehlsleiste im oberen Seitenbereich Speichern aus, um Ihre Variablengruppe Release in der Pipeline zu speichern.

    Die Variablen in Ihrer Variablengruppe sollten wie folgt aussehen:

    Screenshot: Azure Pipelines mit der Variablengruppe; die Gruppe enthält drei Variablen.

Erstellen der spike-Umgebung

In vorherigen Modulen haben Sie Umgebungen für Entwicklung, Test und Staging erstellt. Hier gehen Sie genauso vor. Diesmal erstellen Sie eine Umgebung namens spike.

  1. Wählen Sie im Azure DevOps-Menü unter Pipelinesdie Option Umgebungen aus.

    Screenshot: Azure Pipelines mit der Position der Menüoption „Umgebungen“.

  2. Klicken Sie auf Umgebung erstellen. Der Bereich Neue Umgebung wird angezeigt.

  3. Geben Sie unter Name den Namen spike ein.

  4. Behalten Sie in den übrigen Feldern die Standardwerte bei.

  5. Klicken Sie auf Erstellen.

Erstellen einer Dienstverbindung

Hier stellen Sie eine Dienstverbindung her, die Azure Pipelines den Zugriff auf Ihr Azure-Abonnement ermöglicht. Azure Pipelines verwendet diese Dienstverbindung, um die Website in App Service bereitzustellen. Eine ähnliche Dienstverbindung haben Sie im vorherigen Modul erstellt.

Wichtig

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

  1. Wählen Sie in Azure DevOps im Pipelineprojekt Space Game - Web - Azure Functions unterhalb des Menüs die Option Projekteinstellungen aus. Der Bereich Projektdetails wird angezeigt.

  2. Klicken Sie im Menü unter Pipelines auf Dienstverbindungen.

  3. Wählen Sie auf der Seite Dienstverbindungen die Option Neue Dienstverbindung und dann im Bereich Neue Dienstverbindung die Option Azure Resource Manager aus, und klicken Sie auf Weiter.

  4. Wählen Sie im Bereich Neue Dienstverbindung die Option Dienstprinzipal (automatisch) aus, und klicken Sie dann auf Weiter.

  5. Wählen Sie im Bereich Neue Azure-Dienstverbindung die folgenden Einstellungen aus, oder geben Sie sie ein:

    Feld Wert
    Bereichsebene Abonnement
    Subscription Wählen Sie Ihr Azure-Abonnement aus.
    Ressourcengruppe tailspin-space-game-rg
    Name der Dienstverbindung Resource Manager – Tailspin – Space Game

    Im weiteren Verlauf werden Sie u. U. aufgefordert, sich bei Ihrem Microsoft-Konto anzumelden.

  6. Achten Sie darauf, dass Grant access permission to all pipelines ausgewählt ist.

  7. Wählen Sie Speichern aus.

Azure DevOps führt einen Verbindungstest aus, um sicherzustellen, dass eine Verbindung mit Ihrem Azure-Abonnement hergestellt werden kann. Wenn Azure DevOps keine Verbindung herstellen kann, haben Sie die Möglichkeit, sich ein zweites Mal anzumelden.