Übung: Einrichten der Azure DevOps-Umgebung

Abgeschlossen

In diesem Abschnitt stellen Sie sicher, dass Ihre Azure DevOps-Organisation so eingerichtet ist, dass Sie den Rest dieses Moduls durchführen können. Sie erstellen außerdem die Azure App Service-Umgebung, in der Sie die Bereitstellung vornehmen.

Dazu führen Sie folgende Schritte aus:

  • 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).
  • Erstellen Sie eine Azure Container Registry-Instanz und eine Azure App Service-Web-App mithilfe der Azure CLI in Azure Cloud Shell.
  • Erstellen Sie die Pipelinevariablen, die die Namen Ihrer Azure-Ressourcen 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.

Sie benötigen kein Azure-Abonnement, um mit Azure DevOps arbeiten zu können, aber hier verwenden Sie Azure DevOps für die Bereitstellung in Azure-Ressourcen, die in Ihrem Azure-Abonnement vorhanden sind. Um den Prozess zu vereinfachen, melden Sie sich mit demselben Microsoft-Konto bei Ihrem Azure-Abonnement und der Azure DevOps-Organisation an.

Fügen Sie der DevOps-Organisation unter dem Microsoft-Konto, das Sie für die Anmeldung bei Azure verwenden, einen Benutzer hinzu, wenn Sie verschiedene Microsoft-Konten für die Anmeldung bei Azure und Azure DevOps verwenden. Weitere Informationen finden Sie unter Hinzufügen von Benutzern zu einer Organisation oder einem Projekt. Wählen Sie beim Hinzufügen des Benutzers die Zugriffsebene Basic aus.

Melden Sie sich dann bei Azure DevOps ab, und melden Sie sich erneut an. Verwenden Sie das Microsoft-Konto, das Sie zur Anmeldung bei Ihrem Azure-Abonnement verwenden.

Abrufen des Azure DevOps-Projekts

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

Die Module in diesem Lernpfad sind fortschreitend angeordnet. Sie folgen dem Tailspin-Webteam auf seiner DevOps-Journey. Zu Lernzwecken verfügt jedes Modul über sein eigenes Azure DevOps-Projekt.

Ausführen der Vorlage

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

Führen Sie die folgenden Schritte auf der „Azure DevOps Demo Generator“-Website durch, um die Vorlage auszuführen:

  1. Wählen Sie Sign In (Anmelden) aus, und akzeptieren Sie die Nutzungsbedingungen.

  2. Wählen Sie auf der Seite Create New Project (Neues Projekt erstellen) Ihre Azure DevOps-Organisation aus. Geben Sie einen Projektnamen wie Space Game - web - Docker ein.

    Creating a project through Azure DevOps Demo Generator.

  3. Wählen Sie Yes, I want to fork this repository>Authorize (Ja, ich möchte dieses Repository forken > Autorisieren) aus.

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

    Wichtig

    Sie müssen diese Option auswählen, damit die Vorlage mit Ihrem GitHub-Repository verbunden wird. Wählen Sie sie auch dann aus, wenn Sie das Websiteprojekt Space Game bereits geforkt haben. Die Vorlage verwendet Ihren vorhandenen Fork.

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

    Die Ausführung der Vorlage dauert einige Zeit.

  5. Klicken Sie auf Zu Projekt navigieren, um zu Ihrem Projekt in Azure DevOps zu wechseln.

Wichtig

In diesem Modul enthält die Seite Clean up your Azure DevOps environment (Bereinigen der Azure DevOps-Umgebung) wichtige Bereinigungsschritte. Durch das Bereinigen stellen Sie sicher, dass Sie weiterhin über kostenlose Erstellungsminuten verfügen. Befolgen Sie unbedingt die Bereinigungsschritte, auch wenn Sie dieses Modul nicht abschließen.

Festlegen der Sichtbarkeit Ihres Projekts

Der Fork des Repositorys Space Game auf GitHub ist zunächst öffentlich. Ein mit der Azure DevOps-Vorlage erstelltes Projekt ist zunächst privat.

Auf ein öffentliches GitHub-Repository können alle zugreifen, während ein privates Repository nur für Sie und die Personen zugänglich ist, für die Sie es freigeben. In beiden Fällen können nur Projektmitarbeiter für Änderungen an ein GitHub-Repository committen.

Dasselbe gilt für Projekte in Azure DevOps. Benutzer, die nicht bei dem Dienst angemeldet sind, verfügen nur über schreibgeschützten Zugriff auf öffentliche Projekte. Bei privaten Projekten muss Benutzern Zugriff auf das Projekt gewährt werden, und sie müssen angemeldet sein, um auf die Dienste zugreifen zu können.

Für die Lernzwecke in diesem Modul müssen Sie diese Einstellungen nicht ändern. Bei Ihren eigenen Projekten müssen Sie jedoch entscheiden, welche Sichtbarkeit und welchen Zugriff andere Benutzer erhalten sollen. Bei einem Open-Source-Projekt können Sie z. B. sowohl Ihr GitHub-Repository als auch das Azure DevOps-Projekt öffentlich machen. Handelt es sich jedoch nicht um ein Open-Source-Projekt, sollten Sie sowohl Ihr GitHub-Repository als auch das Azure DevOps-Projekt als privat festlegen.

Informationen, die Sie später für die Entscheidung nutzen können, welche Option für Ihr Projekt am besten geeignet ist, finden Sie in den folgenden Ressourcen:

Versetzen des Arbeitselements in die Ausführung

Hier weisen Sie sich selbst ein Arbeitselement in Azure Boards zu. Außerdem versetzen Sie das Arbeitselement in den Zustand Doing (Wird ausgeführt). In der Praxis würden Sie und Ihr Team Arbeitselemente zu Beginn jedes Sprints oder jeder Arbeitsiteration erstellen.

Dieser Arbeitszuweisung verschafft Ihnen eine Checkliste, nach der Sie arbeiten können. 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.

Hier verschieben Sie das erste Element (Create container version of web site using Docker (Erstellen einer Containerversion der Website mithilfe von Docker)) in die Spalte Doing (Wird ausgeführt). Anschließend weisen Sie sich selbst dem Arbeitselement zu.

So richten Sie das Arbeitselement ein:

  1. Navigieren Sie von Azure DevOps zu Boards. Wählen Sie dann im Menü Boards aus.

    A screenshot of Azure DevOps showing the location of the Boards menu.

  2. Wählen Sie im Arbeitselement Create container version of web site using Docker (Erstellen einer Containerversion der Website mithilfe von Docker) auf den Pfeil nach unten am unteren Rand der Karte. Weisen Sie sich dann das Arbeitselement zu.

    A screenshot of Azure Boards showing the location of the down arrow.

  3. Verschieben Sie das Arbeitselement aus der Spalte To Do (Zu erledigen) in die Spalte Doing (Wird ausgeführt).

    A screenshot of Azure Boards showing the card in the Doing column.

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

Erstellen der Azure App Service-Umgebung

Hier erstellen Sie die App Service-Instanz, die für die Bereitstellung der neuen Containerversion der Website erforderlich ist.

In Erstellen einer Releasepipeline mit Azure Pipelines haben Sie App Service über das Azure-Portal aufgerufen. Obwohl das Portal eine großartige Möglichkeit zum Erkunden bietet, 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 die Ressourcen zur Verfügung zu stellen, die zum Bereitstellen und Ausführen einer App Service-Instanz erforderlich sind. 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 von Cloud Shell über das Azure-Portal

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

  2. Wählen Sie im Menü Cloud Shell aus. Wenn Sie dazu aufgefordert werden, wählen Sie die Bash-Benutzeroberfläche aus.

    A 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

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, wählen Sie zunächst eine Standardregion aus. Nachdem Sie die Standardregion festgelegt haben, verwenden spätere Befehle diese Region, es sei denn, Sie geben eine andere Region an.

  1. Führen Sie in Cloud Shell den folgenden az account list-locations-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 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

Erstellen Sie einige 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 in Cloud Shell eine Zufallszahl. Dies vereinfacht die Erstellung global eindeutiger Namen für bestimmte Dienste im nächsten Schritt.

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

    webName="tailspin-space-game-web-${resourceSuffix}"
    registryName="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 Azure-Ressourcen

Diese Lösung erfordert mehrere Azure-Ressourcen für die Bereitstellung, die Sie jetzt erstellen.

Hinweis

Zu Lernzwecken verwenden Sie hier die Standardeinstellungen des Netzwerks. Diese Einstellungen machen Ihre Website über das Internet zugänglich. In der Praxis könnten Sie ein virtuelles Azure-Netzwerk konfigurieren, das Ihre Website in einem Netzwerk platziert, 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 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 Befehl az acr create aus, um eine Azure Container Registry-Instanz mit dem zuvor definierten Namen zu erstellen.

    az acr create --name $registryName \
      --resource-group $rgName \
      --sku Standard \
      --admin-enabled true
    
  3. Führen Sie den folgenden Befehl az appservice plan create aus, um einen App Service-Plan mit dem zuvor definierten Namen zu erstellen.

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

    Das Argument --sku gibt den B1-Plan an. Dieser Plan wird im Basic-Tarif ausgeführt. Das --is-linux-Argument gibt an, dass Linux-Worker verwendet werden sollen.

    Wichtig

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

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

    az webapp create \
      --name $webName \
      --resource-group $rgName \
      --plan $planName \
      --deployment-container-image-name $registryName.azurecr.io/web:latest
    
  5. Führen Sie den folgenden Befehl az webapp list 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. Sie benötigen ihn später, wenn Sie Ihre Arbeit überprüfen. Hier sehen Sie ein Beispiel:

    HostName                                        State
    ----------------------------------------------  -------
    tailspin-space-game-web-4692.azurewebsites.net  Running
    
  6. Führen Sie den folgenden az acr list-Befehl aus, um den Anmeldeserver der Azure Container Registry-Instanz aufzulisten. Sie benötigen diesen Servernamen, wenn Sie später Pipelinevariablen erstellen.

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

    Notieren Sie sich den Anmeldeserver. Sie benötigen ihn später beim Konfigurieren der Pipeline. Hier sehen Sie ein Beispiel:

    LoginServer
    ---------------------------------
    tailspinspacegame4692.azurecr.io    
    

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

In Erstellen einer Releasepipeline mit Azure Pipelines haben Sie Ihrer Pipeline eine Variable hinzugefügt, in der der Name Ihrer Web-App in App Service gespeichert wird. Hier gehen Sie genauso vor. Außerdem fügen Sie den Namen Ihrer Azure Container Registry-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.

So fügen Sie die Variablen hinzu:

  1. Navigieren Sie in Azure DevOps zu Ihrem Projekt Space Game -Web - Docker.

  2. Wählen Sie unter Pipelines die Option Library (Bibliothek) aus.

    A screenshot of Azure Pipelines showing the Library menu option.

  3. Wählen Sie + Variable group (Variablengruppe) aus.

  4. Geben Sie unter Properties als Variablengruppennamen Release ein.

  5. Wählen Sie unter Variables die Option + Add aus.

  6. Geben Sie als Namen Ihrer Variable WebAppName ein. Geben Sie als Wert den Namen der oben erstellten App Service-Instanz ein, z. B. tailspin-space-game-web-4692.

    Wichtig

    Legen Sie den Namen der App Service-Instanz fest, nicht deren Hostnamen. In diesem Beispiel würden Sie tailspin-space-game-web-4692 und nicht tailspin-space-game-web-4692.azurewebsites.net eingeben.

  7. Wiederholen Sie den Vorgang, um eine weitere Variable mit dem Namen RegistryName mit dem Wert Ihres Azure Container Registry-Anmeldeservers hinzuzufügen, z. B. tailspinspacegame4692.azurecr.io.

  8. Wählen Sie Pipelineberechtigungen und dann das Symbol + aus, um eine Pipeline hinzuzufügen. Wählen Sie mslearn-tailspin-spacegame-web-docker aus, um Ihrer Pipeline die Berechtigung für den Zugriff auf die Variablengruppe zu erteilen.

  9. Wählen Sie oben auf der Seite Speichern aus, um Ihre Variablen zu speichern. Ihre Variablengruppe sollte wie folgt aussehen:

    A screenshot of Azure Pipeline showing the variable group. The group contains two variables.

Erstellen erforderlicher Dienstverbindungen

Hier erstellen Sie eine Dienstverbindung, 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. Außerdem erstellen Sie eine Docker Registry-Verbindung, um Ihren Container in Azure Container Registry zu veröffentlichen.

Wichtig

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

  1. Navigieren Sie in Azure DevOps zu Ihrem Projekt Space Game -Web - Docker.

  2. Wählen Sie in der unteren Ecke der Seite Projekteinstellungen aus.

  3. Klicken Sie unter Pipelines auf Dienstverbindungen.

  4. Wählen Sie New service connection (Neue Dienstverbindung) und dann Azure Resource Manager aus. Klicken Sie anschließend auf Next (Weiter) aus.

  5. Wählen Sie oben auf der Seite Service principal (automatic) (Dienstprinzipal (automatisch)) aus. Wählen Sie Weiteraus.

  6. Füllen Sie die folgenden Felder aus:

    Feld value
    Bereichsebene Abonnement
    Subscription Ihr Azure-Abonnement
    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.

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

  8. 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.

  9. Wählen Sie New service connection und dann Docker Registry aus, und klicken Sie anschließend auf Next.

  10. Wählen Sie am oberen Rand der Seite die Option Azure Container Registry aus.

  11. Füllen Sie die folgenden Felder aus:

    Feld value
    Subscription Ihr Azure-Abonnement
    Azure-Containerregistrierung Wählen Sie die zuvor von Ihnen erstellte Registrierung aus.
    Name der Dienstverbindung Container Registry-Verbindung
  12. Achten Sie darauf, dass Grant access permission to all pipelines ausgewählt ist.

  13. Wählen Sie Speichern aus.