Configurare una pipeline e gli aggiornamenti push
Questo articolo illustra come usare l'interfaccia della riga di comando per sviluppatori di Azure (azd
) per eseguire il push delle modifiche del modello tramite una pipeline CI/CD, ad esempio GitHub Actions o Azure DevOps. Per questo esempio si userà l'app Web React con Node.js API e MongoDB nel modello di Azure, ma è possibile applicare i principi appresi in questo articolo a uno dei modelli dell'interfaccia della riga di comando per sviluppatori di Azure.
Nota
Il azd pipeline config
comando è ancora in versione beta. Altre informazioni sul supporto delle funzionalità alfa e beta sono disponibili nella pagina relativa al controllo delle versioni delle funzionalità e alla strategia di rilascio.
Prerequisiti
- Installare l'interfaccia della riga di comando per sviluppatori di Azure.
- Distribuire il modello di Node.js.
- Visual Studio Code installato.
azd
I modelli possono includere o meno un file di configurazione predefinito della pipeline GitHub Actions e/o Azure DevOps denominato azure-dev.yml
, necessario per configurare CI/CD. Questo file di configurazione effettua il provisioning delle risorse di Azure e distribuisce il codice nel ramo principale. È possibile trovare azure-dev.yml
:
- Per GitHub Actions: nella
.github/workflows
directory. - Per Azure DevOps: nella
.azdo/pipelines
directory.
È possibile usare il file di configurazione così come è o modificarlo in base alle proprie esigenze.
Nota
Assicurarsi che il modello abbia una definizione di pipeline (azure-dev.yaml
) prima di chiamare azd pipeline config
. azd
non crea automaticamente questo file.
Vedere Creare una definizione di pipeline per azd di seguito.
Usare il azd pipeline config
comando per configurare una pipeline CI/CD che gestisce le attività seguenti:
- Creazione e configurazione di un'entità servizio per l'app nella sottoscrizione di Azure. L'utente deve avere ruoli
Owner
oContributor + User Access Administrator
ruoli all'interno della sottoscrizione di Azure per consentire ad azd di creare e assegnare ruoli all'entità servizio. - È possibile eseguire un flusso di lavoro per creare e configurare un repository GitHub o Azure DevOps ed eseguirne il commit. È anche possibile scegliere di usare un repository esistente.
- Crea una connessione sicura tra Azure e il repository.
- Esegue l'azione GitHub quando si archivia il file del flusso di lavoro.
Per un controllo più granulare su questo processo o se l'utente non dispone dei ruoli necessari, è possibile configurare manualmente una pipeline.
Selezionare il provider di pipeline preferito per continuare:
Autorizzare GitHub a eseguire la distribuzione in Azure
Per configurare il flusso di lavoro, è necessario autorizzare un'entità servizio a eseguire la distribuzione in Azure per conto dell'utente da un'azione GitHub. azd
crea l'entità servizio e una credenziale federata.
Eseguire il comando seguente per creare l'entità servizio di Azure e configurare la pipeline:
azd pipeline config
Questo comando, facoltativamente, crea un repository GitHub ed esegue il push del codice nel nuovo repository.
Nota
Per impostazione predefinita,
azd pipeline config
usa OpenID Connect (OIDC), denominate credenziali federate . Se si preferisce non usare OIDC, eseguireazd pipeline config --auth-type client-credentials
.Le credenziali OIDC/federate non sono supportate per Terraform.
Specificare le informazioni di GitHub richieste.
Quando viene richiesto di eseguire il commit e il push delle modifiche locali per avviare una nuova esecuzione di GitHub Actions, specificare
y
.Nella finestra del terminale visualizzare i risultati del
azd pipeline config
comando. Ilazd pipeline config
comando restituirà il nome del repository GitHub per il progetto.Usando il browser, aprire il repository GitHub per il progetto.
Selezionare Azioni per visualizzare il flusso di lavoro in esecuzione.
Apportare ed eseguire il push di una modifica del codice
Nella directory del
/src/web/src/layout
progetto aprireheader.tsx
.Individuare la riga
<Text variant="xLarge">ToDo</Text>
.Modificare il valore letterale
ToDo
inmyTodo
.Salvare il file.
Eseguire il commit della modifica. Il commit della modifica avvia la pipeline di GitHub Action per distribuire l'aggiornamento.
Usando il browser, aprire il repository GitHub del progetto per visualizzare entrambi:
- Commit
- Commit da GitHub Actions configurato.
Selezionare Azioni per visualizzare l'aggiornamento del test che si riflette nel flusso di lavoro.
Visitare l'URL front-end Web per controllare l'aggiornamento.
azd
come azione di GitHub
Aggiungere azd
come azione GitHub. Questa azione installerà azd
. Per usarlo, è possibile aggiungere quanto segue a .github\workflows\azure-dev.yml
:
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
Pulire le risorse
Quando le risorse di Azure create in questo articolo non sono più necessarie, eseguire il comando seguente:
azd down
Funzionalità avanzate
È possibile estendere il azd pipeline config
comando per scenari o requisiti di modello specifici, come descritto nelle sezioni seguenti.
Segreti o variabili aggiuntivi
Per impostazione predefinita, azd
imposta variabili e segreti per la pipeline. Ad esempio, il azd pipeline config
comando crea le subscription id
variabili , environment name
e come variabili della region
pipeline ogni volta che viene eseguita. La definizione della pipeline fa quindi riferimento a tali variabili:
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 }}
Quando la pipeline viene eseguita, azd
ottiene i valori dall'ambiente, di cui viene eseguito il mapping alle variabili e ai segreti. A seconda del modello, potrebbero essere presenti impostazioni che è possibile controllare usando le variabili di ambiente. Ad esempio, una variabile di ambiente denominata KEY_VAULT_NAME
può essere impostata per definire il nome di una risorsa key vault all'interno dell'infrastruttura modello. Per questi casi, l'elenco di variabili e segreti può essere definito dal modello, usando .azure.yaml
Si consideri ad esempio la configurazione seguente azure.yaml
:
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
Con questa configurazione, azd
controlla se una delle variabili o dei segreti ha un valore non vuoto nell'ambiente. azd
crea quindi una variabile o un segreto per la pipeline usando il nome della chiave nella configurazione come nome della variabile o del segreto e il valore non stringa dell'ambiente per il valore.
La definizione della azure-dev.yaml
pipeline può quindi fare riferimento alle variabili o ai segreti:
- 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 }}
Nota
È necessario eseguire azd pipeline config
dopo aver aggiornato l'elenco di segreti o variabili in azure.yaml
per azd per reimpostare i valori della pipeline.
Parametri dell'infrastruttura
Si consideri l'esempio bicep seguente:
@secure()
param BlobStorageConnection string
Il parametro BlobStorageConnection
non ha un valore predefinito impostato, quindi azd
chiede all'utente di immettere un valore. Tuttavia, non viene visualizzata alcuna richiesta interattiva durante CI/CD. azd
deve richiedere il valore per il parametro quando si esegue azd pipeline config
, salvare il valore nella pipeline e quindi recuperare di nuovo il valore quando viene eseguita la pipeline.
azd
usa un segreto della pipeline denominato AZD_INITIAL_ENVIRONMENT_CONFIG
per salvare e impostare automaticamente il valore di tutti i parametri necessari nella pipeline. È sufficiente fare riferimento a questo segreto nella pipeline:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
Quando la pipeline viene eseguita, azd
accetta i valori per i parametri dal segreto, rimuovendo la necessità di un prompt interattivo.
Nota
È necessario eseguire azd pipeline config
di nuovo se si aggiunge un nuovo parametro.
Creare una definizione di pipeline
Se il azd
modello non ha già un file di definizione della pipeline CI/CD, è possibile crearne uno manualmente. Una definizione di pipeline CI/CD include in genere 4 sezioni principali:
- trigger
- autorizzazioni
- sistema operativo o pool
- passaggi da eseguire
Gli esempi seguenti illustrano come creare un file di definizione e le configurazioni correlate per GitHub Actions e Azure Pipelines.
L'esecuzione azd
in GitHub Actions richiede le configurazioni seguenti:
- Concedere
id-token: write
econtents: read
accedere agli ambiti. - Installare l'azione azd, a meno che non si usi un'immagine Docker in cui
azd
è già installato.
È possibile usare il modello seguente come punto di partenza per la propria definizione della pipeline:
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 }}