Verstehen von Azure Pipelines

Abgeschlossen

Mithilfe einer Pipeline können Sie die Schritte in Ihrem Bereitstellungsprozess automatisieren. Jedes Mal, wenn Sie eine Änderung an Ihrem Code vornehmen und die Änderung in Ihr Git-Repository committen, führt die Pipeline Ihren vordefinierten Prozess aus. Eine Pipeline kann überprüfen, ob Ihr Bicep-Code Ihren Qualitätsstandards entspricht, und dann die Schritte zum Bereitstellen Ihrer Ressourcen in Azure automatisieren. Der Prozess wird in einer Pipelinedefinition festgelegt, die Sie erstellen.

Azure Pipelines ist ein Feature des Azure DevOps-Diensts. Azure DevOps enthält auch Azure Repos, das die Git-Repositorys hostet, die Sie zum Speichern und Freigeben Ihres Codes für Ihre Projektmitarbeiter verwenden. Nachdem Ihr Bicep-Code in Git gespeichert ist, kann Azure Pipelines darauf zugreifen, um Ihre Bereitstellungsprozesse zu automatisieren. In dieser Lerneinheit erfahren Sie mehr über Azure Pipelines.

Was ist eine Pipeline?

Eine Pipeline ist der wiederholbare Prozess, den Sie zum Testen und Bereitstellen Ihres Codes verwenden und der in einer Konfigurationsdatei definiert ist. Eine Pipeline enthält alle Schritte in der gewünschten Ausführungsreihenfolge.

Wenn Sie mit Azure Pipelines arbeiten, definieren Sie Ihre Pipeline in einer YAML-Datei. Eine YAML-Datei ist eine strukturierte Textdatei, so wie auch eine Bicep-Datei eine strukturierte Textdatei ist. Sie können YAML-Dateien mit einem beliebigen Text-Editor erstellen und bearbeiten. In diesem Modul werden Sie Visual Studio Code verwenden. Visual Studio Code bietet eine Erweiterung, die das Bearbeiten von YAML-Pipelinedateien für Azure DevOps vereinfachen kann. Die Azure DevOps-Weboberfläche bietet auch einige Tools zum Anzeigen und Bearbeiten Ihrer YAML-Pipelinedateien.

Hinweis

Azure Pipelines umfasst auch klassische Pipelines, bei denen es sich um eine ältere Version des Pipelinefeatures handelt. YAML-basierte Pipelines haben klassische Pipelines ersetzt. In diesem Modul werden nur YAML-Pipelines beschrieben. Es wird empfohlen, YAML-Pipelines zu verwenden.

Da es sich bei einer YAML-Pipelinedatei um eine Codedatei handelt, wird die Datei zusammen mit Ihrem Bicep-Code in Ihrem Git-Repository gespeichert. Sie verwenden Git-Funktionen, um an Ihrer Pipelinedefinition zusammenzuarbeiten. Sie können verschiedene Versionen Ihrer Pipelinedatei mithilfe von Commits und Branches verwalten. In einem späteren Modul erfahren Sie außerdem mehr über weitere komplexere Features von Pipelines wie Vorlagen. Vorlagen vereinfachen die Wiederverwendung von Pipelinedefinitionen.

Agents und Pools

Bisher haben Sie Ihre Bicep-Dateien von Ihrem lokalen Computer aus bereitgestellt. Nachdem Sie eine Bicep-Vorlage geschrieben haben, stellen Sie sie in Azure mithilfe des Azure CLI oder Azure PowerShell bereit. Diese Tools verwenden die Ressourcen Ihres Computers, um die Vorlage an Azure zu übermitteln. Sie verwenden Ihre persönliche Identität, um sich bei Azure zu authentifizieren und zu überprüfen, ob Sie über die Berechtigungen zum Bereitstellen der Ressourcen verfügen.

Eine Pipeline benötigt auch Zugriff auf einen Computer, damit sie die Bereitstellungsschritte ausführen kann. Azure Pipelines verwendet einen Computer, der als Agent bezeichnet wird. Ein Agent ist ein Computer, der zum Ausführen von Bereitstellungsschritten für eine Pipeline konfiguriert ist. Jeder Agent verfügt bereits über die Bicep- und Azure-Tools, die Sie in den vorherigen Modulen verwendet haben, sodass er dieselben Dinge wie Sie auf Ihrem eigenen Computer ausführen kann. Anstelle einer Person, die Befehle ausführt, weist der Azure Pipelines-Dienst den Agent an, die von Ihnen in der YAML-Datei definierten Schritte auszuführen.

Azure Pipelines stellt mehrere Typen von Agents für unterschiedliche Betriebssysteme wie Ubuntu oder Windows und mit verschiedenen Tools zur Verfügung. Microsoft führt diese Agents aus, damit Sie keine Computeinfrastruktur für die Agents verwalten müssen. Sie werden manchmal als von Microsoft gehostete Agents oder gehostete Agents bezeichnet, da sie in Ihrem Namen gehostet werden. Bei der Ausführung Ihrer Pipeline wird automatisch ein gehosteter Agent erstellt. Nach Abschluss der Ausführung Ihrer Pipeline wird der gehostete Agent automatisch wieder gelöscht. Sie können nicht direkt auf gehostete Agents zugreifen. Daher ist es wichtig, dass Ihre Pipeline alle erforderlichen Schritte zum Bereitstellen Ihrer Lösung enthält.

Ein Agentpool enthält mehrere Agents desselben Typs. Wenn Sie Ihre Pipeline erstellen, teilen Sie Azure Pipelines mit, welcher Agentpool zum Ausführen der einzelnen Schritte verwendet werden soll. Wenn Ihre Pipeline ausgeführt wird, wartet sie darauf, dass ein Agent aus dem Pool verfügbar wird, und weist den Agent dann an, Ihre Bereitstellungsschritte auszuführen. Jeder Agent aus dem Pool kann für die Ausführung Ihrer Pipeline zugewiesen werden.

Diagram that shows a pipeline that runs on an agent within an agent pool.

Hinweis

Sie haben auch die Möglichkeit, einen benutzerdefinierten Agent zu erstellen, der dann als selbstgehosteter Agent bezeichnet wird. Ein selbstgehosteter Agent bietet sich z. B. an, wenn Sie über bestimmte Software verfügen, die Sie als Teil Ihrer Pipeline ausführen müssen, oder wenn Sie präzise Kontrolle über die Konfiguration des Agents benötigen. In diesem Modul werden keine selbstgehosteten Agents besprochen, aber wir stellen in der Zusammenfassung einen Link zu weiteren Informationen zur Verfügung.

Auslöser

Sie müssen Azure Pipelines mithilfe eines Triggers anweisen, wann Ihre Pipeline ausgeführt werden soll. Ihnen stehen mehrere Triggertypen zur Auswahl. Vorerst verwenden Sie einen manuellen Trigger. Dabei teilen Sie Azure Pipelines manuell mit, wann die Ausführung Ihrer Pipeline gestartet werden soll. Später in diesem Modul erfahren Sie mehr über andere Triggertypen.

Diagram that shows a trigger initiating a pipeline.

Schritte

Ein Schritt stellt einen einzelnen Vorgang dar, der von der Pipeline ausgeführt wird. Ein Schritt ähnelt einem einzelnen Befehl, den Sie in Bash oder PowerShell ausführen. Für die meisten Bereitstellungen führen Sie mehrere Schritte in einer Abfolge aus. Sie definieren die Abfolge und alle Details jedes Schritts in Ihrer YAML-Pipelinedatei.

Azure Pipelines bietet zwei Typen von Schritten:

  • Skripts: Verwenden Sie einen Skriptschritt, um einen einzelnen Befehl oder eine Befehlssequenz in Bash, PowerShell oder der Windows-Befehlsshell auszuführen.
  • Tasks: Tasks bieten Ihnen eine praktische Möglichkeit, um auf viele verschiedene Funktionen zuzugreifen, ohne Skriptanweisungen schreiben zu müssen. Beispielsweise gibt es integrierte Tasks für das Ausführen der Azure-Befehlszeilenschnittstelle und von Azure PowerShell-Cmdlets, um Ihren Code zu testen oder Dateien auf einen FTP-Server hochzuladen. Jeder kann einen Task schreiben und für andere Benutzer freigeben, indem er den Task im Visual Studio Marketplace veröffentlicht. Es stehen bereits sehr viele kommerzielle und Open-Source-Tasks zur Verfügung.

Einige Personen bevorzugen die Verwendung von Skriptanweisungen anstelle integrierter Tasks, da sie mehr Kontrolle darüber bieten, was genau ausgeführt wird. Andere bevorzugen die Verwendung von Tasks, damit sie keine Skripts schreiben und verwalten müssen. In diesem Modul verwenden wir eine Mischung aus beiden Ansätzen.

Aufträge

In Azure Pipelines stellt ein Auftrag einen geordneten Satz von Schritten dar. Sie verfügen immer über mindestens einen Auftrag in einer Pipeline, und wenn Sie komplexe Bereitstellungen erstellen, ist es üblich, mehr als einen Auftrag zu haben.

Hinweis

Sie können festlegen, dass jeder Auftrag in einem anderen Agentpool ausgeführt wird. Die Ausführung von Aufträgen in unterschiedlichen Agentpools ist nützlich, wenn Sie Lösungen erstellen und bereitstellen, die unterschiedliche Betriebssysteme in verschiedenen Teilen Ihrer Pipeline verwenden müssen.

Angenommen, Sie erstellen z. B. eine iOS-App und deren Back-End-Dienst. Möglicherweise verfügen Sie über einen Auftrag, der in einem macOS-Agentpool ausgeführt wird, um die iOS-App zu erstellen, und einen anderen Auftrag, der in einem Ubuntu- oder Windows-Agentpool ausgeführt wird, um das Back-End zu erstellen. Sie können die Pipeline sogar anweisen, die beiden Aufträge gleichzeitig auszuführen, was die Ausführung Ihrer Pipeline beschleunigt.

In diesem Modul deklarieren Sie den Agentpool im Stammverzeichnis der Pipelinedefinitionsdateien, damit alle Aufträge in den Pipelines denselben Agentpool verwenden.

Diagram that shows a pipeline with two steps, both within one job.

Hinweis

Sie können auch Stages in Azure Pipelines verwenden, mit denen Sie Ihre Pipeline in logische Phasen unterteilen und an verschiedenen Punkten der Pipelineausführung manuelle Überprüfungen hinzufügen können. Weitere Informationen zu Phasen finden Sie in späteren Modulen.

Beispiel für eine einfache Pipeline

Nachdem Sie nun die grundlegenden Konzepte hinter Azure Pipelines kennen, sehen Sie sich eine einfache Pipelinedefinition in YAML an:

trigger: none

pool:
  vmImage: ubuntu-latest

jobs:
- job:
  steps:
  - script: echo Hello, world!
    displayName: 'Run a one-line script'
  
  - script: |
      echo We'll add more steps soon.
      echo For example, we'll add our Bicep deployment step.
    displayName: 'Run a multi-line script'

Sehen Sie sich die einzelnen Teile der Datei im Detail an:

  • trigger teilt Ihrer Pipeline mit, wann sie ausgeführt werden soll. In diesem Fall teilt trigger: none Azure Pipelines mit, dass Sie die Pipeline manuell auslösen möchten.
  • pool weist die Pipeline an, welcher Agentpool beim Ausführen der Pipelineschritte verwendet werden soll. In diesem Beispiel wird die Pipeline auf einem Agent unter dem Betriebssystem Ubuntu ausgeführt, der aus dem Pool der von Microsoft gehosteten Agents stammt.
  • jobs gruppiert alle Aufträge zusammen in Ihrer Pipeline.
  • job teilt Ihrer Pipeline mit, dass Sie einen einzelnen Auftrag besitzen.

    Tipp

    Wenn Ihre Pipeline nur einen Auftrag enthält, können Sie die Schlüsselwörter jobs und job auslassen. job wurde eingeschlossen, um deutlich zu machen, wie die Konzepte in einer Pipeline zusammenarbeiten.

  • steps listet die Abfolge der Aktionen auf, die innerhalb des Auftrags ausgeführt werden sollen. Das YAML-Beispiel umfasst zwei Schritte. Beide Schritte führen ein einfaches Skript aus, um Text auszugeben. Jeder Schritt verfügt über einen displayName-Wert, der ein für Menschen lesbarer Name für den Schritt ist. Der Anzeigename wird angezeigt, wenn Sie sich die Pipelineprotokolle ansehen. Um einen mehrzeiligen Skriptschritt zu erstellen, verwenden Sie den senkrechten Strich (|) wie im Beispiel gezeigt. Nachdem Ihr Schritt ausgeführt wurde, werden die Ausgaben im Pipelineprotokoll angezeigt.

Wichtig

In YAML-Dateien sind Einzüge wichtig. Sehen Sie sich das YAML-Beispiel an. Einige Zeilen im YAML-Code sind um zwei oder vier Leerzeichen eingerückt. Die Anzahl der verwendeten Leerzeichen ist wichtig. Azure Pipelines kann Ihre Datei nur dann ordnungsgemäß interpretieren, wenn die Einzüge stimmen. Mit Visual Studio Code können Sie Fehler bei Einzügen in Ihren YAML-Dateien finden und beheben.