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 demvmImage
hinzu.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. Breleases/*
. ) angeben.
Pipelineeinstellungen
Sie können Pipelineeinstellungen über das Menü Weitere Aktionen auf der Seite mit den Pipelinedetails anzeigen und konfigurieren.
- Sicherheit - verwalten Sicherheit verwalten
- Umbenennen/Verschieben : Bearbeiten Sie Den Pipelinenamen und den Ordnerspeicherort.
- Status-Badge - Hinzufügen eines Status-Badges zu Ihrem Repository
- Löschen : Löscht die Pipeline, einschließlich aller Builds und zugehörigen Artefakte.
- Geplante Ausführungen - Ansicht "Geplante Ausführungen"
Wählen Sie Einstellungen aus, um die folgenden Pipelineeinstellungen zu konfigurieren.
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.- Informationen zum Abrufen von Benachrichtigungen bei fehlschlagenden Ausführungen finden Sie unter Verwalten von Benachrichtigungen für ein Team
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.
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.