Partager via


Créer une définition de pipeline

Si votre azd modèle n’inclut pas de fichier de définition de pipeline CI/CD, vous pouvez en créer un pour automatiser la génération et le déploiement de votre application. Une définition de pipeline bien structurée comprend généralement quatre sections principales :

  • Déclencheur : spécifie les événements quand le pipeline doit s’exécuter, par exemple des transmissions de code vers des branches spécifiques, des demandes de tirage ou des déclencheurs manuels. La définition des déclencheurs garantit que votre pipeline s’exécute automatiquement en réponse aux activités de développement, ce qui permet l’intégration et le déploiement continus.

  • Autorisations : spécifie l’accès requis pour que le pipeline interagisse en toute sécurité avec les ressources. Par exemple, accordez des autorisations pour lire le contenu du référentiel ou demander des jetons d’identité. Les autorisations correctes sont essentielles pour les déploiements sécurisés et réussis.

  • Système d’exploitation ou pool : définit l’environnement pour les travaux de pipeline, tels qu’une image de machine virtuelle spécifique (par exemple ubuntu-latest) ou un pool d’agents. Le choix de l’environnement approprié garantit la compatibilité avec les exigences de génération et de déploiement de votre application.

  • Étapes : répertorie les tâches effectuées par le pipeline, telles que l’extraction du code, l’installation de dépendances, la création, l’infrastructure d’approvisionnement et le déploiement sur Azure. Chaque étape doit être clairement définie pour automatiser le processus de déploiement de bout en bout.

Les exemples suivants montrent comment créer un fichier de définition de pipeline et des configurations associées pour GitHub Actions et Azure Pipelines.

Pour s’exécuter azd dans GitHub Actions, configurez les paramètres suivants :

  • Accorder des droits d'accès à id-token: write et contents: read.
  • Installez l’action azd, sauf si vous utilisez une image Docker préinstallée azd .

Utilisez ce modèle comme point de départ pour votre définition de 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 }}