Konfigurace kanálu a nabízených aktualizací
V tomto článku se dozvíte, jak pomocí Azure Developer CLI (azd
) odesílat změny šablon prostřednictvím kanálu CI/CD, jako je GitHub Actions nebo Azure DevOps. V tomto příkladu použijete webovou aplikaci React s rozhraním API Node.js a MongoDB v šabloně Azure , ale principy, které se dozvíte v tomto článku, můžete použít na některou ze šablon Azure Developer CLI.
Poznámka:
Příkaz azd pipeline config
je stále v beta verzi. Další informace o podpoře funkcí alfa a beta verze najdete na stránce pro správu verzí funkcí a strategii vydání.
Požadavky
azd
Šablony můžou nebo nemusí obsahovat výchozí konfigurační soubor kanálu GitHub Actions nebo Azure DevOps, azure-dev.yml
který se vyžaduje k nastavení CI/CD. Tento konfigurační soubor zřídí prostředky Azure a nasadí váš kód do hlavní větve. Můžete najít azure-dev.yml
:
- Pro GitHub Actions: v adresáři
.github/workflows
. - Pro Azure DevOps: v adresáři
.azdo/pipelines
.
Konfigurační soubor můžete použít tak, jak je, nebo ho upravit tak, aby vyhovoval vašim potřebám.
Poznámka:
Před voláním azd pipeline config
se ujistěte, že vaše šablona obsahuje definici kanálu (azure-dev.yaml
). azd
automaticky nevytvoří tento soubor.
Viz Část Vytvoření definice kanálu pro azd níže.
azd pipeline config
Pomocí příkazu nakonfigurujte kanál CI/CD, který zpracovává následující úlohy:
- Vytvoří a nakonfiguruje instanční objekt pro aplikaci v předplatném Azure. Aby uživatel mohl vytvářet a přiřazovat role instančnímu objektu, musí mít
Owner
v rámci předplatného Azure roli neboContributor + User Access Administrator
role. - Projděte si pracovní postup pro vytvoření a konfiguraci úložiště GitHub nebo Úložiště Azure DevOps a potvrzení kódu projektu do něj. Můžete také použít existující úložiště.
- Vytvoří zabezpečené připojení mezi Azure a vaším úložištěm.
- Spustí akci GitHubu při vrácení souboru pracovního postupu se změnami.
Podrobnější kontrolu nad tímto procesem nebo pokud uživatel nemá požadované role, můžete kanál nakonfigurovat ručně.
Pokračujte výběrem preferovaného poskytovatele kanálu:
Autorizace GitHubu pro nasazení do Azure
Pokud chcete nakonfigurovat pracovní postup, musíte autorizovat instanční objekt pro nasazení do Azure vaším jménem z akce GitHubu. azd
vytvoří instanční objekt a federované přihlašovací údaje .
Spuštěním následujícího příkazu vytvořte instanční objekt Azure a nakonfigurujte kanál:
azd pipeline config
Tento příkaz volitelně vytvoří úložiště GitHub a nasdílí kód do nového úložiště.
Poznámka:
Ve výchozím nastavení
azd pipeline config
používá OpenID Connect (OIDC) označované jako federované přihlašovací údaje. Pokud OIDC nechcete použít, spusťteazd pipeline config --auth-type client-credentials
.Terraform nepodporuje OIDC ani federované přihlašovací údaje.
Zadejte požadované informace z GitHubu.
Po zobrazení výzvy k potvrzení a nasdílením místních změn spusťte nové spuštění GitHub Actions, zadejte
y
.V okně terminálu zobrazte výsledky
azd pipeline config
příkazu. Příkazazd pipeline config
vypíše název úložiště GitHub pro váš projekt.V prohlížeči otevřete úložiště GitHub pro váš projekt.
Výběrem možnosti Akce zobrazíte spuštěný pracovní postup.
Vytvoření a nasdílení změn kódu
V adresáři projektu
/src/web/src/layout
otevřeteheader.tsx
.Vyhledejte čáru
<Text variant="xLarge">ToDo</Text>
.Změňte literál
ToDo
namyTodo
.Uložte soubor.
Potvrďte tuto změnu. Potvrzení změny spustí kanál akce GitHubu pro nasazení aktualizace.
V prohlížeči otevřete úložiště GitHub vašeho projektu, abyste viděli obojí:
- Vaše potvrzení
- Probíhá nastavení potvrzení z GitHub Actions.
Výběrem možnosti Akce zobrazíte testovací aktualizaci, která se projeví v pracovním postupu.
Navštivte webovou front-endovou adresu URL a zkontrolujte aktualizaci.
azd
jako akce GitHubu
Přidání azd
jako akce GitHubu Tato akce se nainstaluje azd
. Pokud ho chcete použít, můžete přidat následující položky:.github\workflows\azure-dev.yml
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
Vyčištění prostředků
Pokud už prostředky Azure vytvořené v tomto článku nepotřebujete, spusťte následující příkaz:
azd down
Rozšířené funkce
Příkaz můžete rozšířit azd pipeline config
pro konkrétní scénáře nebo požadavky šablony, jak je popsáno v následujících částech.
Další tajné kódy nebo proměnné
Ve výchozím nastavení azd
nastaví proměnné a tajné kódy kanálu. Například azd pipeline config
příkaz vytvoří subscription id
environment name
a region
jako proměnné kanálu při každém spuštění. Definice kanálu pak odkazuje na tyto proměnné:
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 }}
Při spuštění azd
kanálu získá hodnoty z prostředí, které se mapují na proměnné a tajné kódy. V závislosti na šabloně může existovat nastavení, která můžete řídit pomocí proměnných prostředí. Proměnná prostředí s názvem KEY_VAULT_NAME
může být například nastavena tak, aby definovala název prostředku služby Key Vault v rámci infrastruktury šablony. V takových případech lze pomocí šablony definovat seznam proměnných a tajných kódů.azure.yaml
Představte si například následující azure.yaml
konfiguraci:
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
Při této konfiguraci zkontroluje, azd
jestli některá z proměnných nebo tajných kódů má v prostředí neprázdnou hodnotu. azd
pak vytvoří proměnnou nebo tajný klíč pro kanál pomocí názvu klíče v konfiguraci jako název proměnné nebo tajného klíče a neřetězcovou hodnotu z prostředí pro hodnotu.
Definice azure-dev.yaml
kanálu pak může odkazovat na proměnné nebo tajné kódy:
- 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 }}
Poznámka:
Pokud chcete resetovat hodnoty kanálu, musíte spustit azd pipeline config
po aktualizaci seznamu tajných kódů nebo proměnných azure.yaml
.
Parametry infrastruktury
Podívejte se na následující příklad bicep:
@secure()
param BlobStorageConnection string
BlobStorageConnection
Parametr nemá nastavenou výchozí hodnotu, takže azd
vyzve uživatele k zadání hodnoty. Během CI/CD ale není k dispozici žádná interaktivní výzva. azd
musí požadovat hodnotu parametru při spuštění azd pipeline config
, uložit hodnotu v kanálu a potom načíst hodnotu znovu při spuštění kanálu.
azd
používá tajný klíč kanálu, který se volá AZD_INITIAL_ENVIRONMENT_CONFIG
k automatickému ukládání a nastavení hodnoty všech požadovaných parametrů v kanálu. Tento tajný klíč je potřeba odkazovat jenom v kanálu:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
Když se kanál spustí, azd
vezme hodnoty parametrů z tajného klíče a odebere potřebu interaktivní výzvy.
Poznámka:
Pokud přidáte nový parametr, musíte ho znovu spustit azd pipeline config
.
Vytvoření definice kanálu
Pokud vaše azd
šablona ještě nemá definiční soubor kanálu CI/CD, můžete si ho vytvořit sami. Definice kanálu CI/CD má obvykle 4 hlavní části:
- spoušť
- oprávnění
- operační systém nebo fond
- kroky ke spuštění
Následující příklady ukazují, jak vytvořit definiční soubor a související konfigurace pro GitHub Actions a Azure Pipelines.
Spuštění azd
v GitHub Actions vyžaduje následující konfigurace:
- Udělte
id-token: write
obory acontents: read
získejte přístup. - Nainstalujte akci azd, pokud nepoužíváte image Dockeru, kde
azd
už je nainstalovaná.
Jako výchozí bod pro vlastní definici kanálu můžete použít následující šablonu:
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 }}