Freigeben über


CI/CD-Integration

In diesem Artikel wird erläutert, wie Sie die CI/CD-Integration für Power Platform Playwright-Tests in GitHub Actions und Azure Pipelines konfigurieren. Automatisieren Sie die Authentifizierung, führen Sie End-to-End-Tests aus, und veröffentlichen Sie Ergebnisse als Pipelineartefakte und Testberichte.

Voraussetzungen

Bevor Sie Ihre Pipeline konfigurieren, stellen Sie sicher, dass Sie folgendes haben:

  • Ein Azure Key Vault mit einem Zertifikat für Ihren Testbenutzer
  • Der Dienstprinzipal für Ihre Pipeline erteilte die Rolle "Key Vault Certificate User" für den Tresor
  • Ihre App-URLs, Mandanten-ID und E-Mails, die als Pipelineschlüssel oder Variablen gespeichert sind

Informationen zum einrichten von lokalen Zertifikaten finden Sie im Authentifizierungshandbuch.

GitHub Actions

Die folgenden Schritte konfigurieren einen GitHub Actions-Workflow, um Ihre Power Platform Playwright-Tests auf jedem Push-, Pull-Anforderungs- oder geplanten Trigger auszuführen.

Geheime Schlüssel speichern

Wechseln Sie in Ihrem Repository zu "Einstellungen" → "Geheime Schlüssel" und "Variablen" → "Aktionen ", und fügen Sie Folgendes hinzu:

Geheimnis Beschreibung
MS_AUTH_EMAIL E-Mail des Testbenutzerkontos
AZURE_KEYVAULT_URL Key Vault-URL (https://<vault>.vault.azure.net/)
AZURE_CERTIFICATE_NAME Name des Zertifikats in Key Vault
AZURE_TENANT_ID Microsoft Entra Mandanten-ID
CANVAS_APP_URL Vollständige URL für den Abspielmodus Ihrer Canvas-App
MODEL_DRIVEN_APP_URL Vollständige URL Ihrer modellgesteuerten App

Workflowdatei

Erstellen Sie .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

Veröffentlichen von Testergebnissen in GitHub Actions

Um Testergebnisse in der PR-Prüfansicht anzuzeigen, fügen Sie den JUnit Reporter-Schritt nach ausführung der Tests hinzu:

      - 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

Die folgenden Schritte konfigurieren eine Azure Pipelines Definition mit wiederverwendbaren Vorlagen, um Ihre Power Platform Playwright-Tests auszuführen.

Variablengruppe

Erstellen Sie eine Variablengruppe mit dem Namen power-platform-e2e-secrets in Pipelines → Library und fügen Sie die gleichen Variablen wie die GitHub Actions geheime Tabelle oben hinzu.

Definition der Pipeline

Erstellen Sie .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

Vorlage für wiederverwendbare Einrichtungsschritte

Erstellen Sie .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

Vorlage für wiederverwendbare Veröffentlichungsergebnisse

Erstellen Sie .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

Fehlerbehebung bei CI/CD-Pipelinefehlern

Verwenden Sie die folgende Tabelle, um häufige Probleme beim Ausführen von Playwright-Tests in einer CI-Pipeline zu diagnostizieren und zu beheben.

Symptom Resolution
Fehler beim Authentifikationsschritt mit Zertifikatfehler Überprüfen Sie die Key Vault-URL, den Zertifikatnamen und die Rolle des Pipeline-SP.
Bei der ersten Ausführung in CI schlagen die Tests fehl. Erhöhen Sie retries auf 1 und überprüfen Sie die instabilen Selektoren
Artefakt nicht veröffentlicht Sicherstellen, dass if: always() / condition: always() festgelegt ist
Pipeline-Zeitüberschreitung Reduzieren der Testanzahl oder Erhöhung timeoutInMinutes
Cannot find module Fehler Ausführen des Buildschritts für das Toolkit vor dem Ausführen von Tests

Nächste Schritte

Siehe auch