Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Dieser Artikel ist eine schrittweise Anleitung zur allgemeinen Anpassung Ihrer Pipeline.
Voraussetzungen
Befolgen Sie die Anweisungen zum Erstellen Ihrer ersten Pipeline, um eine funktionierende Pipeline zu erstellen.
Tipp
Sie können KI verwenden, um diese Aufgabe zu unterstützen weiter unten in diesem Artikel, oder lesen Sie Enable AI-Unterstützung bei Azure DevOps MCP Server, um zu beginnen.
Grundlegendes zur azure-pipelines.yml-Datei
Eine Pipeline wird mithilfe einer YAML-Datei in Ihrem Repository definiert. Normalerweise trägt diese Datei den Namen azure-pipelines.yml und befindet sich im Stammverzeichnis Ihres Repositorys.
Wechseln Sie in Azure Pipelines zur Seite Pipelines, wählen Sie die von Ihnen erstellte Pipeline aus, und wählen Sie Edit im Kontextmenü der Pipeline aus, um den YAML-Editor zu öffnen.
Hinweis
Anweisungen zum Anzeigen und Verwalten Ihrer Pipelines im Azure DevOps-Portal finden Sie unter View und Verwalten Ihrer 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
Die Inhalte Ihrer YAML-Datei können je nach dem Beispiel-Repository, mit dem Sie begonnen haben, oder Aktualisierungen in Azure Pipelines variieren.
Die Pipeline wird ausgeführt, wenn Ihr Team eine Änderung an die Hauptverzweigung des Repositorys überträgt oder eine Pullanforderung erstellt. Sie wird auf einem von Microsoft gehosteten Linux-Computer ausgeführt. Der Pipelineprozess besteht aus einem einzelnen Schritt: der Ausführung der Maven-Aufgabe.
Plattform zum Bauen ändern
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 im Build die Pipeline bearbeiten-Aktion 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 zu einer anderen Plattform wie Windows oder Mac zu wechseln, ändern Sie den Wert
vmImage: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 vorgefertigtes Skript. Sie können Aufgaben zum Erstellen, Testen, Veröffentlichen oder Bereitstellen Ihrer App verwenden. Für Java haben wir den Maven-Task verwendet, der Testergebnisse und Veröffentlichungen behandelt. Sie können jedoch auch einen Task verwenden, um Codeabdeckungsergebnisse zu veröffentlichen.
Öffnen Sie den YAML-Editor für Ihre Pipeline.
Fügen Sie den folgenden Codeschnipsel am Ende Ihrer YAML-Datei hinzu.
- task: PublishCodeCoverageResults@2 inputs: summaryFileLocation: "$(System.DefaultWorkingDirectory)/**/site/jacoco/jacoco.xml" # Path to summary files reportDirectory: "$(System.DefaultWorkingDirectory)/**/site/jacoco" # Path to report directory failIfCoverageEmpty: true # Fail if code coverage results are missingWä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.
Entwickeln über mehrere Plattformen hinweg
Sie können Ihr Projekt auf mehreren Plattformen erstellen und testen.
strategy und matrix sind eine Möglichkeit dazu. 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 Image zu übergeben, das wir verwenden möchten.
Ersetzen Sie in Ihrer
azure-pipelines.yml-Datei den folgenden 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 ausführen kann.
Jeder Agent kann jeweils nur einen Auftrag ausführen. Um mehrere Aufträge parallel auszuführen, müssen Sie mehrere Agents konfigurieren. Außerdem müssen genügend Parallelaufträge vorhanden sein.
Kompilieren 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 strategy in einem Kontext nicht mehrmals verwenden.
Wenn Sie auf einer einzelnen Plattform und mehreren Versionen erstellen möchten, fügen Sie der
azure-pipelines.yml-Datei vor der Maven-Aufgabe und nach dervmImagedie folgende Matrix hinzu.strategy: matrix: jdk10: jdkVersion: "1.10" jdk11: jdkVersion: "1.11" maxParallel: 2Ersetzen Sie dann diese Zeile in Ihrer Maven-Aufgabe:
jdkVersionOption: "1.11"Mit dieser 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 Codeschnipsel: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 und bestätigen Sie dann die Änderungen, damit Ihr Build zwei Aufträge auf zwei verschiedenen Plattformen und SDKs ausführen kann.
CI-Trigger anpassen
Pipeline-Trigger verursachen, dass eine Pipeline ausgeführt wird. Sie können trigger: verwenden, um die Ausführung einer Pipeline zu veranlassen, wenn Sie ein Update per Push an einen Branch übertragen. YAML-Pipelines werden standardmäßig mit einem CI-Trigger auf Ihrem Standardbranch konfiguriert (in der Regel 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 am Anfang der
azure-pipelines.yml-Datei einen der folgenden Codeschnipsel hinzu.trigger: - main - releases/*pr: - main - releases/*Sie können den vollständigen Namen des Branchs (z. B.
main) oder eine Wildcard mit übereinstimmendem Präfix (z. B.releases/*) angeben.
Pipelineeinstellungen
Sie können Pipelineeinstellungen über das Menü Weitere Aktionen
auf der Seite mit den Pipelinedetails anzeigen und konfigurieren.
- Verwalten der Sicherheit - Verwalten der Sicherheit
-
Umbenennen/Verschieben: Bearbeiten Sie den Pipelinenamen und den Ordnerspeicherort.
- Status-Badge - Fügen Sie Ihrem Repository ein Status-Badge hinzu
- Löschen - Löscht die Pipeline, einschließlich aller Builds und zugehöriger 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, diese Anforderungen werden jedoch in die Warteschlange gestellt, ohne tatsächlich gestartet zu werden. Wenn die Verarbeitung neuer Anforderungen aktiviert ist, wird die Verarbeitung ab der ersten Anforderung in der Warteschlange fortgesetzt.
- Deaktivierte Pipelines verhindern, dass Benutzer neue Ausführungen starten. Es sind auch alle Trigger deaktiviert, solange diese Einstellung angewendet ist. Bei allen Build-Richtlinien, die eine deaktivierte Pipeline verwenden, wird im PR-Übersichtsfenster neben der Build-Richtlinie die Nachricht „Build kann nicht in die Warteschleife gestellt werden“ angezeigt, und der Status der Build-Richtlinie wird als "Fehlgeschlagen" angezeigt.
YAML-Dateipfad: Wenn Sie Ihre Pipeline jemals 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.
In dieser Ausführung enthaltene Arbeitsitems automatisch verknüpfen – Die Änderungen, die einer bestimmten Pipelineausführung zugeordnet sind, könnten mit Arbeitsitems verbunden sein. Wählen Sie diese Option aus, um diese Arbeitselemente mit der Ausführung zu verknüpfen. Wenn In dieser Ausführung enthaltene Arbeitselemente automatisch verknüpfen ausgewählt ist, müssen Sie entweder einen bestimmten Branch oder
*für alle Branches (die Standardeinstellung) angeben. Wenn Sie einen Branch angeben, werden Arbeitselemente nur mit Ausführungen dieses Branches in Verbindung gebracht. Wenn Sie*angeben, werden Arbeitselemente für alle Ausführungen zugeordnet.
- Um Benachrichtigungen zu erhalten, wenn Ausführungen fehlschlagen, erfahren Sie, wie Sie Benachrichtigungen für ein Team verwalten.
Sicherheit verwalten
Sie können die Pipelinesicherheit auf Projektebene über Weitere Aktionen
auf der Zielseite der Pipelines und auf Pipelineebene auf der Seite mit den Pipelinedetails konfigurieren.
Zur Unterstützung der Sicherheit Ihrer Pipelinevorgänge können Sie Benutzer einer integrierten Sicherheitsgruppe 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 verwalten, entweder über den Benutzer- oder Administratorkontext. Weitere Informationen zum Konfigurieren der Sicherheit von Pipelines finden Sie unter Pipelineberechtigungen und Sicherheitsrollen.
Erstellen eines Arbeitselements bei Fehlern
YAML-Pipelines verfügen, anders als klassische Buildpipelines, nicht über die Einstellung Bei Fehler Arbeitselement erstellen. Klassische Buildpipelines nutzen eine Einzelphase und die Option Bei Fehler Arbeitselement erstellen gilt für die gesamte Pipeline. YAML-Pipelines können mehrstufig sein, und Einstellungen auf der Ebene einer Pipeline sind möglicherweise nicht geeignet. So implementieren Sie Arbeitselement bei Fehlern erstellen in einer YAML-Pipeline. Sie können Methoden wie den Work Items - Create REST-API-Aufruf oder den Azure DevOps CLI az boards work-item create Befehl am gewünschten Punkt in Ihrer Pipeline verwenden.
Im nachfolgenden Beispiel sind zwei Aufträge vorhanden. Der erste Auftrag stellt die Arbeit der Pipeline dar, aber wenn er fehlschlägt, wird der zweite Auftrag ausgeführt, und es wird ein Bug im selben Projekt wie die Pipeline generiert.
# 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 Ihrer Arbeitsaufgaben 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 den einzelnen Prozessen 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 hat eine Abhängigkeit vom ersten Auftrag und wird nur ausgeführt, wenn der erste Auftrag fehlschlägt. Der zweite Auftrag verwendet den Azure DevOps CLI-Befehl az boards work-item create, um einen Bug zu erstellen. Weitere Informationen zum Ausführen von Azure DevOps CLI-Befehlen aus einer Pipeline finden Sie unter Run-Befehle in einer YAML-Pipeline.
YAML-Pipelines verfügen, anders als klassische Buildpipelines, nicht über die Einstellung Bei Fehler Arbeitselement erstellen. Klassische Buildpipelines nutzen eine Einzelphase und die Option Bei Fehler Arbeitselement erstellen gilt für die gesamte Pipeline. YAML-Pipelines können mehrstufig sein, und Einstellungen auf der Ebene einer Pipeline sind möglicherweise nicht geeignet. Zum Implementieren von Erstellen eines Arbeitselements bei Fehlern in einer YAML-Pipeline können Sie den REST-API-Aufruf Arbeitselemente – Erstellen an der gewünschten Stelle in Ihrer Pipeline verwenden.
Im nachfolgenden Beispiel sind zwei Aufträge vorhanden. Der erste Auftrag stellt die Arbeit der Pipeline dar, aber wenn er fehlschlägt, wird der zweite Auftrag ausgeführt, und es wird ein Bug im selben Projekt wie die Pipeline generiert.
# 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: |
curl \
-X POST \
-H 'Authorization: Basic $(System.AccessToken)' \
-H 'Content-Type: application/json-patch+json' \
-d '[
{
"op": "add",
"path": "/fields/System.Title",
"from": null,
"value": "git clone failed"
}
]' \
"$(System.CollectionUri)$(System.TeamProject)/_apis//wit/workitems/$Bug?api-version=7.1-preview.3
"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: 'Create work item on failure'
Hinweis
mit Azure Boards können Sie die Nachverfolgung Ihrer Arbeitsaufgaben 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 den einzelnen Prozessen 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 hat eine Abhängigkeit vom ersten Auftrag und wird nur ausgeführt, wenn der erste Auftrag fehlschlägt. Der zweite Auftrag verwendet den Azure DevOps API-Befehl az boards work-item create, um einen Bug zu erstellen.
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 Create Bug on Release failure verwenden, die Unterstützung für mehrstufige YAML-Pipelines bietet.
Verwenden von KI zum Anpassen Ihrer Pipeline
Wenn Sie den Azure DevOps MCP Server konfigurieren, erhalten Sie intelligente Empfehlungen zum Optimieren und Anpassen Ihrer Pipeline mithilfe natürlicher Sprache.
| Aufgabe | Beispielaufforderung |
|---|---|
| Optimieren von Buildzeiten | How can I speed up the build for pipeline "CI-Main" in project <Contoso>? |
| Füge Multiplattform-Erstellungen hinzu | Add a build matrix for Linux, Windows, and macOS to this pipeline in <Contoso> |
| Konfigurieren von CI-Triggern | What branch triggers should I set up for this pipeline in <Contoso>? |
| Testabdeckung hinzufügen | Add a code coverage step to this Java pipeline in <Contoso> |
| Einrichten der PR-Überprüfung | Configure pull request validation triggers for the main branch in <Contoso> |
| Hinzufügen paralleler Aufträge | How do I run build and test jobs in parallel for this pipeline in <Contoso>? |
| Verwenden von Variablengruppen | Which variable groups in <Contoso> could this pipeline reuse? |
| Hinzufügen von Bereitstellungsphasen | Add a staging deployment stage to this pipeline in <Contoso> |
| Überprüfen der Pipelinesicherheit | Are there any security best practices missing from this pipeline in <Contoso>? |
| Konfigurationen vergleichen | Compare the build settings of pipeline "CI-Main" and "CI-Feature" in <Contoso> |
Tipp
Wenn Sie Visual Studio Code verwenden, ist der Agentmodus besonders hilfreich beim Durchlaufen von Pipelineanpassungen und Testen von Konfigurationsänderungen.
Nächste Schritte
Sie haben nun die Grundlagen zur Anpassung Ihrer Pipeline kennengelernt. Als Nächstes sollten Sie mehr über das Anpassen einer Pipeline für die von Ihnen verwendete Sprache erfahren:
Damit Sie Ihre CI-Pipeline in eine CI/CD-Pipeline erweitern können, fügen Sie einen Bereitstellungsauftrag mit Schritten zum Bereitstellen Ihrer App in einer Umgebung hinzu.
Weitere Informationen zu den Themen in diesem Leitfaden 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.