Übung: Einrichten der Azure DevOps-Umgebung

Abgeschlossen

In diesem Abschnitt erfahren Sie, wie Sie Ihre Azure DevOps-Organisation einrichten und die Azure App Service-Umgebung erstellen, in der Sie die Bereitstellung durchführen werden.

Sie lernen Folgendes:

  • Einrichten Ihres Azure DevOps-Projekts
  • Verwalten Ihrer Arbeitselemente mit Azure Boards
  • Erstellen Ihrer Azure App Service-Umgebung
  • Sie erstellen Pipelinevariablen in Azure Pipelines.
  • Erstellen einer Dienstverbindung zur Authentifizierung bei Ihrem Azure-Abonnement

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 für die Arbeit mit Azure DevOps kein Azure-Abonnement, aber in diesem Modul verwenden Sie Azure DevOps für die Bereitstellung in Azure-Ressourcen. Zum Vereinfachen des Prozesses verwenden Sie für die Anmeldung bei Azure und Azure DevOps dasselbe Microsoft-Konto.

Wenn Sie verschiedene Microsoft-Konten für die Anmeldung bei Azure und Azure DevOps verwenden, fügen Sie Ihrer DevOps-Organisation über das für die Anmeldung bei Azure verwendete Microsoft-Konto einen Benutzer bzw. eine Benutzerin mit der Zugriffsstufe Basic hinzu. Weitere Informationen finden Sie unter Hinzufügen von Benutzern zu Ihrer Organisation oder Ihrem Projekt.

Melden Sie sich dann von Azure DevOps ab, und melden Sie sich mit dem Konto wieder an, mit dem Sie sich bei Ihrem Azure-Abonnement angemeldet haben.

Abrufen des Azure DevOps-Projekts

Hier stellen Sie sicher, dass Ihre Azure DevOps-Organisation eingerichtet ist, den Rest dieses Moduls zu absolvieren. Führen Sie hierzu 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.

    Screenshot of 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. Autorisieren Sie bei entsprechender Aufforderung den Zugriff auf Ihr GitHub-Konto.

    Wichtig

    Sie müssen diese Option auswählen, damit die Vorlage eine Verbindung mit Ihrem GitHub-Repository herstellen kann. Aktivieren Sie das Kontrollkästchen selbst dann, wenn Sie das Repository Space Game bereits geforkt haben. Die Vorlage verwendet den vorhandenen Fork.

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

  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

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

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, Container-Version der Website mit Docker erstellen, in die Spalte Erledigen und weisen sich dann selbst das Arbeitselement zu.

So richten Sie das Arbeitselement ein:

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

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

  2. Wählen Sie in der Containerversion der Website mithilfe der Docker-Arbeitsaufgabe den Abwärtspfeil unten auf der Karte aus, und weisen Sie das Arbeitselement dann selbst zu.

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

    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

Im Modul Erstellen einer Releasepipeline mit Azure Pipelines haben Sie mithilfe des Azure-Portals eine App Service-Instanz erstellt. Das Portal ist zwar ein hervorragendes Tool zum Erkunden der Azure-Angebote, das Einrichten von Komponenten wie App Service kann jedoch recht umständlich sein.

In diesem Modul verwenden Sie die Azure-Befehlszeilenschnittstelle (Azure CLI), um die für die Bereitstellung und den Betrieb einer App Service-Instanz benötigten Ressourcen zu starten. Der Zugriff auf die Azure CLI ist über ein Terminal oder über Visual Studio Code möglich.

Wichtig

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

Starten von Cloud Shell im Azure-Portal

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

  2. Wählen Sie auf der Menüleiste Cloud Shell und dann Bash aus.

    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 besteht aus einem oder mehreren Azure-Rechenzentren, die sich an einem bestimmten geografischen Standort befinden. Einige Beispiele für Regionen sind „USA, Osten“, „USA, Westen“ und „Europa, Norden“. Jede Azure-Ressource, wie z. B. eine App Service-Instanz, wird einer bestimmten Region zugewiesen.

Um den Prozess der Befehlsausführung zu vereinfachen, wählen Sie zunächst eine Standardregion aus. Nach Festlegung der Standardregion wird bei nachfolgenden Befehlen standardmäßig diese Region verwendet, sofern nicht explizit eine andere Region angegeben wird.

  1. Führen Sie den folgenden Befehl aus, um die verfügbaren Regionen für Ihr Azure-Abonnement aufzulisten.

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Wählen Sie in der Spalte Name der Ausgabe eine Region aus, die sich in der Nähe Ihres Standorts 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 den Platzhalter durch den Namen der Region, die Sie ausgewählt haben.

    az configure --defaults location=<REGION>
    

    In diesem Beispiel wird westus2 als Standardregion festgelegt:

    az configure --defaults location=westus2
    

Erstellen von Bash-Variablen

In diesem Abschnitt 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 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. Die Verwendung von doppelten Anführungszeichen in diesen Befehlen veranlasst Bash, 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

Hinweis

Zu Lernzwecken werden hier die Standardnetzwerkeinstellungen verwendet. 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. Sie werden hier dasselbe tun. 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. Wenn sich die Namen Ihrer Instanzen ändern, können Sie 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.

    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:

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

Erstellen erforderlicher Dienstverbindungen

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

Wichtig

Achten Sie darauf, dass Sie sowohl beim Azure-Portal als auch bei Azure DevOps mit dem selben 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 Wert
    Bereichsebene Subscription
    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 Wert
    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, wenn Sie fertig sind.