Anpassen Ihrer Pipeline

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Dies ist eine schrittweise Anleitung zu gängigen Möglichkeiten zum Anpassen Ihrer Pipeline.

Voraussetzungen

Befolgen Sie die Anweisungen unter Erstellen Ihrer ersten Pipeline , um eine funktionierende Pipeline zu erstellen.

Grundlegendes zur azure-pipelines.yml Datei

Eine Pipeline wird mithilfe einer YAML-Datei in Ihrem Repository definiert. Normalerweise wird diese Datei benannt azure-pipelines.yml und befindet sich im Stammverzeichnis Ihres Repositorys.

Navigieren Sie in Azure Pipelines zur Seite Pipelines , wählen Sie die von Ihnen erstellte Pipeline aus, und wählen Sie bearbeiten im Kontextmenü der Pipeline aus, um den YAML-Editor für die Pipeline zu öffnen.

Hinweis

Anweisungen zum Anzeigen und Verwalten Ihrer Pipelines im Azure DevOps-Portal finden Sie unter Navigieren in Pipelines.

Untersuchen Sie den Inhalt der YAML-Datei.

 trigger:
 - main

 pool:
   vmImage: 'ubuntu-latest'

 steps:
 - task: Maven@4
   inputs:
     mavenPomFile: 'pom.xml'
     mavenOptions: '-Xmx3072m'
     javaHomeOption: 'JDKVersion'
     jdkVersionOption: '1.11'
     jdkArchitectureOption: 'x64'
     publishJUnitResults: false
     testResultsFiles: '**/surefire-reports/TEST-*.xml'
     goals: 'package'

Hinweis

Der Inhalt Ihrer YAML-Datei kann je nach dem Beispielrepository, mit dem Sie begonnen haben, oder von Upgrades in Azure Pipelines abweichen.

Diese Pipeline wird immer ausgeführt, wenn Ihr Team eine Änderung an den Hauptbranch Ihres Repositorys pusht oder einen Pull Request erstellt. Sie wird auf einem von Microsoft gehosteten Linux-Computer ausgeführt. Der Pipelineprozess verfügt über einen einzelnen Schritt, nämlich das Ausführen der Maven-Aufgabe.

Ändern der Plattform für die Erstellung

Sie können Ihr Projekt auf von Microsoft gehosteten Agents erstellen, die bereits SDKs und Tools für verschiedene Entwicklungssprachen enthalten. Oder Sie können selbstgehostete Agents mit bestimmten Tools verwenden, die Sie benötigen.

  • Navigieren Sie zum Editor für Ihre Pipeline, indem Sie die Pipelineaktion bearbeiten im Build auswählen oder auf der Hauptseite der Pipeline Bearbeiten auswählen.

  • Derzeit wird die Pipeline auf einem Linux-Agent ausgeführt:

    pool:
      vmImage: "ubuntu-latest"
    
  • Um eine andere Plattform wie Windows oder Mac auszuwählen, ändern Sie den vmImage Wert:

    pool:
      vmImage: "windows-latest"
    
    pool:
      vmImage: "macos-latest"
    
  • Wählen Sie Speichern aus, und bestätigen Sie dann die Änderungen, damit Ihre Pipeline auf einer anderen Plattform ausgeführt wird.

Schritte hinzufügen

Sie können Ihrer Pipeline weitere Skripts oder Aufgaben als Schritte hinzufügen. Eine Aufgabe ist ein vordefiniertes Skript. Sie können Aufgaben zum Erstellen, Testen, Veröffentlichen oder Bereitstellen Ihrer App verwenden. Für Java verarbeitet die maven-Aufgabe, die wir verwendet haben, Test- und Veröffentlichungsergebnisse. Sie können jedoch auch eine Aufgabe zum Veröffentlichen von Code Coverage-Ergebnissen verwenden.

  • Öffnen Sie den YAML-Editor für Ihre Pipeline.

  • Fügen Sie den folgenden Codeausschnitt am Ende Ihrer YAML-Datei hinzu.

    - task: PublishCodeCoverageResults@1
      inputs:
        codeCoverageTool: "JaCoCo"
        summaryFileLocation: "$(System.DefaultWorkingDirectory)/**/site/jacoco/jacoco.xml"
        reportDirectory: "$(System.DefaultWorkingDirectory)/**/site/jacoco"
        failIfCoverageEmpty: true
    
  • Wählen Sie Speichern aus, und bestätigen Sie dann die Änderungen.

  • Sie können Ihre Test- und Code coverage-Ergebnisse anzeigen, indem Sie Ihren Build auswählen und zu den Registerkarten Test und Coverage wechseln.

Plattformübergreifendes Erstellen

Sie können Ihr Projekt auf mehreren Plattformen erstellen und testen. Eine Möglichkeit, dies zu tun, ist mit strategy und matrix. Sie können Variablen verwenden, um Daten bequem in verschiedene Teile einer Pipeline einzufügen. In diesem Beispiel verwenden wir eine Variable, um den Namen des zu verwendenden Images zu übergeben.

  • Ersetzen Sie in Ihrer azure-pipelines.yml Datei diesen Inhalt:

    pool:
      vmImage: "ubuntu-latest"
    

    mit folgendem Inhalt:

    strategy:
      matrix:
        linux:
          imageName: "ubuntu-latest"
        mac:
          imageName: "macOS-latest"
        windows:
          imageName: "windows-latest"
      maxParallel: 3
    
    pool:
      vmImage: $(imageName)
    
  • Wählen Sie Speichern aus, und bestätigen Sie dann die Änderungen, damit Ihr Build bis zu drei Aufträge auf drei verschiedenen Plattformen ausgeführt wird.

Jeder Agent kann jeweils nur einen Auftrag ausführen. Um mehrere Aufträge parallel auszuführen, müssen Sie mehrere Agents konfigurieren. Außerdem benötigen Sie genügend parallele Aufträge.

Erstellen mit mehreren Versionen

Um ein Projekt mit verschiedenen Versionen dieser Sprache zu erstellen, können Sie eine matrix der Versionen und eine Variable verwenden. In diesem Schritt können Sie entweder das Java-Projekt mit zwei verschiedenen Versionen von Java auf einer einzelnen Plattform erstellen oder verschiedene Versionen von Java auf verschiedenen Plattformen ausführen.

Hinweis

Sie können in einem Kontext nicht mehrmals verwenden strategy .

  • Wenn Sie auf einer einzelnen Plattform und mehreren Versionen erstellen möchten, fügen Sie der azure-pipelines.yml Datei die folgende Matrix vor dem Maven-Task und nach dem vmImagehinzu.

    strategy:
      matrix:
        jdk10:
          jdkVersion: "1.10"
        jdk11:
          jdkVersion: "1.11"
      maxParallel: 2
    
  • Ersetzen Sie dann diese Zeile in Ihrer Maven-Aufgabe:

    jdkVersionOption: "1.11"
    

    Durch diese Zeile:

    jdkVersionOption: $(jdkVersion)
    
  • Stellen Sie sicher, dass Sie die $(imageName) Variable wieder auf die Plattform Ihrer Wahl ändern.

  • Wenn Sie auf mehreren Plattformen und Versionen erstellen möchten, ersetzen Sie den gesamten Inhalt in Ihrer azure-pipelines.yml Datei vor der Veröffentlichungsaufgabe durch den folgenden Codeausschnitt:

    trigger:
    - main
    
    strategy:
      matrix:
        jdk10_linux:
          imageName: "ubuntu-latest"
          jdkVersion: "1.10"
        jdk11_windows:
          imageName: "windows-latest"
          jdkVersion: "1.11"
      maxParallel: 2
    
    pool:
      vmImage: $(imageName)
    
    steps:
    - task: Maven@4
      inputs:
        mavenPomFile: "pom.xml"
        mavenOptions: "-Xmx3072m"
        javaHomeOption: "JDKVersion"
        jdkVersionOption: $(jdkVersion)
        jdkArchitectureOption: "x64"
        publishJUnitResults: true
        testResultsFiles: "**/TEST-*.xml"
        goals: "package"
    
  • Wählen Sie Speichern aus, und bestätigen Sie dann die Änderungen, damit Ihr Build zwei Aufträge auf zwei verschiedenen Plattformen und SDKs ausgeführt hat.

Anpassen von CI-Triggern

Pipelinetrigger führen dazu, dass eine Pipeline ausgeführt wird. Sie können verwenden trigger: , um zu bewirken, dass eine Pipeline ausgeführt wird, wenn Sie ein Update an einen Branch pushen. YAML-Pipelines werden standardmäßig mit einem CI-Trigger in Ihrem Standardbranch konfiguriert (normalerweise main). Sie können Trigger für bestimmte Branches oder für die Pull Request-Validierung einrichten. Ersetzen Sie für einen Pull Request-Validierungstrigger einfach den trigger: Schritt durch pr: , wie in den beiden folgenden Beispielen gezeigt. Standardmäßig wird die Pipeline für jede Pull Request-Änderung ausgeführt.

  • Wenn Sie Trigger einrichten möchten, fügen Sie einen der folgenden Codeausschnitte am Anfang Ihrer azure-pipelines.yml Datei hinzu.

    trigger:
      - main
      - releases/*
    
    pr:
      - main
      - releases/*
    

    Sie können den vollständigen Namen des Branchs (z. B. main) oder einen Präfixabgleichsplatz (z. B releases/*. ) angeben.

Pipelineeinstellungen

Sie können Pipelineeinstellungen über das Menü Weitere Aktionen auf der Seite mit den Pipelinedetails anzeigen und konfigurieren.

Screenshot: Menü

Wählen Sie Einstellungen aus, um die folgenden Pipelineeinstellungen zu konfigurieren.

Screenshot der Seite

Im Bereich Pipelineeinstellungen können Sie die folgenden Einstellungen konfigurieren.

  • Verarbeitung neuer Ausführungsanforderungen : Manchmal möchten Sie verhindern, dass neue Ausführungen in Ihrer Pipeline gestartet werden.

    • Standardmäßig ist die Verarbeitung neuer Ausführungsanforderungen aktiviert. Diese Einstellung ermöglicht die Standardverarbeitung aller Triggertypen, einschließlich manueller Ausführungen.
    • Angehaltene Pipelines ermöglichen die Verarbeitung von Ausführungsanforderungen, aber diese Anforderungen werden in die Warteschlange gestellt, ohne tatsächlich zu starten. Wenn die Verarbeitung neuer Anforderungen aktiviert ist, führen Sie Verarbeitungsläufe ab der ersten Anforderung in der Warteschlange aus.
    • Deaktivierte Pipelines verhindern, dass Benutzer neue Ausführungen starten. Alle Trigger sind auch deaktiviert, während diese Einstellung angewendet wird.
  • YAML-Dateipfad : Wenn Sie Ihre Pipeline anweisen müssen, eine andere YAML-Datei zu verwenden, können Sie den Pfad zu dieser Datei angeben. Diese Einstellung kann auch nützlich sein, wenn Sie Ihre YAML-Datei verschieben/umbenennen müssen.

  • Automatisches Verknüpfen von Arbeitselementen, die in dieser Ausführung enthalten sind : Die Änderungen, die einer bestimmten Pipelineausführung zugeordnet sind, sind möglicherweise Arbeitselemente zugeordnet. Wählen Sie diese Option aus, um diese Arbeitselemente mit der Ausführung zu verknüpfen. Wenn die Option Arbeitselemente, die in dieser Ausführung enthalten sind, automatisch verknüpfen ausgewählt ist, müssen Sie entweder einen bestimmten Branch oder * für alle Branches angeben, was der Standard ist. Wenn Sie einen Branch angeben, werden Arbeitselemente nur Ausführungen dieses Branchs zugeordnet. Wenn Sie angeben *, sind Arbeitselemente für alle Ausführungen zugeordnet.

    Screenshot: Einstellung zum automatischen Verknüpfen von Arbeitselementen, die in dieser Ausführung enthalten sind

Sicherheit verwalten

Sie können die Pipelinesicherheit auf Projektebene über die Zielseite Weitere Aktionen auf der Zielseite für Pipelines und auf Pipelineebene auf der Seite mit den Pipelinedetails konfigurieren.

Screenshot: Menüoptionen für die Pipelinesicherheit

Um die Sicherheit Ihrer Pipelinevorgänge zu unterstützen, können Sie einer integrierten Sicherheitsgruppe Benutzer hinzufügen, individuelle Berechtigungen für einen Benutzer oder eine Gruppe festlegen oder Benutzer vordefinierten Rollen hinzufügen. Sie können die Sicherheit für Azure Pipelines im Webportal entweder über den Benutzer- oder Administratorkontext verwalten. Weitere Informationen zum Konfigurieren der Pipelinesicherheit finden Sie unter Pipelineberechtigungen und Sicherheitsrollen.

Erstellen eines Arbeitselements bei Einem Fehler

YAML-Pipelines verfügen nicht über die Einstellung Arbeitselement bei Fehlern erstellen wie klassische Buildpipelines. Klassische Buildpipelines sind einstufige Pipelines, und Arbeitselement bei Fehler erstellen gilt für die gesamte Pipeline. YAML-Pipelines können mehrstufige Pipelines sein, und eine Einstellung auf Pipelineebene ist möglicherweise nicht geeignet. Zum Implementieren von Create work item on failure in einer YAML-Pipeline können Sie Methoden wie den Rest-API-Aufruf Work Items – Create oder den Azure DevOps CLI-Befehl az boards work-item create am gewünschten Punkt in Ihrer Pipeline verwenden.

Das folgende Beispiel enthält zwei Aufträge. Der erste Auftrag stellt die Arbeit der Pipeline dar, aber wenn er fehlschlägt, wird der zweite Auftrag ausgeführt und erstellt einen Fehler im selben Projekt wie die Pipeline.

# When manually running the pipeline, you can select whether it
# succeeds or fails.
parameters:
- name: succeed
  displayName: Succeed or fail
  type: boolean
  default: false

trigger:
- main

pool:
  vmImage: ubuntu-latest

jobs:
- job: Work
  steps:
  - script: echo Hello, world!
    displayName: 'Run a one-line script'

  # This malformed command causes the job to fail
  # Only run this command if the succeed variable is set to false
  - script: git clone malformed input
    condition: eq(${{ parameters.succeed }}, false)

# This job creates a work item, and only runs if the previous job failed
- job: ErrorHandler
  dependsOn: Work
  condition: failed()
  steps: 
  - bash: |
      az boards work-item create \
        --title "Build $(build.buildNumber) failed" \
        --type bug \
        --org $(System.TeamFoundationCollectionUri) \
        --project $(System.TeamProject)
    env: 
      AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
    displayName: 'Create work item on failure'

Hinweis

mit Azure Boards können Sie Die Nachverfolgung von Arbeitselementen mithilfe verschiedener Prozesse konfigurieren, z. B. Agile oder Basic. Jeder Prozess verfügt über unterschiedliche Arbeitselementtypen, und nicht jeder Arbeitselementtyp ist in jedem Prozess verfügbar. Eine Liste der Arbeitselementtypen, die von jedem Prozess unterstützt werden, finden Sie unter Arbeitselementtypen (WITs).

Im vorherigen Beispiel werden Laufzeitparameter verwendet, um zu konfigurieren, ob die Pipeline erfolgreich ist oder fehlschlägt. Beim manuellen Ausführen der Pipeline können Sie den Wert des succeed Parameters festlegen. Der zweite script Schritt im ersten Auftrag der Pipeline wertet den succeed Parameter aus und wird nur ausgeführt, wenn succeed auf false festgelegt ist.

Der zweite Auftrag in der Pipeline ist vom ersten Auftrag abhängig und wird nur ausgeführt, wenn der erste Auftrag fehlschlägt. Der zweite Auftrag verwendet den Befehl azure DevOps CLI az boards work-item create , um einen Fehler zu erstellen. Weitere Informationen zum Ausführen von Azure DevOps-CLI-Befehlen aus einer Pipeline finden Sie unter Ausführen von Befehlen in einer YAML-Pipeline.

In diesem Beispiel werden zwei Aufträge verwendet, aber dieser Ansatz kann über mehrere Phasen hinweg verwendet werden.

Hinweis

Sie können auch eine Marketplace-Erweiterung wie "Fehler beim Release erstellen" verwenden, die Unterstützung für mehrstufige YAML-Pipelines aufweist.

Nächste Schritte

Sie haben die Grundlagen der Anpassung Ihrer Pipeline kennengelernt. Als Nächstes wird empfohlen, mehr über das Anpassen einer Pipeline für die von Ihnen verwendete Sprache zu erfahren:

Oder fügen Sie einen Bereitstellungsauftrag mit Schritten zum Bereitstellen Ihrer App in einer Umgebung ein, um Ihre CI-Pipeline zu einer CI/CD-Pipeline zu erweitern.

Weitere Informationen zu den Themen in diesem Handbuch finden Sie unter Aufträge, Aufgaben, Aufgabenkatalog, Variablen, Trigger oder Problembehandlung.

Informationen zu weiteren Möglichkeiten in YAML-Pipelines finden Sie in der YAML-Schemareferenz.