Intégration de CI/CD

Cet article explique comment configurer l’intégration CI/CD pour les tests Playwright de Power Platform dans GitHub Actions et Azure Pipelines. Automatisez l’authentification, exécutez des tests de bout en bout et publiez les résultats en tant qu’artefacts de pipeline et rapports de test.

Prerequisites

Avant de configurer votre pipeline, vérifiez que vous disposez des points suivants :

  • Un Azure Key Vault avec un certificat pour votre utilisateur de test
  • Le principal de service de votre pipeline a accordé le rôle Key Vault Utilisateur de certificat sur le coffre
  • URL de votre application, ID de locataire et e-mail stockés en tant que secrets ou variables de pipeline

Pour la configuration du certificat local, consultez le guide d’authentification.

GitHub Actions

Les étapes suivantes configurent un flux de travail GitHub Actions pour exécuter vos tests Playwright Power Platform à chaque push, pull request ou déclencheur planifié.

Conserver les informations sensibles

Dans votre référentiel, accédez à Paramètres → Secrets et variables → Actions et ajoutez :

Secret Description
MS_AUTH_EMAIL E-mail du compte d’utilisateur de test
AZURE_KEYVAULT_URL URL de Key Vault (https://<vault>.vault.azure.net/)
AZURE_CERTIFICATE_NAME Nom du certificat dans Key Vault
AZURE_TENANT_ID ID de client Microsoft Entra
CANVAS_APP_URL URL en mode lecture complète de votre application canevas
MODEL_DRIVEN_APP_URL URL complète de votre application pilotée par modèle

Fichier de flux de travail

Créez .github/workflows/e2e.yml :

name: Power Platform E2E Tests

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  schedule:
    - cron: '0 6 * * 1-5'  # Weekdays at 6 AM UTC

jobs:
  e2e:
    runs-on: ubuntu-latest
    timeout-minutes: 60

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Rush dependencies
        run: node common/scripts/install-run-rush.js install

      - name: Build toolkit
        run: node common/scripts/install-run-rush.js build --to power-platform-playwright-toolkit

      - name: Install Playwright browsers
        working-directory: packages/e2e-tests
        run: npx playwright install chromium --with-deps

      - name: Authenticate to Power Platform (Canvas)
        working-directory: packages/e2e-tests
        env:
          MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
          MS_AUTH_CREDENTIAL_TYPE: certificate
          MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
          AZURE_KEYVAULT_URL: ${{ secrets.AZURE_KEYVAULT_URL }}
          AZURE_CERTIFICATE_NAME: ${{ secrets.AZURE_CERTIFICATE_NAME }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          CANVAS_APP_URL: ${{ secrets.CANVAS_APP_URL }}
          MODEL_DRIVEN_APP_URL: ${{ secrets.MODEL_DRIVEN_APP_URL }}
        run: npm run auth

      - name: Authenticate to Power Platform (MDA)
        working-directory: packages/e2e-tests
        env:
          MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
          MS_AUTH_CREDENTIAL_TYPE: certificate
          MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
          AZURE_KEYVAULT_URL: ${{ secrets.AZURE_KEYVAULT_URL }}
          AZURE_CERTIFICATE_NAME: ${{ secrets.AZURE_CERTIFICATE_NAME }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          MODEL_DRIVEN_APP_URL: ${{ secrets.MODEL_DRIVEN_APP_URL }}
        run: npm run auth:mda

      - name: Run Playwright tests
        working-directory: packages/e2e-tests
        env:
          MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
          CANVAS_APP_URL: ${{ secrets.CANVAS_APP_URL }}
          MODEL_DRIVEN_APP_URL: ${{ secrets.MODEL_DRIVEN_APP_URL }}
          CUSTOM_PAGE_NAME: AccountsCustomPage
          CI: true
        run: npx playwright test

      - name: Upload test results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: playwright-report
          path: packages/e2e-tests/playwright-report/
          retention-days: 30

      - name: Upload JUnit results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-results
          path: packages/e2e-tests/test-results/
          retention-days: 30

Publier les résultats des tests dans GitHub Actions

Pour afficher les résultats des tests dans la vue de vérification des demandes de tirage, ajoutez l’étape reporter JUnit après l’exécution des tests :

      - name: Publish test results
        if: always()
        uses: dorny/test-reporter@v1
        with:
          name: Playwright Tests
          path: packages/e2e-tests/test-results/results.xml
          reporter: java-junit

Azure Pipelines

Les étapes suivantes configurent une définition de Azure Pipelines avec des modèles réutilisables pour exécuter vos tests Power Platform Playwright.

Groupe de variables

Créez un groupe de variables nommé power-platform-e2e-secrets dans Pipelines → Library et ajoutez les mêmes variables que la table de secrets GitHub Actions ci-dessus.

Définition de pipeline

Créez .azure-pipelines/e2e-tests.yml :

trigger:
  branches:
    include:
      - main

pr:
  branches:
    include:
      - main

schedules:
  - cron: '0 6 * * 1-5'
    displayName: Weekday morning run
    branches:
      include:
        - main

pool:
  vmImage: ubuntu-latest

variables:
  - group: power-platform-e2e-secrets
  - name: NODE_VERSION
    value: '20'

stages:
  - stage: E2E
    displayName: End-to-End Tests
    jobs:
      - job: PlaywrightTests
        displayName: Power Platform Playwright Tests
        timeoutInMinutes: 60
        steps:
          - template: steps/e2e-setup.yml

          - task: Bash@3
            displayName: Authenticate (Canvas)
            env:
              MS_AUTH_EMAIL: $(MS_AUTH_EMAIL)
              MS_AUTH_CREDENTIAL_TYPE: certificate
              MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
              AZURE_KEYVAULT_URL: $(AZURE_KEYVAULT_URL)
              AZURE_CERTIFICATE_NAME: $(AZURE_CERTIFICATE_NAME)
              AZURE_TENANT_ID: $(AZURE_TENANT_ID)
              CANVAS_APP_URL: $(CANVAS_APP_URL)
              MODEL_DRIVEN_APP_URL: $(MODEL_DRIVEN_APP_URL)
            script: |
              cd packages/e2e-tests
              npm run auth

          - task: Bash@3
            displayName: Authenticate (MDA)
            env:
              MS_AUTH_EMAIL: $(MS_AUTH_EMAIL)
              MS_AUTH_CREDENTIAL_TYPE: certificate
              MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
              AZURE_KEYVAULT_URL: $(AZURE_KEYVAULT_URL)
              AZURE_CERTIFICATE_NAME: $(AZURE_CERTIFICATE_NAME)
              AZURE_TENANT_ID: $(AZURE_TENANT_ID)
              MODEL_DRIVEN_APP_URL: $(MODEL_DRIVEN_APP_URL)
            script: |
              cd packages/e2e-tests
              npm run auth:mda

          - task: Bash@3
            displayName: Run Playwright Tests
            env:
              MS_AUTH_EMAIL: $(MS_AUTH_EMAIL)
              CANVAS_APP_URL: $(CANVAS_APP_URL)
              MODEL_DRIVEN_APP_URL: $(MODEL_DRIVEN_APP_URL)
              CUSTOM_PAGE_NAME: AccountsCustomPage
              CI: 'true'
            script: |
              cd packages/e2e-tests
              npx playwright test

          - template: steps/e2e-publish-results.yml

Modèle d’étape de configuration réutilisable

Créez .azure-pipelines/steps/e2e-setup.yml :

steps:
  - task: NodeTool@0
    displayName: Install Node.js
    inputs:
      versionSpec: $(NODE_VERSION)

  - task: Bash@3
    displayName: Install Rush dependencies
    script: node common/scripts/install-run-rush.js install

  - task: Bash@3
    displayName: Build toolkit
    script: node common/scripts/install-run-rush.js build --to power-platform-playwright-toolkit

  - task: Bash@3
    displayName: Install Playwright browsers
    script: |
      cd packages/e2e-tests
      npx playwright install chromium --with-deps

Modèle de résultats de publication réutilisable

Créez .azure-pipelines/steps/e2e-publish-results.yml :

steps:
  - task: PublishTestResults@2
    displayName: Publish JUnit test results
    condition: always()
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: packages/e2e-tests/test-results/results.xml
      testRunTitle: Power Platform Playwright Tests

  - task: PublishPipelineArtifact@1
    displayName: Publish Playwright report
    condition: always()
    inputs:
      targetPath: packages/e2e-tests/playwright-report
      artifact: playwright-report
      publishLocation: pipeline

Résoudre les défaillances du pipeline CI/CD

Utilisez le tableau suivant pour diagnostiquer et résoudre les problèmes courants lors de l’exécution de tests Playwright dans un pipeline CI.

Symptôme Résolution
Échec de l’étape d’authentification avec une erreur de certificat Vérifier Key Vault URL, le nom du certificat et le rôle de fournisseur de services de pipeline
Les tests échouent lors de la première exécution dans CI Augmenter retries à 1 et vérifier les sélecteurs inconstants
Artefact non publié Vérifier que if: always() / condition: always() l’option est définie
Délais d’expiration du pipeline Réduire le nombre de tests ou augmenter timeoutInMinutes
Cannot find module Erreur Exécutez l’étape de génération du kit de ressources avant d’exécuter des tests

Étapes suivantes

Voir aussi