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 .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 configse ujistěte, že vaše šablona obsahuje definici kanálu (azure-dev.yaml). azd tento soubor automaticky nevytvoří. Viz Část Vytvoření definice kanálu pro azd níže.

Ke konfiguraci kanálu CI/CD použijete azd pipeline config příkaz, který zpracovává následující úlohy:

  • Vytvoří a nakonfiguruje instanční objekt pro aplikaci v předplatném Azure. Uživatel musí mít v rámci předplatného Azure roli Owner nebo Contributor + User Access Administrator role, protože aby mohl azd vytvářet a přiřazovat role instančnímu objektu.
  • 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 Připojení (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:

  • Aktivační událost
  • 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 }}