In dieser Anleitung erfahren Sie, wie Sie Azure Pipelines, Cloud Run und Container Registryverwenden, um eine CI/CD-Pipeline (Continuous Integration/Continuous Deployment) für eine Webanwendung von ASP.NET MVC Core zu erstellen.
Die CI/CD-Pipeline verwendet zwei Google Cloud-Projekte, eines für die Entwicklung und eines für die Produktion, wie das folgende Diagramm zeigt.
Am Anfang der Pipeline nehmen Entwickler Änderungen an der Beispielcodebasis vor. Diese Aktion veranlasst die Pipeline dazu, einen Release zu erstellen und im Entwicklungscluster in Cloud Run bereitzustellen. Ein Releasemanager stellt dann den Release hoch, sodass er im Produktionsprojekt bereitgestellt wird.
Diese Anleitung richtet sich an Entwickler und DevOps-Entwickler. Dabei werden Grundkenntnisse in .NET Core, Azure Pipelines, Cloud Run und git
vorausgesetzt. Für diese Anleitung benötigen Sie Administratorzugriff auf ein Azure DevOps-Konto.
Lernziele
- Verbindung von Container Registry zu Azure Pipelines für die Veröffentlichung von Docker-Images herstellen
- .NET Core-Beispielanwendung für das Deployment in Cloud Run vorbereiten
- Authentifizierung zwischen Azure Pipelines und Google Cloud einrichten
- Releaseverwaltung von Azure Pipelines zur Orchestrierung von Cloud Run-Deployments verwenden
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Auf der Azure DevOps-Preisseite finden Sie alle Gebühren, die bei der Verwendung von Azure DevOps anfallen können.
Hinweis
In dieser Anleitung verwenden Sie zwei separate Projekte, eines für die Entwicklung und eines für die Produktion. Wenn Sie separate Projekte verwenden, können Sie Releases testen, bevor Sie sie in der Produktion bereitstellen. Außerdem können Sie IAM-Rollen (Identity and Access Management) und -Berechtigungen einzeln verwalten.
- Erstellen Sie ein Google Cloud-Projekt für die Entwicklung. In der Anleitung wird dieses Projekt als Entwicklungsprojekt bezeichnet.
- Erstellen Sie ein Google Cloud-Projekt für die Produktion. In der Anleitung wird dieses Projekt als Produktionsprojekt bezeichnet.
-
Make sure that billing is enabled for your Google Cloud project.
- Sie brauchen ein Azure DevOps-Konto mit Administratorzugriff. Wenn Sie noch kein Azure DevOps-Konto haben, können Sie sich auf der Azure DevOps-Startseite registrieren.
Azure DevOps-Projekt erstellen
Sie verwenden Azure DevOps, um den Quellcode zu verwalten, Builds und Tests auszuführen und die Bereitstellung in Cloud Run zu orchestrieren. Erstellen Sie zuerst in Ihrem Azure DevOps-Konto ein Projekt.
- Rufen Sie die Azure DevOps-Startseite (https://dev.azure.com/YOUR_AZURE_DEVOPS_ACCOUNT_NAME) auf.
- Klicken Sie auf Neues Projekt.
- Geben Sie einen Projektnamen ein, z. B.
CloudDemo
. - Legen Sie Visibility (Sichtbarkeit) auf Private (Privat) fest und klicken Sie dann auf Create project (Projekt erstellen).
- Nachdem Sie das Projekt erstellt haben, klicken Sie im Menü links auf Repositories.
- Klicken Sie auf Importieren, um einen Fork des Repositorys
dotnet-docs-samples
aus GitHub zu erstellen, und legen Sie dann die folgenden Werte fest:- Repository-Typ:
Git
- Klon-URL:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
- Repository-Typ:
Klicken Sie auf Importieren.
Wenn der Importvorgang abgeschlossen ist, wird der Quellcode des Repositorys
dotnet-docs-samples
angezeigt.
Azure Pipelines mit Container Registry verbinden
Bevor Sie die kontinuierliche Integration für die Anwendung CloudDemo
einrichten können, müssen Sie Azure Pipelines mit Container Registry verbinden. Über diese Verbindung kann Azure Pipelines Container-Images in Container Registry veröffentlichen.
Dienstkonto für die Veröffentlichung von Images einrichten
Erstellen Sie ein Google Cloud-Dienstkonto in Ihrem Produktionsprojekt:
- Wechseln Sie in der Google Cloud Console zum Produktionsprojekt.
-
In the Google Cloud console, activate Cloud Shell.
Initialisieren Sie die folgenden Umgebungsvariablen:
DEV_PROJECT_ID=DEV_PROJECT_ID PROD_PROJECT_ID=PROD_PROJECT_ID
Dabei gilt:
DEV_PROJECT_ID
: Die Projekt-ID Ihres EntwicklungsprojektsPROD_PROJECT_ID
: Die Projekt-ID Ihres Produktionsprojekts
Aktivieren Sie im Produktionsprojekt die Container Registry API:
gcloud services enable containerregistry.googleapis.com \ --project=$PROD_PROJECT_ID
Erstellen Sie ein Dienstkonto, das von Azure Pipelines zum Veröffentlichen von Docker-Images verwendet wird:
gcloud iam service-accounts create azure-pipelines-publisher \ --display-name="Azure Pipelines Publisher" \ --project=$PROD_PROJECT_ID
Weisen Sie dem Dienstkonto die IAM-Rolle "Storage Administrator" (
roles/storage.admin
) zu, damit Azure Pipelines per Push in Container Registry übertragen kann:AZURE_PIPELINES_PUBLISHER=azure-pipelines-publisher@$PROD_PROJECT_ID.iam.gserviceaccount.com gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \ --member serviceAccount:$AZURE_PIPELINES_PUBLISHER \ --role roles/storage.admin \ --project=$PROD_PROJECT_ID
Generieren Sie einen Dienstkontoschlüssel:
gcloud iam service-accounts keys create azure-pipelines-publisher.json \ --iam-account $AZURE_PIPELINES_PUBLISHER \ --project=$PROD_PROJECT_ID tr -d '\n' < azure-pipelines-publisher.json > azure-pipelines-publisher-oneline.json
Rufen Sie den Inhalt der Dienstkonto-Schlüsseldatei auf:
echo $(<azure-pipelines-publisher-oneline.json)
Sie benötigen den Dienstkontoschlüssel in einem der folgenden Schritte.
Dienstverbindung für Container Registry erstellen
Erstellen Sie in Azure Pipelines eine neue Dienstverbindung für Container Registry:
- Wählen Sie im Azure DevOps-Menü die Option Project settings und dann Pipelines > Agent pools aus.
- Klicken Sie auf Dienstverbindung erstellen.
- Wählen Sie in der Liste Docker Registry aus und klicken Sie dann auf Next.
- Geben Sie im Dialogfeld Werte für die folgenden Felder ein:
- Registry type: Others.
- Docker Registry:
https://gcr.io/PROD_PROJECT_ID
. Ersetzen SiePROD_PROJECT_ID
durch den Namen Ihres Produktionsprojekts (z. B.https://gcr.io/azure-pipelines-test-project-12345
). - Docker ID:
_json_key
. - Password: Fügen Sie den Inhalt von
azure-pipelines-publisher-oneline.json
ein. - Service connection name:
gcr-tutorial
.
- Klicken Sie auf Save, um die Verbindung herzustellen.
Kontinuierlich erstellen
Sie können jetzt mit Azure Pipelines die kontinuierliche Integration einrichten. Für jeden Commit, der an das Git-Repository gesendet wird, erstellt Azure Pipelines den Code und verpackt die Build-Artefakte in einen Docker-Container. Der Container wird dann in Container Registry veröffentlicht.
Das Repository enthält bereits das folgende Dockerfile:
Jetzt erstellen Sie eine neue Pipeline, die die YAML-Syntax verwendet:
- Klonen Sie Ihr neues Git-Repository mit Visual Studio oder einem
git
-Befehlszeilenclient. - Erstellen Sie im Stammverzeichnis des Repositorys eine Datei mit dem Namen
azure-pipelines.yml
. Kopieren Sie den folgenden Code in die Datei:
resources: - repo: self fetchDepth: 1 queue: name: Hosted Ubuntu 1604 trigger: - master variables: TargetFramework: 'net6.0' BuildConfiguration: 'Release' DockerImageName: 'PROD_PROJECT_ID/CloudDemo' steps: - task: DotNetCoreCLI@2 displayName: Publish inputs: projects: 'applications/clouddemo/netcore/CloudDemo.MvcCore.sln' publishWebProjects: false command: publish arguments: '--configuration $(BuildConfiguration) --framework=$(TargetFramework)' zipAfterPublish: false modifyOutputPath: false - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: '$(build.artifactstagingdirectory)' - task: Docker@2 displayName: 'Login to Container Registry' inputs: command: login containerRegistry: 'gcr-tutorial' - task: Docker@2 displayName: 'Build and push image' inputs: Dockerfile: 'applications/clouddemo/netcore/Dockerfile' command: buildAndPush repository: '$(DockerImageName)'
Ersetzen Sie
PROJECT_ID
durch den Namen Ihres Produktionsprojekts und speichern Sie die Datei.Da es sich bei Cloud Run um eine Linux-basierte Umgebung handelt, verwendet die Pipeline Linux-basierte Build-Agents.
Übernehmen Sie die Änderungen und übertragen Sie sie per Push an Azure Pipelines.
Visual Studio
- Öffnen Sie den Team Explorer und klicken Sie auf das Symbol Startseite.
- Klicken Sie auf Änderungen.
- Geben Sie eine Commit-Nachricht wie
Add pipeline definition
ein. - Klicken Sie auf Commit für alle und Push.
Befehlszeile
Alle geänderten Dateien bereitstellen:
git add -A
Übernehmen Sie die Änderungen für das lokale Repository:
git commit -m "Add pipeline definition"
Übertragen Sie die Änderungen per Push an Azure DevOps:
git push
Wählen Sie im Azure DevOps-Menü Pipelines aus und klicken Sie dann auf Pipeline erstellen.
Wählen Sie Azure Repos Git aus.
Wählen Sie Ihr Repository aus.
Klicken Sie auf der Seite YAML-Pipeline prüfen auf Ausführen.
Ein neuer Build wird ausgelöst. Der Build kann etwa zwei Minuten dauern.
Wechseln Sie zur Überprüfung, ob das Image in Container Registry veröffentlicht wurde, zu Ihrem Produktionsprojekt in der Google Cloud Console. Wählen Sie dort Container Registry > Images aus und klicken Sie dann auf CloudDemo.
Ein einzelnes Image und dessen Tag werden angezeigt. Das Tag entspricht der numerischen ID des Builds, der in Azure Pipelines ausgeführt wurde.
Kontinuierliches Deployment
Da Azure Pipelines den Code automatisch erstellt und für jedes Commit Docker-Images veröffentlicht werden, können Sie sich nun dem Deployment widmen.
Im Gegensatz zu anderen Systemen für Continuous Integration unterscheidet Azure Pipelines zwischen Builds und Deployments. Daher steht in Azure Pipelines eine Reihe von speziellen Tools unter dem Namen "Releaseverwaltung" zur Verfügung, die für alle Aufgaben in Zusammenhang mit dem Deployment zum Einsatz kommen.
Die Azure Pipelines-Releaseverwaltung basiert auf folgenden Konzepten:
- Ein Release bezieht sich auf eine Reihe von Artefakten, die eine bestimmte Version Ihrer Anwendung ausmachen und normalerweise das Ergebnis eines Build-Prozesses sind.
- Deployment bezieht sich auf das Erstellen eines Releases in einer bestimmten Umgebung.
- Bei einem Deployment werden mehrere Aufgaben ausgeführt, die in Jobs zusammengefasst sein können.
- Mit Phasen können Sie Ihre Pipeline segmentieren und Bereitstellungen in mehreren Umgebungen (z. B. Entwicklungs- und Testumgebungen) orchestrieren.
Sie richten Ihre Releasepipeline so ein, dass sie bei Abschluss eines neuen Builds ausgelöst wird. Die Pipeline besteht aus zwei Phasen: Entwicklung und Produktion. In jeder Phase verwendet die Releasepipeline das von der Build-Pipeline erstellte Docker-Image und stellt es dann in Cloud Run bereit.
Vor der Veröffentlichung in Container Registry kennzeichnet die von Ihnen konfigurierte Build-Pipeline jedes Docker-Image mit der Build-ID. Daher ermitteln Sie das richtige Docker-Image für die Bereitstellung in der Releasepipeline mithilfe der Variablen $BUILD_BUILDID
.
Cloud Run konfigurieren
Cloud Run ist eine vollständig verwaltete, serverlose Umgebung. Daher brauchen Sie keine Infrastruktur bereitzustellen. Damit die Sicherheit Ihrer Cloud Run-Bereitstellungen gewährleistet ist, müssen Sie IAM einrichten.
Wie das folgende Diagramm zeigt, sind beim Bereitstellen und Ausführen eines Cloud Run-Dienstes mehrere Identitäten involviert.
Jede dieser Identitäten wird als Dienstkonto implementiert und, wie in der folgenden Tabelle beschrieben, für einen bestimmten Zweck verwendet.
Dienstkonto | Verwendet von | Zweck | Erforderliche Rollen |
---|---|---|---|
Azure Pipelines Publisher | Build-Pipeline | Docker-Images in Container Registry veröffentlichen | roles/storage.admin (nur Produktionsprojekt) |
Azure Pipelines Deployer | Releasepipeline | Cloud Run-Bereitstellungen auslösen | roles/run.admin |
CloudDemo-Dienst starten | roles/iam.serviceAccountUser |
||
Cloud Run-Dienst-Agent | Cloud Run | Docker-Images aus Container Registry abrufen | roles/storage.objectViewer (nur Produktionsprojekt) |
CloudDemo-Runner (Laufzeitdienstkonto) | CloudDemo-Dienst | Auf Ressourcen in Google Cloud zugreifen | – |
Sie haben das Dienstkonto Azure Pipelines Publisher erstellt und konfiguriert. In den folgenden Abschnitten erstellen und konfigurieren Sie die verbleibenden Dienstkonten.
Cloud Run-Dienstkonto konfigurieren
Cloud Shell öffnen
Initialisieren Sie die folgenden Umgebungsvariablen:
DEV_PROJECT_ID=DEV_PROJECT_ID PROD_PROJECT_ID=PROD_PROJECT_ID
Dabei gilt:
DEV_PROJECT_ID
: Die Projekt-ID Ihres EntwicklungsprojektsPROD_PROJECT_ID
: Die Projekt-ID Ihres Produktionsprojekts
Aktivieren Sie sowohl im Entwicklungs- als auch im Produktionsprojekt die Cloud Run API und die Compute Engine API:
gcloud services enable run.googleapis.com --project=$DEV_PROJECT_ID gcloud services enable run.googleapis.com --project=$PROD_PROJECT_ID
Wenn Sie diese APIs aktivieren, werden die Cloud Run-Dienst-Agent-Konten in Ihren Projekten erstellt.
Gewähren Sie den beiden Cloud Run-Dienst-Agent-Konten in dem Produktionsprojekt, in dem Ihre Docker-Images gespeichert sind, Zugriff auf Container Registry:
DEV_PROJECT_NUMBER=$(gcloud projects describe $DEV_PROJECT_ID \ --format='value(projectNumber)') PROD_PROJECT_NUMBER=$(gcloud projects describe $PROD_PROJECT_ID \ --format='value(projectNumber)') gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \ --member=serviceAccount:service-$DEV_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role roles/storage.objectViewer gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \ --member=serviceAccount:service-$PROD_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role roles/storage.objectViewer
CloudDemo-Runner-Konto konfigurieren
Sie können jetzt das CloudDemo-Runner-Konto konfigurieren. Dabei handelt es sich um ein benutzerdefiniertes Laufzeitdienstkonto für den CloudDemo-Dienst:
Erstellen Sie ein Dienstkonto mit dem Namen
CloudDemo-runner
:gcloud iam service-accounts create clouddemo-runner \ --display-name="CloudDemo Runner" \ --project=$DEV_PROJECT_ID gcloud iam service-accounts create clouddemo-runner \ --display-name="CloudDemo Runner" \ --project=$PROD_PROJECT_ID DEV_CLOUDDEMO_RUNNER=clouddemo-runner@$DEV_PROJECT_ID.iam.gserviceaccount.com PROD_CLOUDDEMO_RUNNER=clouddemo-runner@$PROD_PROJECT_ID.iam.gserviceaccount.com
Azure Pipelines Deployer-Konto konfigurieren
Erstellen und konfigurieren Sie schließlich das Azure Pipelines Deployer-Konto, das die Azure-Releasepipeline für die Bereitstellung in Cloud Run verwendet.
Erstellen Sie ein Dienstkonto mit dem Namen
azure-pipelines-deployer
:gcloud iam service-accounts create azure-pipelines-deployer \ --display-name="Azure Pipelines Deployer" \ --project=$PROD_PROJECT_ID AZURE_PIPELINES_DEPLOYER=azure-pipelines-deployer@$PROD_PROJECT_ID.iam.gserviceaccount.com
Weisen Sie die erforderlichen IAM-Rollen zu, um neue Cloud Run-Dienste oder -Überarbeitungen im Entwicklungsprojekt bereitzustellen:
gcloud projects add-iam-policy-binding $DEV_PROJECT_ID \ --member serviceAccount:$AZURE_PIPELINES_DEPLOYER \ --role roles/run.admin gcloud iam service-accounts add-iam-policy-binding \ $DEV_CLOUDDEMO_RUNNER \ --member=serviceAccount:$AZURE_PIPELINES_DEPLOYER \ --role="roles/iam.serviceAccountUser" \ --project=$DEV_PROJECT_ID
Weisen Sie dem Produktionsprojekt dieselben Rollen zu:
gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \ --member serviceAccount:$AZURE_PIPELINES_DEPLOYER \ --role roles/run.admin gcloud iam service-accounts add-iam-policy-binding \ $PROD_CLOUDDEMO_RUNNER \ --member=serviceAccount:$AZURE_PIPELINES_DEPLOYER \ --role="roles/iam.serviceAccountUser" \ --project=$PROD_PROJECT_ID
Generieren Sie einen Dienstkontoschlüssel:
gcloud iam service-accounts keys create azure-pipelines-deployer.json \ --iam-account=$AZURE_PIPELINES_DEPLOYER \ --project=$PROD_PROJECT_ID cat azure-pipelines-deployer.json | base64 -w 0
Sie verwenden die Ausgabe dieses Befehls, wenn Sie die Releasepipeline konfigurieren.
Releasepipeline konfigurieren
Sie können jetzt zu Azure Pipelines zurückkehren, um die Bereitstellung zu automatisieren. Die folgenden Schritte sind dafür nötig:
- In der Entwicklungsumgebung bereitstellen
- Anfordern der manuellen Genehmigung, bevor das Deployment in der Produktionsumgebung eingeleitet wird
- In der Produktionsumgebung bereitstellen
Release-Definition erstellen
Erstellen Sie zuerst eine Release-Definition:
- Wählen Sie im Azure DevOps-Menü Pipelines > Releases aus.
- Klicken Sie auf New pipeline.
- Wählen Sie in der Vorlagenliste den Eintrag Empty job aus.
- Wenn Sie einen Namen für die Phase angeben sollen, geben Sie
Development
ein. - Geben Sie der Pipeline oben auf dem Bildschirm den Namen
CloudDemo
. - Klicken Sie im Pipelinediagramm neben Artifacts auf Add.
- Wählen Sie Build aus und legen Sie folgende Einstellungen fest:
- Source type: Build.
- Source (build pipeline): Wählen Sie die Build-Definition aus (es sollte nur eine Option vorhanden sein).
- Standardversion: Latest
- Source Alias:
build
.
- Klicken Sie auf Add (Hinzufügen).
- Klicken Sie im Feld Artifact (Artefakt) auf Continuous deployment trigger (Trigger für kontinuierliches Deployment) (das Blitzsymbol), um einen Deployment-Trigger hinzuzufügen.
- Stellen Sie unter Continuous Deployment Trigger den Schieberegler auf Aktiviert ein.
- Klicken Sie auf Speichern.
Geben Sie bei Bedarf einen Kommentar ein und bestätigen Sie mit OK.
Die Pipeline wird in etwa so dargestellt:
Im Entwicklungsprojekt bereitstellen
Mit der erstellten Release-Definition können Sie nun die Cloud Run-Bereitstellung für das Entwicklungsprojekt konfigurieren.
- Wechseln Sie im Menü zum Tab Tasks.
- Klicken Sie auf Agent Job.
- Setzen Sie die Agent specification auf ubuntu-18.04.
- Klicken Sie neben Agent job auf Add a task to agent job , um der Phase einen Schritt hinzuzufügen.
- Wählen Sie die Aufgabe Command Line aus und klicken Sie auf Add:
Klicken Sie auf die neu hinzugefügte Aufgabe und legen Sie die folgenden Einstellungen fest:
- Display name:
Deploy image to development project
. Script:
gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) && \ gcloud run deploy clouddemo \ --quiet \ --service-account=clouddemo-runner@$(CloudRun.ProjectId.Development).iam.gserviceaccount.com \ --allow-unauthenticated \ --image=gcr.io/$(ContainerRegistry.ProjectId)/clouddemo:$BUILD_BUILDID \ --platform=managed \ --region=$(CloudRun.Region) \ --project=$(CloudRun.ProjectId.Development)
Mit diesem Befehl wird ein Dienstkontoschlüssel aus einer Umgebungsvariable abgerufen. Anschließend wird die Anwendung mit der gcloud CLI in Cloud Run bereitgestellt. Die gcloud CLI ist standardmäßig in Azure Pipelines-Agents verfügbar.
- Display name:
Wechseln Sie zum Tab Variables und fügen Sie folgende Variablen hinzu.
Name Value Secret ServiceAccountKey
Dienstkontoschlüssel, der zuvor für azure-pipelines-deployer
erstellt wurde.Ja ContainerRegistry.ProjectId
Projekt-ID Ihres Produktionsprojekts. CloudRun.Region
Region, die Sie zuvor ausgewählt haben, um Cloud Run-Ressourcen bereitzustellen. CloudRun.ProjectId.Development
Projekt-ID Ihres Entwicklungsprojekts. CloudRun.ProjectId.Production
Projekt-ID Ihres Produktionsprojekts. Klicken Sie auf Save.
Geben Sie bei Bedarf einen Kommentar ein und bestätigen Sie mit OK.
Auf dem Produktionscluster bereitstellen
Abschließend konfigurieren Sie die Bereitstellung für das Produktionsprojekt:
- Wechseln Sie im Menü zum Tab Pipeline.
- Wählen Sie im Feld "Stages" die Option Add > New stage aus.
- Wählen Sie in der Vorlagenliste den Eintrag Empty job aus.
- Wenn Sie einen Namen für die Phase angeben sollen, geben Sie
Production
ein. - Klicken Sie auf das Blitzsymbol der neu erstellten Phase.
Legen Sie folgende Einstellungen fest:
- Select trigger: After stage
- Stages: Development
- Pre-deployment approvals: (aktiviert)
- Approvers: Wählen Sie Ihren Nutzernamen aus.
Die Pipeline zeigt eine Ansicht ähnlich der folgenden an.
Wechseln Sie zum Tab Tasks.
Bewegen Sie den Mauszeiger auf den Tab Tasks und wählen Sie Tasks > Production aus.
Klicken Sie auf Agent Job.
Setzen Sie die Agent specification auf ubuntu-18.04.
Klicken Sie auf Add a task to agent job
, um der Phase einen Schritt hinzuzufügen.Wählen Sie die Aufgabe Command Line aus und klicken Sie auf Add:
Klicken Sie auf die neu hinzugefügte Aufgabe und legen Sie die folgenden Einstellungen fest:
- Display name:
Deploy image to production project
. Script:
gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) && \ gcloud run deploy clouddemo \ --quiet \ --service-account=clouddemo-runner@$(CloudRun.ProjectId.Production).iam.gserviceaccount.com \ --allow-unauthenticated \ --image=gcr.io/$(ContainerRegistry.ProjectId)/clouddemo:$BUILD_BUILDID \ --platform=managed \ --region=$(CloudRun.Region) \ --project=$(CloudRun.ProjectId.Production)
- Display name:
Klicken Sie auf Speichern.
Geben Sie bei Bedarf einen Kommentar ein und bestätigen Sie mit OK.
Pipeline ausführen
Nachdem Sie nun die gesamte Pipeline konfiguriert haben, können Sie sie testen, indem Sie eine Änderung am Quellcode vornehmen:
- Öffnen Sie auf Ihrem lokalen Computer die Datei
applications\clouddemo\netcore\CloudDemo.MvcCore\Views\Home\Index.cshtml
aus dem Git-Repository, das Sie zuvor geklont haben. - Ändern Sie in Zeile 26 den Wert von
ViewBag.Title
vonHome Page
inHome Page Cloud Run
. Übernehmen Sie die Änderungen und übertragen Sie sie per Push an Azure Pipelines.
Visual Studio
- Öffnen Sie den Team Explorer und klicken Sie auf das Symbol Startseite.
- Klicken Sie auf Änderungen.
- Geben Sie eine Commit-Nachricht wie
Change site title
ein. - Klicken Sie auf Commit für alle und Push.
Befehlszeile
Alle geänderten Dateien bereitstellen:
git add -A
Übernehmen Sie die Änderungen für das lokale Repository:
git commit -m "Change site title"
Übertragen Sie die Änderungen per Push an Azure Pipelines:
git push
Wählen Sie im Azure DevOps-Menü Pipelines aus. Ein Build wird ausgelöst.
Wählen Sie nach Abschluss des Builds Pipelines > Releases aus. Ein Freigabeprozess wird gestartet.
Klicken Sie auf Release-1, um die Detailseite zu öffnen, und warten Sie, bis der Status der Phase Development zu Succeeded wechselt.
Wechseln Sie in der Google Cloud Console zum Entwicklungsprojekt.
Wählen Sie im Menü Compute > Cloud Run aus.
Der Dienst clouddemo wurde bereitgestellt.
Klicken Sie auf clouddemo, um weitere Details aufzurufen.
Eine URL, aus der hervorgeht, dass Cloud Run den Dienst bereitgestellt hat, wird angezeigt.
Öffnen Sie die URL in einem neuen Browsertab, um zu prüfen, ob die CloudDemo-Anwendung bereitgestellt wurde und den benutzerdefinierten Titel verwendet.
Klicken Sie in Azure Pipelines neben der Phase Production auf Approve, um die Bereitstellung für die Produktionsumgebung auszulösen.
Optional: Geben Sie einen Kommentar ein.
Klicken Sie zur Bestätigung auf Approve und warten Sie, bis der Status der Umgebung Production zu Succeeded wechselt.
Wechseln Sie in der Google Cloud Console zum Produktionsprojekt.
Wählen Sie im Menü Compute > Cloud Run aus.
Der Dienst clouddemo wird im Produktionsprojekt bereitgestellt.
Klicken Sie auf clouddemo, um weitere Details aufzurufen.
Eine URL, aus der hervorgeht, dass Cloud Run den Dienst bereitgestellt hat, wird angezeigt.
Öffnen Sie die URL in einem neuen Browsertab, um zu prüfen, ob die CloudDemo-Anwendung für die Produktion bereitgestellt wurde und den benutzerdefinierten Titel verwendet.
Bereinigen
Löschen Sie die von Ihnen erstellten Entitäten, um nach Abschluss dieser Anleitung keine weiteren Kosten zu verursachen.
Azure Pipelines-Projekt löschen
Informationen zum Löschen des Azure Pipelines-Projekts finden Sie in der Dokumentation zu Azure DevOps Services. Wenn Sie das Azure Pipelines-Projekt löschen, gehen alle Änderungen am Quellcode verloren.
Google Cloud-Entwicklungs- und Produktionsprojekte löschen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Nächste Schritte
- Konfigurieren Sie eine benutzerdefinierte Domain für Ihren Cloud Run-Dienst.
- Erfahren Sie, wie Sie mit Azure Pipelines stattdessen dieselbe Anwendung in Google Kubernetes Engine bereitstellen.
- Weitere Informationen finden Sie unter .NET-Anwendungen in Google Cloud bereitstellen.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center