Konfigurieren einer Pipeline und Pushupdates
In diesem Artikel erfahren Sie, wie Sie die Azure Developer CLI (azd
) verwenden, um Vorlagenänderungen über eine CI/CD-Pipeline wie GitHub-Aktionen oder Azure DevOps zu übertragen. In diesem Beispiel verwenden Sie die React Web App mit Node.js API und MongoDB auf Azure-Vorlage , aber Sie können die in diesem Artikel beschriebenen Prinzipien auf eine der Azure Developer CLI-Vorlagen anwenden.
Hinweis
Der azd pipeline config
Befehl befindet sich noch in der Betaversion. Weitere Informationen zur Unterstützung von Alpha- und Betafeatures finden Sie auf der Seite "Featureversionsverwaltung" und "Releasestrategie ".
Voraussetzungen
- Installieren Sie die Azure Developer CLI.
- Stellen Sie die vorlage Node.js bereit.
- Installation von Visual Studio Code.
azd
Vorlagen können eine standardmäßige GitHub-Aktionen- und/oder Azure DevOps-Pipelinekonfigurationsdatei enthalten, die zum azure-dev.yml
Einrichten von CI/CD erforderlich ist. Diese Konfigurationsdatei stellt Ihre Azure-Ressourcen bereit und stellt Ihren Code im Standard Branch bereit. Sie finden azure-dev.yml
:
- Für GitHub-Aktionen: im
.github/workflow
Verzeichnis. - Für Azure DevOps: im
.azdo/pipelines
Verzeichnis.
Sie können die Konfigurationsdatei entsprechend Ihren Anforderungen verwenden oder ändern.
Hinweis
Stellen Sie sicher, dass Ihre Vorlage vor dem Aufrufen azd pipeline config
über eine Pipelinedefinition (azure-dev.yaml) verfügt. azd
diese Datei wird nicht automatisch erstellt.
Siehe "Erstellen einer Pipelinedefinition für azd " weiter unten.
Um eine CI/CD-Pipeline zu konfigurieren, verwenden Sie den azd pipeline config
Befehl, der die folgenden Aufgaben behandelt:
- Erstellen und Konfigurieren eines Dienstprinzipals für die App im Azure-Abonnement. Ihr Benutzer muss entweder
Owner
über Rollen oderContributor + User Access Administrator
Rollen innerhalb des Azure-Abonnements verfügen, da azd das Erstellen und Zuweisen von Rollen zum Dienstprinzipal zulassen kann. - Führt Sie durch einen Workflow, um ein GitHub- oder Azure DevOps-Repository zu erstellen und zu konfigurieren und ihren Projektcode darauf zu übernehmen. Sie können auch ein vorhandenes Repository verwenden.
- Erstellt eine sichere Verbindung zwischen Azure und Ihrem Repository.
- Führt die GitHub-Aktion aus, wenn Sie die Workflowdatei einchecken.
Für eine genauere Kontrolle über diesen Prozess oder wenn Der Benutzer nicht über die erforderlichen Rollen verfügt, können Sie eine Pipeline manuell konfigurieren.
Wählen Sie Ihren bevorzugten Pipelineanbieter aus, um den Vorgang fortzusetzen:
Autorisieren von GitHub für die Bereitstellung in Azure
Um den Workflow zu konfigurieren, müssen Sie einen Dienstprinzipal für die Bereitstellung in Azure in Ihrem Auftrag aus einer GitHub-Aktion autorisieren. azd
erstellt den Dienstprinzipal und eine Verbundanmeldeinformationen dafür.
Führen Sie den folgenden Befehl aus, um den Azure-Dienstprinzipal zu erstellen und die Pipeline zu konfigurieren:
azd pipeline config
Mit diesem Befehl wird optional ein GitHub-Repository erstellt und Code an das neue Repository übertragen.
Hinweis
Verwendet standardmäßig
azd pipeline config
OpenID-Verbinden (OIDC), die als Verbundanmeldeinformationen bezeichnet werden. Wenn Sie OIDC nicht verwenden möchten, führen Sieazd pipeline config --auth-type client-credentials
aus.OIDC/Verbundanmeldeinformationen werden für Terraform nicht unterstützt.
Geben Sie die angeforderten GitHub-Informationen an.
Geben Sie an
y
, wenn Sie aufgefordert werden, die lokalen Änderungen zu übernehmen und zu pushen, um eine neue Ausführung von GitHub-Aktionen zu starten.Zeigen Sie im Terminalfenster die Ergebnisse des
azd pipeline config
Befehls an. Derazd pipeline config
Befehl gibt den GitHub-Repositorynamen für Ihr Projekt aus.Öffnen Sie mit Ihrem Browser das GitHub-Repository für Ihr Projekt.
Wählen Sie "Aktionen" aus, um den ausgeführten Workflow anzuzeigen.
Vornehmen und Pushen einer Codeänderung
Öffnen
header.tsx
Sie im Verzeichnis des/src/web/src/layout
Projekts .Suchen Sie die Zeile
<Text variant="xLarge">ToDo</Text>
.Ändern Sie das Literal
ToDo
inmyTodo
.Speichern Sie die Datei .
Committen Sie die Änderung. Beim Commit der Änderung wird die GitHub Action-Pipeline gestartet, um das Update bereitzustellen.
Öffnen Sie mit Ihrem Browser das GitHub-Repository Ihres Projekts, um beides anzuzeigen:
- Ihr Commit
- Der Commit von GitHub-Aktionen, die eingerichtet werden.
Wählen Sie "Aktionen" aus, um die im Workflow wiedergegebene Testaktualisierung anzuzeigen.
Besuchen Sie die Web-Frontend-URL, um das Update zu prüfen.
azd
als GitHub-Aktion
Als GitHub-Aktion hinzufügenazd
. Diese Aktion wird installiert azd
. Um sie zu verwenden, können Sie Folgendes hinzufügen:.github\workflows\azure-dev.yml
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
Bereinigen von Ressourcen
Wenn Sie die in diesem Artikel erstellten Azure-Ressourcen nicht mehr benötigen, führen Sie den folgenden Befehl aus:
azd down
Erweiterte Features
Sie können den azd pipeline config
Befehl für bestimmte Vorlagenszenarien oder Anforderungen erweitern, wie in den folgenden Abschnitten beschrieben.
Weitere geheime Schlüssel oder Variablen
Legt standardmäßig azd
Variablen und geheime Schlüssel für die Pipeline fest. Beispielsweise erstellt der azd pipeline config
Befehl die subscription id
Und environment name
die region
als Pipelinevariablen, wenn sie ausgeführt wird. Die Pipelinedefinition verweist dann auf diese Variablen:
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
Wenn die Pipeline ausgeführt wird, azd
werden die Werte aus der Umgebung abgerufen, die den Variablen und geheimen Schlüsseln zugeordnet sind. Je nach Vorlage gibt es möglicherweise Einstellungen, die Sie mithilfe von Umgebungsvariablen steuern können. Beispielsweise könnte eine Umgebungsvariable namens KEY_VAULT_NAME
festgelegt werden, um den Namen einer Key Vault-Ressource innerhalb der Vorlageninfrastruktur zu definieren. In solchen Fällen kann die Liste der Variablen und geheimen Schlüssel mithilfe der azure.yaml
Vorlage definiert werden. Betrachten Sie beispielsweise die folgende azure.yaml
Konfiguration:
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
Bei dieser Konfiguration wird überprüft, azd
ob eine der Variablen oder geheimen Schlüssel einen nicht leeren Wert in der Umgebung aufweist. azd
anschließend wird entweder eine Variable oder ein geheimer Schlüssel für die Pipeline erstellt, wobei der Name des Schlüssels in der Konfiguration als Name der Variablen oder des geheimen Schlüssels und der Wert, der nicht aus der Umgebung für den Wert stammt, verwendet wird.
Die azure-dev.yaml
Pipelinedefinition kann dann auf die Variablen oder geheimen Schlüssel verweisen:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
STORAGE_NAME: ${{ variables.STORAGE_NAME }}
CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}
Hinweis
Sie müssen nach dem Aktualisieren der Liste der geheimen Schlüssel oder Variablen azure.yaml
ausgeführt werdenazd pipeline config
, damit azd die Pipelinewerte zurücksetzen kann.
Infrastrukturparameter
Betrachten Sie das folgende Bicep-Beispiel:
@secure()
param BlobStorageConnection string
Der Parameter BlobStorageConnection
hat keinen Standardwert festgelegt, daher azd
wird der Benutzer aufgefordert, einen Wert einzugeben. Während CI/CD gibt es jedoch keine interaktive Eingabeaufforderung. azd
muss den Wert für den Parameter anfordern, wenn Sie ausgeführt azd pipeline config
werden, speichern Sie den Wert in der Pipeline, und rufen Sie den Wert dann erneut ab, wenn die Pipeline ausgeführt wird.
azd
verwendet einen Pipelineschlüssel, der aufgerufen wird AZD_INITIAL_ENVIRONMENT_CONFIG
, um den Wert aller erforderlichen Parameter in der Pipeline automatisch zu speichern und festzulegen. Sie müssen nur auf diesen geheimen Schlüssel in Ihrer Pipeline verweisen:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
Wenn die Pipeline ausgeführt wird, azd
werden die Werte für die Parameter aus dem geheimen Schlüssel verwendet, wodurch die Notwendigkeit einer interaktiven Eingabeaufforderung entfernt wird.
Hinweis
Sie müssen erneut ausgeführt azd pipeline config
werden, wenn Sie einen neuen Parameter hinzufügen.
Erstellen einer Pipelinedefinition
Wenn Ihre azd
Vorlage noch nicht über eine CI/CD-Pipelinedefinitionsdatei verfügt, können Sie eine datei selbst erstellen. Eine CI/CD-Pipelinedefinition weist in der Regel vier Standard Abschnitte auf:
- Trigger (trigger)
- konfigurieren
- Betriebssystem oder Pool
- Auszuführende Schritte
Die folgenden Beispiele veranschaulichen, wie Sie eine Definitionsdatei und zugehörige Konfigurationen für GitHub-Aktionen und Azure-Pipelines erstellen.
Für die Ausführung azd
in GitHub-Aktionen sind die folgenden Konfigurationen erforderlich:
- Gewähren
id-token: write
undcontents: read
Zugreifen auf Bereiche. - Installieren Sie die azd-Aktion, es sei denn, Sie verwenden ein Docker-Image, auf dem
azd
bereits installiert ist.
Sie können die folgende Vorlage als Ausgangspunkt für Ihre eigene Pipelinedefinition verwenden:
on:
workflow_dispatch:
push:
# Run when commits are pushed to mainline branch (main or master)
# Set this to the mainline branch you are using
branches:
- main
- master
# Set this permission if you are using a Federated Credential.
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
# azd build-in variables.
# This variables are always set by `azd pipeline config`
# You can set them as global env (apply to all steps) or you can add them to individual steps' environment
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
## Define the additional variables or secrets that are required globally (provision and deploy)
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
steps:
- name: Checkout
uses: actions/checkout@v4
# using the install-azd action
- name: Install azd
uses: Azure/setup-azd@v1.0.0
# # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
# # use the next one:
# - name: Install azd - daily or from PR
# # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
# run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
# shell: pwsh
# azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
- name: Log in with Azure (Federated Credentials)
if: ${{ env.AZURE_CLIENT_ID != '' }}
run: |
azd auth login `
--client-id "$Env:AZURE_CLIENT_ID" `
--federated-credential-provider "github" `
--tenant-id "$Env:AZURE_TENANT_ID"
shell: pwsh
## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
# - name: Log in with Azure (Client Credentials)
# if: ${{ env.AZURE_CREDENTIALS != '' }}
# run: |
# $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
# Write-Host "::add-mask::$($info.clientSecret)"
# azd auth login `
# --client-id "$($info.clientId)" `
# --client-secret "$($info.clientSecret)" `
# --tenant-id "$($info.tenantId)"
# shell: pwsh
# env:
# AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
# # uncomment this if you are using infrastructure parameters
# AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
## Define the additional variables or secrets that are required only for provision
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
- name: Deploy Application
run: azd deploy --no-prompt
env:
## Define the additional variables or secrets that are required only for deploy
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für