Konfigurera en pipeline och push-uppdateringar
I den här artikeln får du lära dig hur du använder Azure Developer CLI (azd
) för att skicka malländringar via en CI/CD-pipeline som GitHub Actions eller Azure DevOps. I det här exemplet använder du React-webbappen med Node.js API och MongoDB i Azure-mallen , men du kan tillämpa de principer som du lär dig i den här artikeln på någon av Azure Developer CLI-mallarna.
Kommentar
Kommandot azd pipeline config
är fortfarande i betaversion. Läs mer om stöd för alfa- och betafunktioner på sidan med funktionsversioner och lanseringsstrategi .
Förutsättningar
azd
mallar kan innehålla en standardkonfigurationsfil för GitHub Actions och/eller Azure DevOps-pipelinen med namnet azure-dev.yml
, som krävs för att konfigurera CI/CD. Den här konfigurationsfilen etablerar dina Azure-resurser och distribuerar koden till huvudgrenen. Du hittar azure-dev.yml
:
- För GitHub Actions: i
.github/workflows
katalogen. - För Azure DevOps: i
.azdo/pipelines
katalogen.
Du kan använda konfigurationsfilen som den är eller ändra den efter dina behov.
Kommentar
Kontrollera att mallen har en pipelinedefinition (azure-dev.yaml
) innan du anropar azd pipeline config
. azd
skapar inte den här filen automatiskt.
Se Skapa en pipelinedefinition för azd nedan.
azd pipeline config
Använd kommandot för att konfigurera en CI/CD-pipeline som hanterar följande uppgifter:
- Skapar och konfigurerar ett huvudnamn för tjänsten för appen i Azure-prenumerationen. Användaren måste ha antingen
Owner
roll ellerContributor + User Access Administrator
roller i Azure-prenumerationen för att azd ska kunna skapa och tilldela roller till tjänstens huvudnamn. - Steg dig genom ett arbetsflöde för att skapa och konfigurera en GitHub- eller Azure DevOps-lagringsplats och checka in projektkoden till den. Du kan också välja att använda en befintlig lagringsplats.
- Skapar en säker anslutning mellan Azure och din lagringsplats.
- Kör GitHub-åtgärden när du checkar in arbetsflödesfilen.
Om du vill ha mer detaljerad kontroll över den här processen, eller om du inte har de roller som krävs, kan du konfigurera en pipeline manuellt.
Välj önskad pipelineprovider för att fortsätta:
Auktorisera GitHub för att distribuera till Azure
För att konfigurera arbetsflödet måste du auktorisera ett huvudnamn för tjänsten för att distribuera till Azure för din räkning, från en GitHub-åtgärd. azd
skapar tjänstens huvudnamn och en federerad autentiseringsuppgift för den.
Kör följande kommando för att skapa Azure-tjänstens huvudnamn och konfigurera pipelinen:
azd pipeline config
Det här kommandot skapar eventuellt en GitHub-lagringsplats och skickar kod till den nya lagringsplatsen.
Kommentar
Som standard
azd pipeline config
använder OpenID Connect (OIDC) som kallas federerade autentiseringsuppgifter. Om du inte vill använda OIDC kör duazd pipeline config --auth-type client-credentials
.OIDC/federerade autentiseringsuppgifter stöds inte för Terraform.
Ange den begärda GitHub-informationen.
När du uppmanas att genomföra och push-överföra dina lokala ändringar för att starta en ny GitHub Actions-körning anger du
y
.I terminalfönstret visar du resultatet av
azd pipeline config
kommandot. Kommandotazd pipeline config
matar ut GitHub-lagringsplatsens namn för projektet.Öppna GitHub-lagringsplatsen för projektet med hjälp av webbläsaren.
Välj Åtgärder för att se arbetsflödet köras.
Göra och push-överföra en kodändring
Öppna i projektets
/src/web/src/layout
katalogheader.tsx
.Leta upp raden
<Text variant="xLarge">ToDo</Text>
.Ändra literalen
ToDo
tillmyTodo
.Spara filen.
Checka in ändringarna. Om du genomför ändringen startas GitHub Action-pipelinen för att distribuera uppdateringen.
Använd webbläsaren och öppna projektets GitHub-lagringsplats för att se båda:
- Din incheckning
- Incheckningen från GitHub Actions som konfigureras.
Välj Åtgärder för att se testuppdateringen som visas i arbetsflödet.
Gå till webbadressen till webbklientdelen för att inspektera uppdateringen.
azd
som en GitHub-åtgärd
Lägg till azd
som en GitHub-åtgärd. Den här åtgärden kommer att installera azd
. Om du vill använda den kan du lägga till följande i .github\workflows\azure-dev.yml
:
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
Rensa resurser
När du inte längre behöver de Azure-resurser som skapats i den här artikeln kör du följande kommando:
azd down
Avancerade funktioner
Du kan utöka azd pipeline config
kommandot för specifika mallscenarier eller krav enligt beskrivningen i följande avsnitt.
Ytterligare hemligheter eller variabler
Som standard azd
anger du variabler och hemligheter för pipelinen. Kommandot skapar till exempel azd pipeline config
variablerna subscription id
, environment name
och region
as pipeline när den körs. Pipelinedefinitionen refererar sedan till dessa variabler:
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 }}
När pipelinen körs azd
hämtar du värdena från miljön, som mappas till variablerna och hemligheterna. Beroende på mallen kan det finnas inställningar som du kan styra med hjälp av miljövariabler. En miljövariabel med namnet KEY_VAULT_NAME
kan till exempel anges för att definiera namnet på en Key Vault-resurs i mallinfrastrukturen. I sådana fall kan listan över variabler och hemligheter definieras av mallen med hjälp azure.yaml
av . Tänk till exempel på följande azure.yaml
konfiguration:
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
Med den här konfigurationen azd
kontrollerar du om någon av variablerna eller hemligheterna har ett icke-tomt värde i miljön. azd
skapar sedan antingen en variabel eller en hemlighet för pipelinen med namnet på nyckeln i konfigurationen som namnet på variabeln eller hemligheten och värdet som inte är sträng från miljön för värdet.
Pipelinedefinitionen azure-dev.yaml
kan sedan referera till variablerna eller hemligheterna:
- 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 }}
Kommentar
Du måste köra azd pipeline config
efter att du har uppdaterat listan med hemligheter eller variabler i azure.yaml
för azd för att återställa pipelinevärdena.
Infrastrukturparametrar
Tänk dig följande bicep-exempel:
@secure()
param BlobStorageConnection string
Parametern BlobStorageConnection
har ingen standardvärdeuppsättning, så azd
användaren uppmanas att ange ett värde. Det finns dock ingen interaktiv fråga under CI/CD. azd
måste begära värdet för parametern när du kör azd pipeline config
, spara värdet i pipelinen och sedan hämta värdet igen när pipelinen körs.
azd
använder en pipelinehemlighet som anropas AZD_INITIAL_ENVIRONMENT_CONFIG
för att automatiskt spara och ange värdet för alla obligatoriska parametrar i pipelinen. Du behöver bara referera till den här hemligheten i pipelinen:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
När pipelinen körs azd
tar du värdena för parametrarna från hemligheten, vilket tar bort behovet av en interaktiv fråga.
Kommentar
Du måste köra azd pipeline config
igen om du lägger till en ny parameter.
Skapa en pipelinedefinition
Om mallen azd
inte redan har en CI/CD-pipelinedefinitionsfil kan du skapa en själv. En CI/CD-pipelinedefinition har vanligtvis 4 huvudavsnitt:
- utlösare
- behörigheter
- operativsystem eller pool
- steg som ska köras
Följande exempel visar hur du skapar en definitionsfil och relaterade konfigurationer för GitHub Actions och Azure Pipelines.
För att köra azd
i GitHub Actions krävs följande konfigurationer:
- Bevilja
id-token: write
ochcontents: read
få åtkomst till omfång. - Installera azd-åtgärden, såvida du inte använder en docker-avbildning där
azd
redan är installerad.
Du kan använda följande mall som utgångspunkt för din egen pipelinedefinition:
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 }}