Mettre en place des pipelines CI/CD

Vous pouvez configurer un pipeline d’intégration continue et de déploiement continu (CI/CD) pour les applications Microsoft Teams créées avec teams Toolkit. Un pipeline CI/CD d’application Teams se compose de trois parties :

  1. Créez le projet.

  2. Déployez le projet sur des ressources cloud.

  3. Générer le package d’application Teams.

Remarque

Pour créer un pipeline pour une application Teams, il est nécessaire de préparer les ressources cloud nécessaires, telles qu’Azure Web App, Azure Functions ou Azure Static Web App, et de configurer les paramètres de l’application.

Pour générer le projet, vous devez compiler le code source et créer les artefacts de déploiement requis. Il existe deux méthodes pour déployer les artefacts :

Configurer des pipelines CI/CD avec l’interface CLI du Kit de ressources Teams

Remarque

Utilisez Teams Toolkit version 5.6.0 ou ultérieure.

Vous pouvez utiliser l’interface de ligne de commande (CLI) du Kit de ressources Teams pour configurer le pipeline CI/CD pour votre application Teams.

Configuration requise

Élément Description
Configurez les ressources requises pour votre application Teams, telles que l’ID d’application Teams, l’ID de bot, etc. • Extrayez manuellement les ressources du manifest.json fichier sous le appPackage dossier .
• Générer automatiquement pour exécuter la commande dans teams Provision Toolkit.
Configurer des ressources Azure • Préparez manuellement les ressources en examinant les fichiers bicep sous le infra dossier .
• Préparez automatiquement les ressources à l’aide de la Provision commande dans teams Toolkit.
Vérifiez que vous disposez d’un principal de service correctement configuré avec des stratégies d’accès appropriées sur les ressources. L’interface Teamsapp de ligne de commande (CLI) prend en charge la connexion Azure via l’authentification basée sur un certificat ou l’authentification par mot de passe (secret d’application). Vous pouvez créer un principal de service avec l’authentification basée sur le certificat et enregistrer le certificat généré ( appId ID client) et tenant (ID de locataire), ou créer un secret et enregistrer l’ID client, la clé secrète client et l’ID de locataire du principal de service.
Capture d’écran montrant le secret du principal de service.
Pour plus d’informations sur le principal de service, consultez :
Créer un principal de service à l’aide du portail Entra.
Créer un principal de service à l’aide d’Azure CLI.

Une fois que vous avez rempli les conditions préalables, nous allons configurer un pipeline :

Configurer un pipeline avec GitHub

Pour configurer le pipeline avec GitHub, procédez comme suit :

  1. Ouvrez Visual Studio Code.

  2. Créez un cd.yml fichier dans votre projet sous .github/workflows le dossier et ajoutez le code suivant dans le fichier :

    on:
      push:
        branches:
          - main
    jobs:
      build:
        runs-on: ubuntu-latest
        env:
          TEAMSAPP_CLI_VERSION: "3.0.4"
          # Add extra environment variables here so that teamsapp cli can use them.
    
        steps:
          - name: "Checkout GitHub Action"
            uses: actions/checkout@v4
    
          - name: Setup Node 20.x
            uses: actions/setup-node@v1
            with:
              node-version: "20.x"
    
          - name: install cli
            run: |
              npm install @microsoft/teamsapp-cli@${{env.TEAMSAPP_CLI_VERSION}}
    
          - name: Retrieve the secret and decode it to a file
            env:
              CERTIFICATE_BASE64: ${{ secrets.AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64 }}
            run: |
              echo $CERTIFICATE_BASE64 | base64 --decode > cert.pem
    
          - name: Login Azure by service principal
            run: |
              npx teamsapp auth login azure --username ${{vars.AZURE_SERVICE_PRINCIPAL_CLIENT_ID}}  \
              --service-principal true \
              --tenant ${{vars.AZURE_TENANT_ID}} \
              --password cert.pem \
              --interactive false
    
          - name: Deploy to hosting environment
            run: |
              npx teamsapp deploy --ignore-env-file true \
              --interactive false
    
          - name: Package app
            run: |
              npx teamsapp package
    
          - name: upload appPackage
            uses: actions/upload-artifact@v4
            with:
              name: artifact
              path: appPackage/build/appPackage.zip
    
  3. Accédez à GitHub.

  4. Mettez à jour les variables et les secrets suivants que vous avez créés pendant les prérequis :

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID, AZURE_TENANT_IDet AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64. AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64 est le contenu encodé sous forme de chaîne en Base64 du certificat que vous avez généré.

      Capture d’écran montrant les paramètres du dépôt.

      Remarque

      La AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64 variable doit être définie en tant que secret. Utilisez l’environnement GitHub pour différents jeux de variables.

    • Accédez au teamsapp.yml fichier. Dans la deploy phase, les valeurs incluses dans ${{}} sont les clés de variable requises. Si vous avez utilisé la provision commande du Kit de ressources Teams, vous pouvez localiser les valeurs dans les fichiers d’environnement dans le .env dossier .

      Définissez comme variable de BOT_AZURE_APP_SERVICE_RESOURCE_ID dépôt :

      Capture d’écran montrant l’ID de ressource Azure App Service du bot dans teamsapp.yml fichier.

    • Accédez au appPackage/manifest.json fichier. Les valeurs incluses dans ${{}} sont les clés de variable requises. Si vous avez utilisé la provision commande du Kit de ressources Teams, vous pouvez localiser les valeurs dans les fichiers d’environnement dans le .env dossier .

      Définissez comme variable de TEAMS_APP_ID dépôt :

      Capture d’écran montrant l’ID d’application Teams dans le fichier manifeste.

  5. Dans GitHub, accédez aux paramètres de votre dépôt, puis sélectionnez Secrets et variables>Actions.

    Mettez à jour les clés de variable que vous avez collectées pour les variables suivantes :

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID
    • AZURE_TENANT_ID
    • AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET ou AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
    • BOT_AZURE_APP_SERVICE_RESOURCE_ID
    • TEAMS_APP_ID

    Ajoutez les variables définies dans votre référentiel directement dans votre fichier yml, à l’exclusion des trois variables suivantes :

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID

    • AZURE_TENANT_ID

    • AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET ou AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64

      Capture d’écran montrant le pipeline yml modifié.

  6. Exécutez le pipeline.

    Envoyez du code au référentiel pour déclencher le pipeline.

    Remarque

    Vous n’avez pas besoin de valider les fichiers env sous le dossier env dans le référentiel. Les variables env requises pour l’exécution du pipeline CI/CD sont déjà définies dans les variables du dépôt.

    Une fois le pipeline exécuté avec succès, le journal indique que le code est déployé sur Azure et que le appPackage est généré dans les artefacts.

    Capture d’écran montrant que « appPackage » est généré dans les artefacts.

Configurer un pipeline avec Azure DevOps

Pour configurer le pipeline avec Azure DevOps, procédez comme suit :

  1. Ouvrez Visual Studio Code.

  2. Créez un cd.yml fichier dans votre projet et ajoutez le code suivant dans le fichier :

    trigger:
      - main
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      TEAMSAPP_CLI_VERSION: 3.0.4
    
    steps:
      - task: NodeTool@0
        inputs:
          versionSpec: "20"
          checkLatest: true
    
      - script: |
          npm install @microsoft/teamsapp-cli@$(TEAMSAPP_CLI_VERSION)
        displayName: "Install CLI"
    
      - task: DownloadSecureFile@1  
        name: certFile  
        displayName: 'Download Certificate File'  
        inputs:  
          secureFile: 'azure_sp_cert.pem' 
    
      - script: |
          npx teamsapp auth login azure --username $(AZURE_SERVICE_PRINCIPAL_CLIENT_ID) --service-principal true --tenant $(AZURE_TENANT_ID) --password $(certFile.secureFilePath) --interactive false
        displayName: "Login Azure by service principal"
    
      - script: |
          npx teamsapp deploy --ignore-env-file true --interactive false
        displayName: "Deploy to Azure"
        workingDirectory: $(System.DefaultWorkingDirectory)
    
      - script: |
          npx teamsapp package
        displayName: "Package app"
        workingDirectory: $(System.DefaultWorkingDirectory)
    
      - publish: $(System.DefaultWorkingDirectory)/appPackage/build/appPackage.zip
        artifact: artifact
    
  3. Envoyez le code au dépôt.

  4. Configurez le pipeline Azure.

    Après avoir envoyé votre code au dépôt, accédez à Pipelines et sélectionnez Nouveau pipeline. Sélectionnez votre référentiel et le fichier yml existant pour configurer votre pipeline.

  5. Mettez à jour les variables suivantes et définissez le certificat que vous avez créé pendant les conditions préalables :

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID, AZURE_TENANT_ID

    • Accédez au teamsapp.yml fichier. Dans la deploy phase, les valeurs incluses dans ${{}} sont les clés de variable requises. Si vous avez utilisé la provision commande du Kit de ressources Teams, vous pouvez localiser les valeurs dans les fichiers d’environnement dans le .env dossier .

      Définissez comme variable de BOT_AZURE_APP_SERVICE_RESOURCE_ID dépôt :

      Capture d’écran montrant l’ID de ressource Azure App Service du bot dans teamsapp.yml fichier.

    • Accédez au appPackage/manifest.json fichier. Les valeurs incluses dans ${{}} sont les clés de variable requises. Si vous avez utilisé la provision commande du Kit de ressources Teams, vous pouvez localiser les valeurs dans les fichiers d’environnement dans le .env dossier .

      Définissez comme variable de TEAMS_APP_ID dépôt :

      Capture d’écran montrant l’ID d’application Teams dans le fichier manifeste.

    Vous devez définir les variables de nom de clé suivantes dans le référentiel :

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID
    • AZURE_TENANT_ID
    • BOT_AZURE_APP_SERVICE_RESOURCE_ID
    • TEAMS_APP_ID

    Pour définir des variables dans votre pipeline, accédez à votre pipeline et sélectionnez Modifier les>variables.

    Dans votre projet Azure DevOps, accédez àBibliothèquepipelines> et ajoutez un nouveau fichier sécurisé. Chargez le fichier de certificat (.pem) et nommez le fichier comme azure_sp_cert.pem.

  6. Exécutez le pipeline.

    Envoyez du code au référentiel pour déclencher le pipeline.

    Remarque

    Il n’est pas nécessaire de valider les fichiers env sous le dossier env/ dans le dépôt. Les variables env requises pour l’exécution du pipeline CI/CD sont déjà établies dans les variables de pipeline.

    Une fois le pipeline exécuté avec succès, le journal indique que le code est déployé sur Azure et que le appPackage est généré dans les artefacts.

    Capture d’écran montrant que le pipeline s’exécute correctement.

Configurer des pipelines CI/CD à l’aide de votre propre workflow

Si l’interface CLI de l’application Teams ne répond pas aux exigences de votre pipeline, vous pouvez développer un processus de déploiement personnalisé qui répond à vos besoins. Cette section fournit des conseils sur le déploiement sur Azure avec des méthodes personnalisées.

Remarque

Si vous disposez déjà d’un pipeline CI/CD complet pour le déploiement sur votre ressource Azure et que votre application Teams doit lire les variables d’environnement pendant l’exécution, configurez ces variables d’environnement dans les paramètres de votre ressource Azure. Pour les tests post-déploiement, consultez Générer un package d’application Teams.

La teamsapp deploy commande exécute les actions définies dans la deploy phase du teamsapp.yml fichier. La deploy phase se compose d’actions build et deploy . Pour créer une méthode de déploiement personnalisée, réécrire ces actions en fonction de vos besoins et préférences spécifiques.

Par exemple, un projet TypeScript de bot de base a l’étape de déploiement suivante dans son teamsapp.yml:

deploy:
  # Run npm command
  - uses: cli/runNpmCommand
    name: install dependencies
    with:
      args: install
  - uses: cli/runNpmCommand
    name: build app
    with:
      args: run build --if-present
  # Deploy your application to Azure App Service using the zip deploy feature.
  # For additional details, refer to this link.
  - uses: azureAppService/zipDeploy
    with:
      # Deploy base folder
      artifactFolder: .
      # Ignore file location, leave blank will ignore nothing
      ignoreFile: .webappignore
      # The resource id of the cloud resource to be deployed to.
      # This key will be generated by arm/deploy action automatically.
      # You can replace it with your existing Azure Resource id
      # or add it to your environment variable file.
      resourceId: ${{BOT_AZURE_APP_SERVICE_RESOURCE_ID}}

Ces actions effectuent les tâches suivantes :

  • Exécutez npm install et npm build pour générer le projet.
  • Déployer du code sur Azure App Service.

Vous pouvez personnaliser ces actions dans votre pipeline CI/CD. Voici un exemple qui utilise les actions de GitHub :

# build
- name: Setup Node 20.x
  uses: actions/setup-node@v1
  with:
    node-version: '20.x'
- name: 'npm install, build'
  run: |
    npm install
    npm run build --if-present

- name: 'zip artifact for deployment'
  run: |
    zip -r deploy.zip . --include 'node_modules/*' 'lib/*' 'web.config'

# deploy
- name: 'Login via Azure CLI'
  uses: azure/login@v1
  with:
    client-id: ${{ vars.CLIENT_ID }}
    tenant-id: ${{ vars.TENANT_ID }}
    subscription-id: ${{ vars.SUBSCRIPTION_ID }}

- name: 'Run Azure webapp deploy action using azure RBAC'
  uses: azure/webapps-deploy@v2
  with:
    app-name: ${{ vars.AZURE_WEBAPP_NAME }}
    package: deploy.zip

Le Kit de ressources Teams prend en charge les projets d’application Teams, écrits dans différents langages de programmation et conçus pour l’hébergement sur différents services Azure. Les actions suivantes pour la génération et le déploiement. Utilisez ces actions lors de la définition de pipelines de déploiement CI/CD.

Build :

Langue GitHub Azure Pipeline
JS ou TS actions/setup-node NodeTool@0
C# actions/setup-dotnet DotNetCoreCLI@2

Déployez :

Resource GitHub Azure Pipeline
Azure App Service azure/webapps-deploy AzureWebApp@1
Azure Functions Azure/functions-action AzureFunctionApp@2
Azure Static Web Apps Azure/static-web-apps-deploy AzureStaticWebApp@0

Informations d’identification nécessaires pour la connexion à Azure

Lorsque vous déployez du code d’application sur Azure App Service, Azure Functions ou Azure Container App via CI/CD, vous avez besoin d’un principal de service pour la connexion Azure. Vous pouvez vous connecter à Azure à l’aide d’un principal de service de deux manières :

Générer un package d’application Teams

Pour distribuer votre application Teams, le appPackage est requis. Vous pouvez créer automatiquement le à l’aide appPackage.zip de la teamsapp package commande dans l’interface Teamsapp CLI. Si vous ne parvenez pas à utiliser Teamsapp l’interface CLI, procédez comme suit pour créer manuellement :appPackage

  1. Préparer un appPackage dossier.
  2. Placez le manifest.json fichier dans le appPackage dossier . Le fichier par défaut manifest.json dans le projet Teams Toolkit contient des espaces réservés, indiqués par ${{}}. Remplacez ces espaces réservés par les valeurs correctes.
  3. Placez les icônes de votre application dans le appPackage dossier . Pour préparer l’icône de votre application, consultez icônes d’application.
  4. Compressez les fichiers dans le appPackage dossier .

Voir aussi