Sdílet prostřednictvím


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.ymlkterý 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 .azuredevops/pipelines nebo v adresáři .azdo/pipelines. (Obě jsou podporované.)

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 azure-dev.yamlse ujistěte, že vaše šablona obsahuje definici kanálu (azd pipeline config). 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 nebo Contributor + 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 .

  1. 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ťte azd pipeline config --auth-type client-credentials.

    Terraform nepodporuje OIDC ani federované přihlašovací údaje.

    Další informace o podpoře OIDC v azd.

  2. Zadejte požadované informace z GitHubu.

  3. 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.

  4. V okně terminálu zobrazte výsledky azd pipeline config příkazu. Příkaz azd pipeline config vypíše název úložiště GitHub pro váš projekt.

  5. V prohlížeči otevřete úložiště GitHub pro váš projekt.

  6. Výběrem možnosti Akce zobrazíte spuštěný pracovní postup.

    Snímek obrazovky se spuštěným pracovním postupem GitHubu

Vytvoření a nasdílení změn kódu

  1. V adresáři projektu /src/web/src/layout otevřete header.tsx.

  2. Vyhledejte čáru <Text variant="xLarge">ToDo</Text>.

  3. Změňte literál ToDo na myTodo.

  4. Uložte soubor.

  5. Potvrďte tuto změnu. Potvrzení změny spustí kanál akce GitHubu pro nasazení aktualizace.

    Snímek obrazovky s kroky potřebnými k provedení a potvrzení změn testovacího souboru

  6. 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.

    Snímek obrazovky s potvrzenou změnou na GitHubu

  7. Výběrem možnosti Akce zobrazíte testovací aktualizaci, která se projeví v pracovním postupu.

    Snímek obrazovky pracovního postupu GitHubu spuštěného po testovací aktualizaci

  8. 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 idenvironment 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 a contents: 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 }}