Planen einer Releasepipeline mithilfe von Azure-Pipelines
- 6 Minuten
In diesem Abschnitt folgen Sie zusammen mit Andy und Mara, während sie eine grundlegende CD-Pipeline planen, die auf Azure-Pipelines ausgeführt wird.
Wenn es abgeschlossen ist, werden sie es dem Rest des Teams vorführen. Die Pipeline wird als POC dienen, über die sie verbessern und erweitern werden, wenn sie mehr erfahren und Feedback von Tim und Amita erhalten.
Was sind die Teile einer grundlegenden CD-Pipeline?
Eine einfache CD-Pipeline enthält einen Trigger, um den Prozess in Gang zu bringen, und mindestens eine Stufe oder Bereitstellungsstufe. Eine Phase besteht aus Aufgaben. Ein Auftrag ist eine Reihe von Schritten, die definieren, wie Sie Ihre Anwendung erstellen, testen oder bereitstellen.
Andy: Wir verfügen bereits über das Buildartefakt . Es handelt sich um die .zip Datei, die von unserer vorhandenen Buildpipeline erstellt wird. Aber wie stellen wir es in einer Liveumgebung
bereit?
Was ist eine Pipelinephase?
Eine Phase ist ein Teil der Pipeline, die unabhängig ausgeführt und durch verschiedene Mechanismen ausgelöst werden kann. Ein Mechanismus kann der Erfolg der vorherigen Stufe, ein Zeitplan oder sogar ein manueller Trigger sein. Weitere Informationen zu diesen Mechanismen finden Sie im nächsten Modul.
Mara: Wir könnten eine Phase haben, in der die App und eine andere Phase erstellt wird, in der Tests ausgeführt werden.
Mara: Wir haben bereits die Aufgaben für die Buildphase in unserer Pipeline definiert. Unsere Bereitstellungsphase
kann ähnlich aussehen und Tasks beinhalten, die den Build in einer Umgebung bereitstellen.
Die Frage ist, wo sollten wir das Artefakt bereitstellen?
Was ist eine Umgebung?
Wahrscheinlich haben Sie den Begriff Umgebung schon verwendet, um den Ort zu bezeichnen, an dem Ihre Anwendung oder Ihr Dienst ausgeführt wird. Ihre Produktionsumgebung kann beispielsweise der Ort sein, an dem Ihre Endbenutzer auf Ihre Anwendung zugreifen.
Im folgenden Beispiel kann Ihre Produktionsumgebung wie folgt aussehen:
- Ein physischer Computer oder virtueller Computer (VM).
- Eine containerisierte Umgebung, z. B. Kubernetes.
- Ein verwalteter Dienst, z. B. Azure App Service.
- Eine serverlose Umgebung, z. B. Azure Functions.
Ein Artefakt wird in einer Umgebung bereitgestellt. Azure Pipelines erleichtert die Bereitstellung in nahezu jeder Art von Umgebung, unabhängig davon, ob sie lokal oder in der Cloud vorhanden ist.
In Azure Pipelines hat der Begriff "Umgebung" eine zweite Bedeutung. Hier ist eine Umgebung eine abstrakte Darstellung Ihrer Bereitstellungsumgebung, z. B. ein Kubernetes-Cluster, eine App Service-Instanz oder ein virtueller Computer.
Eine Azure Pipelines-Umgebung zeichnet den Bereitstellungsverlauf auf, um die Quelle der Änderungen zu identifizieren. Mithilfe von Azure Pipelines-Umgebungen können Sie auch Sicherheitsprüfungen und Möglichkeiten definieren, um zu steuern, wie ein Artefakt von einer Phase einer Pipeline zu einer anderen heraufgestuft wird. Was eine Umgebung umfasst, hängt davon ab, was Sie mit dem Artefakt tun möchten. Eine Umgebung, in der Sie das Artefakt testen möchten, ist wahrscheinlich anders definiert als eine Umgebung, in der Sie das Artefakt für Ihre Endbenutzer bereitstellen möchten.
Eine Möglichkeit zum Definieren einer Azure Pipelines-Umgebung ist eine YAML-Datei. Ihre YAML-Datei enthält einen environment
Abschnitt, der die Azure Pipelines-Umgebung angibt, in der Sie Ihr Artefakt bereitstellen.
Beim Planen der Veröffentlichungspipeline müssen Sie entscheiden, wo Ihre Anwendung oder Ihr Dienst ausgeführt wird. Schauen wir uns an, was Andy und Mara entscheiden.
Andy: Auf hoher Ebene, welche Art von Umgebung wollen wir? Möchten wir lokal oder in der Cloud bereitstellen?
Mara: Wir könnten Tim bitten, eine virtuelle Maschine für uns im Labor zu erstellen, aber ihm geht immer die Hardware aus. Es ist schnell und einfach, einen POC selbst einzurichten, wenn wir die Cloud verwenden.
Andy: Ich stimme zu; es gibt jedoch so viele Zu berücksichtigende Cloudoptionen, und wir können Azure-Pipelines verwenden, um sie für jeden von ihnen bereitzustellen. Was sollten wir versuchen?
Mara: Die Teams, die unsere Spiele entwickeln, verwenden Azure, um einige ihrer Back-End-Systeme zu hosten. Sie richten es schnell ein und scheinen es zu mögen. Ich denke, wir sollten mit Azure für unsere Cloud bleiben.
Andy: OK, das macht Sinn! Azure bietet jedoch so viele Berechnungsoptionen. Was sollten wir auswählen?
Andy listet diese Optionen auf dem Whiteboard auf:
- Virtuelle Computer
- Behälter
- Azure App Service
- Serverloses Rechnen
Hinweis
Weitere Informationen zu den einzelnen Berechnungsoptionen finden Sie am Ende dieses Moduls.
Mara: Ich weiß, dass Container und serverloses Computing derzeit beliebt sind. Im Vergleich zu VMs sind beide recht schlank, was die Ressourcen angeht. Sie sind auch einfach zu ersetzen und zu skalieren. Beide sind interessant, aber ich bin nervös, zwei neue Technologien gleichzeitig zu lernen. Ich möchte mich lieber nur auf den Bau der Pipeline konzentrieren.
Andy: Ich bin mit Ihnen. Bleiben also VMs oder App Service. Ich denke, VMs wären eine bessere Wahl, wenn wir eine Branchen-App – eine, die vollständigen Zugriff auf eine bestimmte Umgebung erfordert – in die Cloud verschieben würden. Wir tun nichts, was bedeutend ist.
Mara: Damit bleibt App Service, was meine Wahl wäre. Es wurde entwickelt, um mit Azure DevOps zu arbeiten und bietet Vorteile. Es ist eine Plattform-as-a-Service-Umgebung (PaaS) für Web-Apps, sodass es uns viel Aufwand abnimmt. Wir müssen uns keine Gedanken über die Infrastruktur machen. Es ist auch mit Sicherheitsfeatures ausgestattet und ermöglicht es uns, Lastenausgleich und automatische Skalierung durchzuführen.
Andy: Der App-Dienst klingt wie das, was wir benötigen. Lassen Sie uns App Service verwenden. Wir erstellen trotzdem nur einen Machbarkeitsnachweis. Wir können die Berechnungsoption jederzeit ändern, wenn wir später etwas anderes ausprobieren möchten.
Wie führt Azure Pipelines Bereitstellungsschritte aus?
Um Ihre Anwendung bereitzustellen, muss Azure Pipelines sich zuerst mit der Zielumgebung authentifizieren. Azure Pipelines bietet verschiedene Authentifizierungsmechanismen. Das, was Sie verwenden, hängt von der Zielumgebung ab, in die Sie verteilen. Weitere Informationen zu diesen Mechanismen finden Sie am Ende dieses Moduls.
Andy: Wir haben das Buildartefakt, und wir wissen, dass wir in den Phasen der Pipeline erstellen und bereitstellen werden. Wir haben auch die Zielumgebung für unsere Bereitstellung definiert. Das ist App Service. Meine Frage ist jetzt, wie authentifiziert sich Azure Pipelines bei App Service? Ich weiß, dass dies eines der Anliegen von Tim sein wird. Wir müssen sicherstellen, dass der Prozess sicher ist.
Nach einer kurzen Recherche finden Andy und Mara die allgemeinen Schritte, die es Azure Pipelines ermöglichen, in App Service bereitzustellen:
- Angeben der Zielbereitstellungsumgebung in der Pipelinekonfiguration.
- Stellen Sie eine Möglichkeit für Azure-Pipelines bereit, den Zugriff auf diese Umgebung zu authentifizieren.
- Verwenden von Azure Pipelines-Tasks, um das Buildartefakt in dieser Umgebung bereitzustellen.
Mara: Laut unserer Recherche müssen wir eine Dienstverbindung erstellen, um die Zielumgebung anzugeben und den Zugriff darauf zu authentifizieren. Nachdem wir die Dienstverbindung definiert haben, steht sie für alle zu verwendenden Aufgaben zur Verfügung. Anschließend müssen wir die integrierte Aufgabe DownloadPipelineArtifact@2 verwenden, um das Buildartefakt in den Pipeline-Agent herunterzuladen, und die Aufgabe AzureWebApp@1, um unsere Anwendung in Azure App Service bereitzustellen.
Was sind Arbeitsplätze und Strategien?
Ihre vorhandene Buildpipeline definiert einen Build-Agent, Pipelinevariablen und die aufgaben, die zum Erstellen Ihrer Software erforderlich sind.
Der Bereitstellungsteil Ihrer Pipeline enthält dieselben Elemente. Ihre Bereitstellungskonfiguration definiert in der Regel auch einen oder mehrere Aufträge, eine Pipelineumgebung und Strategien. Sie haben zuvor mehr über Pipelineumgebungen erfahren.
Hier ist eine Beispielkonfiguration, die Sie später in diesem Modul ausführen werden. Diese Konfiguration stellt die Space Game-Website in Azure App Service bereit.
- stage: 'DeployDev'
displayName: 'Deploy to dev environment'
dependsOn: Build
jobs:
- deployment: Deploy
pool:
vmImage: 'ubuntu-20.04'
environment: dev
variables:
- group: 'Release Pipeline'
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: drop
- task: AzureWebApp@1
displayName: 'Azure App Service Deploy: website'
inputs:
azureSubscription: 'Resource Manager - Tailspin - Space Game'
appName: '$(WebAppName)'
package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Arbeitsplätze
Ein Auftrag ist eine Reihe von Schritten oder Aufgaben, die sequenziell als Einheit ausgeführt werden. Standardmäßig hat jede Pipelinestufe einen Job, auch wenn in dieser Stufe das job
Schlüsselwort nicht verwendet wird.
Ein Auftrag kann in einem Agentpool, in einem Container oder direkt auf dem Azure DevOps-Server ausgeführt werden. Der hier gezeigte Beispielauftrag wird auf einem von Microsoft gehosteten Ubuntu-Agent ausgeführt.
Sie können die Bedingungen angeben, unter denen jeder Auftrag ausgeführt wird. Der hier gezeigte Beispielauftrag definiert keine Bedingungen. Standardmäßig wird ein Auftrag ausgeführt, wenn er von keinem anderen Auftrag abhängig ist, oder wenn alle Aufträge, von denen er abhängig ist, erfolgreich beendet wurden.
Sie können Aufträge auch parallel oder sequenziell ausführen. Mithilfe Ihrer vorhandenen Buildpipeline können Sie beispielsweise parallele Aufträge verwenden, um Ihre Software auf Windows-, Linux- und macOS-Agents gleichzeitig zu erstellen.
Ein Bereitstellungsauftrag ist eine spezielle Art von Auftrag, der in Ihren Bereitstellungsphasen eine wichtige Rolle spielt. Bereitstellungsaufträge zeichnen den Status Ihrer Bereitstellungen in Azure Pipelines auf und bieten Ihnen einen Überwachungspfad. Bereitstellungsaufträge helfen Ihnen auch bei der Definition Ihrer Bereitstellungsstrategie, die wir in Kürze ausführen werden.
Strategien
Eine Strategie definiert, wie Ihre Anwendung eingeführt wird. In einem zukünftigen Modul erfahren Sie mehr über Strategien wie Blaugrün und Canary. Jetzt verwenden Sie die runOnce-Strategie , um das Space Game-Paket aus der Pipeline herunterzuladen und in Azure App Service bereitzustellen.
Wie stellt Azure Pipelines eine Verbindung mit Azure her?
Um Ihre App in einer Azure-Ressource wie einem virtuellen Computer oder App Service bereitzustellen, benötigen Sie eine Dienstverbindung. Eine Dienstverbindung bietet sicheren Zugriff auf Ihr Azure-Abonnement mithilfe einer der beiden Methoden:
- Dienstprinzipalauthentifizierung
- Verwaltete Identitäten für Azure-Ressourcen
Weitere Informationen zu diesen Sicherheitsmodellen finden Sie am Ende dieses Moduls, kurz:
- Ein Dienstprinzipal ist eine Identität mit einer eingeschränkten Rolle, die auf Azure-Ressourcen zugreifen kann. Stellen Sie sich einen Dienstprinzipal als ein Dienstkonto vor, das automatisierte Tasks in Ihrem Namen ausführen kann.
- Verwaltete Identitäten für Azure-Ressourcen sind ein Feature der Microsoft Entra-ID, das das Arbeiten mit Dienstprinzipalen vereinfacht. Da verwaltete Identitäten im Microsoft Entra-Mandanten vorhanden sind, kann die Azure-Infrastruktur den Dienst automatisch authentifizieren und das Konto für Sie verwalten.
Verwaltete Identitäten vereinfachen das Arbeiten mit Dienstprinzipalen; In diesem Modul verwenden wir jedoch die Dienstprinzipalauthentifizierung, da eine Dienstverbindung Ihre Azure-Ressourcen automatisch ermitteln und ihnen die entsprechenden Dienstprinzipalrollen zuweisen kann.
Der Plan
Andy und Mara sind bereit zu beginnen. Sie gehen wie folgt vor:
- Aufbauen auf der bestehenden Azure Pipelines-Buildkonfiguration.
- Definieren Sie eine Buildstufe, die das Artefakt erstellt.
- Definieren Sie eine Bereitstellungsphase, die das Artefakt für App Service bereitstellt.
Andy: Ist diese Zeichnung richtig? Wir verwenden Azure-Pipelines , um sie für Azure App Service
bereitzustellen. Dazu nehmen wir das Buildartefakt
als Eingabe für die Bereitstellungsphase (
). Die Aufgaben in der Bereitstellungsphase laden das Artefakt herunter und verwenden eine Dienstverbindung, um das Artefakt
für App Service
bereitzustellen.
Mara: Das summiert es. Fangen wir an.