Entwickeln, Testen und Bereitstellen von .NET Core-Apps
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Verwenden Sie eine Azure Pipeline, um Ihre .NET Core-Projekte automatisch zu erstellen, zu testen und bereitzustellen. In diesem Artikel wird gezeigt, wie Sie Folgendes durchführen:
- Richten Sie Ihre Build-Umgebung mit selbst gehosteten Agenten ein.
- Stellen Sie Abhängigkeiten wieder her, erstellen Sie Ihr Projekt, und testen Sie es mit der .NET Core-Aufgabe (DotNetCoreCLI@2) oder einem Skript.
- Testen Sie Ihren Code, und verwenden Sie die Aufgabe Codeabdeckung veröffentlichen, um die Ergebnisse der Codeabdeckung zu veröffentlichen.
- Verpacken Sie Ihre Build-Ausgabe, und übergeben Sie sie an:
- Ihre Pipeline
- einen NuGet-Feed
- eine
.zip
-Datei zum Bereitstellen einer Web-App auf Azure
- Einrichten Ihrer Buildumgebung mit von Microsoft gehosteten oder selbstgehosteten Agents
- Stellen Sie Abhängigkeiten wieder her, erstellen Sie Ihr Projekt, und testen Sie es mit der .NET Core-Aufgabe (DotNetCoreCLI@2) oder einem Skript.
- Testen Sie Ihren Code, und verwenden Sie die Aufgabe Codeabdeckung veröffentlichen, um die Ergebnisse der Codeabdeckung zu veröffentlichen.
- Verpacken Sie Ihre Build-Ausgabe, und übergeben Sie sie an:
- Ihre Pipeline
- einen NuGet-Feed
- eine
.zip
-Datei zum Bereitstellen einer Web-App auf Azure
Hinweis
Hilfe zu .NET Framework-Projekten finden Sie unter Erstellen von ASP.NET-Apps mit .NET Framework.
Voraussetzungen
- Ein GitHub-Konto, in dem Sie ein Repository erstellen können. Erstellen Sie ein kostenloses Konto.
- Eine Azure DevOps-Organisation und ein entsprechendes Projekt. Erstellen Sie ein kostenloses Konto.
- Möglichkeit zum Ausführen von Pipelines auf von Microsoft gehosteten Agents. Sie können entweder einen Parallelauftrag erwerben oder einen Free-Tarif anfordern.
- Ein GitHub-Konto, in dem Sie ein Repository erstellen können. Erstellen Sie ein kostenloses Konto.
- Eine Azure DevOps Sammlung
- Die Möglichkeit, Pipelines auf einem selbst gehosteten Agenten auszuführen, auf dessen Host Docker installiert ist und ausgeführt wird.
Erstellen Ihrer ersten Pipeline
Sie sind mit Azure Pipelines noch nicht vertraut? In diesem Fall sollten Sie zuerst den folgenden Abschnitt ausprobieren.
Erstellen eines .NET-Projekts.
Wenn Sie noch kein .NET-Projekt haben, mit dem Sie arbeiten können, erstellen Sie ein neues auf Ihrem lokalen System. Installieren Sie zunächst das neueste .NET 8.0 SDK .
Öffnen Sie ein Terminalfenster.
Erstellen Sie ein Projektverzeichnis, und wechseln Sie zu diesem Verzeichnis.
Erstellen Sie eine neue .NET 8-Webapp.
dotnet new webapp -f net8.0
Führen Sie in derselben Terminalsitzung die Anwendung lokal aus, indem Sie den
dotnet run
Befehl aus Ihrem Projektverzeichnis verwenden.dotnet run
Sobald die Anwendung gestartet ist, drücken Sie STRG-C, um sie zu beenden.
Erstellen Sie ein Git-Repo, und verbinden Sie es mit GitHub
Erstellen Sie aus dem Projektverzeichnis ein lokales Git-Repository und committen Sie den Anwendungscode zum Mainbranch.
Verbinden Sie Ihr lokales Git-Repository mit einem GitHub-Repository.
Erstellen eines DevOps-Projekts
Melden Sie sich bei Azure Pipelines an. Nach der Anmeldung wechselt Ihr Browser zu https://dev.azure.com/my-organization-name
und zeigt Ihr Azure DevOps-Dashboard an.
- Gehen Sie in einem Browser zu dev.azure.com, und melden Sie sich an.
- Wählen Sie Ihre Organisation aus.
- Erstellen Sie ein neues Projekt, indem Sie Neues Projekt oder Projekt erstellen wählen, wenn Sie das erste Projekt in der Organisation erstellen.
- Geben Sie einen Projektnamen ein.
- Wählen Sie die Sichtbarkeit für Ihr Projekt.
- Klicken Sie auf Erstellen.
- Gehen Sie in einem Browser zu Ihrem Azure DevOps-Server.
- Wählen Sie Ihre Sammlung.
- Erstellen Sie ein neues Projekt, indem Sie Neues Projekt oder Projekt erstellen wählen, wenn Sie das erste Projekt in der Sammlung erstellen.
- Geben Sie einen Projektnamen ein.
- Wählen Sie die Sichtbarkeit für Ihr Projekt.
- Klicken Sie auf Erstellen.
- Melden Sie sich in einem Browserfenster bei Ihrem Azure DevOps-Server an, und wählen Sie Ihre Sammlung aus.
- Wählen Sie Neues Projekt aus.
- Geben Sie einen Projektnamen ein.
- Geben Sie optional eine Beschreibung ein.
- Klicken Sie auf Erstellen.
Einrichten Ihrer Build-Umgebung
Ihre Builds werden auf selbst gehosteten Agenten ausgeführt. Stellen Sie sicher, dass Sie die erforderliche Version des .NET Core SDKs und der Runtime auf den Agenten installiert haben. Sie können Ihre .NET Core-Projekte unter Verwendung des .NET Core SDKs und der Runtime auf Windows, Linux, macOS und Docker ausführen.
Sie können eine bestimmte Version des .NET SDKs installieren, indem Sie die Aufgabe UseDotNet@2 in Ihrer Pipeline-YAML-Datei hinzufügen oder die Aufgabe mit dem klassischen Editor in Ihre Pipeline einfügen.
Beispiel YAML-Code-Ausschnitt:
steps:
- task: UseDotNet@2
inputs:
version: '8.x'
Ihre Builds werden auf von Microsoft gehosteten Agenten ausgeführt. Sie können Ihre .NET Core-Projekte mit dem .NET Core SDK und der Runtime auf Windows, Linux und macOS ausführen.
Alternativ können Sie auch einen selbst gehosteten Agenten verwenden. Mit einem selbst gehosteten Agenten können Sie Vorschau- oder private SDKs verwenden, die nicht offiziell von Azure DevOps Services unterstützt werden, und inkrementelle Builds ausführen.
Erstellen Ihrer Pipeline
Sie können den YAML-Pipeline-Editor oder den klassischen Editor verwenden, um Ihre Pipeline zu erstellen. Um den klassischen Editor zu verwenden, wählen Sie Klassischen Editor verwenden aus.
Erstellen einer neuen Pipeline und Auswahl Ihrer Quelle
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie zu Ihrem Projekt.
Gehen Sie zu Pipelines und wählen Sie dann Neue Pipeline aus oder Pipeline erstellen, wenn Sie Ihre erste Pipeline erstellen.
Führen Sie die Schritte des Assistenten aus. Dabei wählen Sie zuerst GitHub als Speicherort Ihres Quellcodes aus.
Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.
Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.
Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wählen Sie in diesem Fall Genehmigen & installieren aus.
Ihre Pipeline konfigurieren
Wenn die Registerkarte Konfigurieren erscheint, wählen Sie Mehr anzeigen und dann die ASP.NET Core Pipeline-Vorlage aus der Liste aus.
Untersuchen Sie Ihre neue Pipeline, um zu sehen, welche Aktionen YAML ausführt.
Sie können die YAML-Datei an Ihre Anforderungen anpassen. Sie können zum Beispiel den Agentenpool angeben oder eine Aufgabe zur Installation eines anderen .NET SDKs hinzufügen.
Speichern und Ausführen Ihrer Pipeline
Wenn Sie so weit sind, wählen Sie Speichern und ausführen aus.
Optional können Sie die Commit-Nachricht bearbeiten.
Committen Sie die neue Datei azure-pipelines.yml in Ihr Repository, indem Sie Speichern und ausführen auswählen.
Um Ihre Pipeline in Aktion zu sehen, wählen Sie den Job im Bereich Jobs aus.
Erstellen und Ausführen Ihrer Pipeline
Sie können eine Pipeline mit dem YAML-Pipeline-Editor oder mit dem klassischen Editor erstellen.
- Gehen Sie zu Ihrem Projekt, und wählen Sie Pipelines aus.
- Wählen Sie Pipeline erstellen oder Neue Pipeline aus, wenn Sie die erste Pipeline für dieses Projekt erstellen.
Auswählen Ihrer Quelle
Wählen Sie Ihr Quell-Repository aus. In diesem Beispiel verwenden Sie GitHub Enterprise Server.
- Geben Sie die URL für Ihr GitHub-Konto ein. Beispiel:
https://github.com/<username>
. - Geben Sie Ihr persönliches Token für den Zugriff auf Ihr GitHub-Konto ein.
- Geben Sie den Namen einer Dienst-Verbindung ein. Beispiel:
my-github
. - Klicken Sie auf Erstellen.
- Geben Sie die URL für Ihr GitHub-Konto ein. Beispiel:
Wählen Sie Ihr GitHub-Repository aus.
Ihre Pipeline konfigurieren
Wählen Sie auf der Registerkarte Konfigurieren die Option Mehr anzeigen und dann die ASP.NET Core Pipeline-Vorlage aus der Liste aus.
Untersuchen Sie Ihre neue Pipeline, um zu sehen, welche Aktionen YAML ausführt.
Sie können die YAML-Datei an Ihre Anforderungen anpassen. Sie können zum Beispiel Aufgaben zur Installation eines .NET SDKs oder zum Testen und Veröffentlichen Ihres Projekts hinzufügen.
Speichern und Ausführen Ihrer Pipeline
Wählen Sie Speichern.
Um die Pipeline-YAML-Datei in Ihr Repository zu committen, bearbeiten Sie die Commit-Nachricht nach Bedarf, und wählen Sie Speichern aus.
Wählen Sie Ausführen aus, um Ihre Pipeline auszuführen.
Um die Protokolldateien zu sehen, während Ihre Pipeline ausgeführt wird, wählen Sie die Build-Nummer oben auf der Seite aus.
Klicken Sie auf Speichern und ausführen.
Um die neue Datei azure-pipelines.yml in Ihr Repository zu übertragen, bearbeiten Sie die Commit-Nachricht nach Bedarf, und wählen Sie Speichern und ausführen aus.
Um Ihre Pipeline in Aktion zu sehen, wählen Sie den Job im Bereich Jobs aus.
Sie verfügen jetzt über eine funktionierende Pipeline, die Sie anpassen können. Lesen Sie weiter, um einige der üblichen Möglichkeiten zur Anpassung Ihrer Pipeline kennenzulernen.
Buildumgebung
Azure Pipelines verwendet selbst gehostete Agenten, um Ihre .NET Core-Projekte auszuführen. Stellen Sie sicher, dass Sie die erforderliche Version des .NET Core SDKs und der Runtime auf den Agenten installiert haben. Sie können Ihre .NET Core-Projekte unter Verwendung des .NET Core SDKs und der Runtime auf Windows, Linux, macOS und Docker ausführen.
Ein Beispiel: So wählen Sie einen Pool und die Funktionalitäten der Agenten in der YAML-Datei der Pipeline aus:
Sie können den Agentenpool und den Agenten für Ihren Build-Job auswählen. Agenten werden auf der Grundlage ihrer Funktionalitäten festgelegt.
pool:
name: myPrivateAgents
demands:
- agent.os -equals Darwin
- anotherCapability -equals somethingElse
Sie können eine bestimmte Version des .NET SDKs installieren, indem Sie die Aufgabe UseDotNet@2 in Ihrer Pipeline hinzufügen. Denken Sie daran, dass sich bei Agenten, die auf physischen Systemen ausgeführt werden, durch die Installation von SDKs und Tools über Ihre Pipeline die Build-Umgebung auf dem Host des Agenten ändert.
Um ein neueres SDK zu installieren, legen Sie performMultiLevelLookup
im folgenden Codeschnipsel auf true
fest:
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
version: 8.x
performMultiLevelLookup: true
includePreviewVersions: true # Required for preview versions
Sie können Azure Pipelines verwenden, um Ihre .NET Core-Projekte auf Windows, Linux oder macOS auszuführen, ohne eine Infrastruktur festlegen zu müssen.
Zum Beispiel ist Ubuntu hier in der Pipeline YAML-Datei festgelegt.
pool:
vmImage: 'ubuntu-latest'
Unter Von Microsoft gehostete Agenten finden Sie eine vollständige Liste der Images und weitere Konfigurationsbeispiele.
Die von Microsoft gehosteten Agenten in Azure Pipelines enthalten mehrere vorinstallierte Versionen der unterstützten .NET Core SDKs. Die von Microsoft gehosteten Agenten enthalten einige der älteren Versionen des .NET Core SDKs nicht. Außerdem enthalten sie in der Regel keine Vorabversionen. Wenn Sie diese SDK-Versionen auf von Microsoft gehosteten Agenten benötigen, installieren Sie sie mit der Aufgabe UseDotNet@2.
Um zum Beispiel das 5.0.x-SDK zu installieren, fügen Sie den folgenden Code-Ausschnitt ein:
steps:
- task: UseDotNet@2
inputs:
version: '5.x'
Windows-Agents enthalten bereits eine .NET Core-Runtime. Um ein neueres SDK zu installieren, legen Sie performMultiLevelLookup
im folgenden Codeschnipsel auf true
fest:
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
version: 8.x
performMultiLevelLookup: true
includePreviewVersions: true # Required for preview versions
Tipp
Um die Kosten für die Ausführung des Toolinstallationsprogramms zu sparen, können Sie einen selbst gehosteten Linux-, macOS- oder Windows-Agent einrichten. Sie können selbstgehostete Agents auch verwenden, um zusätzlich Zeit zu sparen, wenn Sie über ein großes Repository verfügen oder inkrementelle Builds ausführen. Ein selbst gehosteter Agent kann Ihnen auch bei der Verwendung der Vorschau- oder privaten SDKs helfen, die nicht offiziell von Azure DevOps unterstützt werden oder nur in Ihren Unternehmens- oder on-premises Umgebungen verfügbar sind.
Wiederherstellen von Abhängigkeiten
NuGet ist eine beliebte Methode zum Herstellen einer Abhängigkeit von Code, den Sie nicht erstellen. Sie können NuGet-Pakete und projektspezifische Tools herunterladen, die in der Projektdatei angegeben sind, indem Sie den Befehl dotnet restore
entweder über die .NET Core-Aufgabe oder direkt in einem Skript in Ihrer Pipeline ausführen. Weitere Informationen finden Sie unter .NET Core-Aufgabe (DotNetCoreCLI@2).
Sie können NuGet-Pakete auch aus Azure Artifacts, NuGet.org oder einem anderen externen oder internen NuGet-Repository herunterladen. Die .NET Core-Aufgabe ist besonders nützlich, um Pakete aus authentifizierten NuGet-Feeds wiederherzustellen. Wenn sich Ihr Feed in demselben Projekt wie Ihre Pipeline befindet, müssen Sie sich nicht authentifizieren.
Diese Pipeline verwendet einen Azure Artifact-Feed für dotnet restore
in der DotNetCoreCLI@2 Aufgabe.
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
version: 8.x
performMultiLevelLookup: true
includePreviewVersions: true # Required for preview versions
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
feedsToUse: 'select'
vstsFeed: 'my-vsts-feed' # A series of numbers and letters
- task: DotNetCoreCLI@2
inputs:
command: 'build'
arguments: '--configuration $(buildConfiguration)'
displayName: 'dotnet build $(buildConfiguration)'
Der Befehl dotnet restore
verwendet das mit dem .NET Core SDK verpackte NuGet.exe
und kann nur Pakete wiederherstellen, die in den .csproj
-Dateien des .NET Core-Projekts angegeben sind.
Wenn Sie auch ein Microsoft .NET Framework-Projekt in Ihrer Projektmappe haben oder package.json
zum Angeben Ihrer Abhängigkeiten nutzen, verwenden Sie die NuGet-Aufgabe, um diese Abhängigkeiten wiederherzustellen.
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'select'
In .NET Core SDK Version 2.0 und neuer werden die Pakete automatisch wiederhergestellt, wenn Sie Befehle wie dotnet build
ausführen. Sie müssen jedoch weiterhin die Aufgabe .NET Core verwenden, um Pakete wiederherzustellen, wenn Sie einen authentifizierten Feed verwenden.
Ihre Builds können aufgrund von Verbindungsproblemen fehlschlagen, wenn Sie Pakete von NuGet.org wiederherstellen. Sie können Azure Artifacts mit Upstream-Quellen verwenden, um die Pakete zwischenzuspeichern. Die Anmeldedaten der Pipeline werden beim Herstellen einer Verbindung mit Azure Artifacts automatisch verwendet. Diese Anmeldeinformationen werden in der Regel vom Projektsammlungs-Builddienst-Konto abgeleitet. Um mehr über die Verwendung von Azure Artifacts zum Zwischenspeichern Ihrer NuGet-Pakete zu erfahren, lesen Sie Verbindung zu Azure Artifact-Feeds.
Um ein NuGet-Repository anzugeben, geben Sie die URL in einer NuGet.config
-Datei in Ihrem Repository an. Wenn Ihr Feed authentifiziert ist, verwalten Sie die zugehörigen Anmeldeinformationen, indem Sie eine NuGet-Dienstverbindung auf der Registerkarte Dienste unter Projekteinstellungen erstellen.
Wenn Sie von Microsoft gehostete Agenten verwenden, erhalten Sie bei jedem Ausführen eines Builds eine neue Maschine, die die Pakete bei jeder Ausführung wiederherstellt. Die Wiederherstellung kann sehr lange dauern. Zur Entschärfung können Sie entweder Azure Artifacts oder einen selbstgehosteten Agent verwenden, um von der Verwendung des Paketcache zu profitieren.
Weitere Informationen zu NuGet-Dienstverbindungen finden Sie unter Veröffentlichen in NuGet-Feeds.
Pakete aus einem externen Feed wiederherstellen
Gehen Sie wie folgt vor, um Pakete aus einem externen Feed wiederherzustellen.
Sie können den Wiederherstellungsbefehl mit dem YAML-Pipeline-Editor zu Ihrer Pipeline hinzufügen, indem Sie den folgenden Code-Ausschnitt direkt in Ihre azure-pipelines.yml
-Datei einfügen oder den Aufgabenassistenten verwenden, um die .NET Core-Aufgabe hinzuzufügen.
# do this before your build tasks
steps:
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: restore
projects: '**/*.csproj'
feedsToUse: config
nugetConfigPath: NuGet.config # Relative to root of the repository
externalFeedCredentials: <Name of the NuGet service connection>
Ersetzen Sie den <Platzhalter> durch den Namen Ihrer Dienst-Verbindung.
So verwenden Sie den Aufgabenassistenten:
Um eine Build-Aufgabe mit Hilfe des Aufgabenassistenten hinzuzufügen, gehen Sie wie folgt vor:
Gehen Sie zu der Stelle in der YAML-Datei, an der Sie die Aufgabe einfügen möchten.
Wählen Sie .NET Core aus dem Aufgabenkatalog aus.
Wählen Sie den Befehl Wiederherstellen aus der Dropdown-Liste Befehl aus.
Geben Sie in das Feld Pfad zu Projekt(en) den Pfad zu Ihren
.csproj
-Dateien ein.Wählen Sie Hinzufügen.
Wählen Sie Speichern, um die Änderung zu committen.
Hinweis
Stellen Sie sicher, dass der benutzerdefinierte Feed in Ihrer NuGet.config
-Datei angegeben ist und dass Anmeldeinformationen in der NuGet-Dienstverbindung angegeben sind.
Erstellen Ihres Projekts
Führen Sie Ihre .NET Core-Projekte mit dem Befehl dotnet build
aus. Sie können den Befehl als Kommandozeilen-Skript zu Ihrer Pipeline hinzufügen oder die .NET Core-Aufgabe verwenden.
.NET Core-Build mit der .NET Core-Aufgabe ausführen
YAML-Beispiel zum Ausführen eines Builds mit der Aufgabe DotNetCoreCLI@2:
steps:
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)' # Update this to match your needs
Sie können eine Build-Aufgabe mit dem YAML-Pipeline-Editor hinzufügen, indem Sie die Datei direkt bearbeiten oder die Aufgabe .NET Core mit Hilfe des Aufgabenassistenten hinzufügen.
Um eine Build-Aufgabe mit Hilfe des Aufgabenassistenten hinzuzufügen, gehen Sie wie folgt vor:
Gehen Sie zu der Stelle in der YAML-Datei, an der Sie die Aufgabe einfügen möchten.
Wählen Sie .NET Core aus dem Aufgabenkatalog aus.
Wählen Sie den Befehl Build aus der Dropdown-Liste Befehl aus.
Geben Sie in das Feld Pfad zu Projekt(en) den Pfad zu Ihren
.csproj
-Dateien ein.Wählen Sie Hinzufügen.
Wählen Sie Speichern, um die Änderung zu committen.
.NET Core-Build mit einem Kommandozeilen-Skript ausführen
YAML-Beispiel zum Ausführen eines Builds mit dotnet build
als Skript:
steps:
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
Sie können eine Build-Aufgabe mit dem YAML-Pipeline-Editor hinzufügen, indem Sie die Datei direkt bearbeiten oder die Aufgabe Befehlszeile hinzufügen.
Gehen Sie wie folgt vor, um die Aufgabe Befehlszeile hinzuzufügen:
Gehen Sie zu der Stelle in der YAML-Datei, an der Sie die Aufgabe einfügen möchten.
Wählen Sie die Aufgabe Befehlszeile aus dem Aufgabenkatalog aus.
Fügen Sie optional einen Anzeigenamen hinzu.
Geben Sie den
dotnet build
-Befehl mit Parametern ein. Beispiel:dotnet build --configuration $(buildConfiguration)
.Geben Sie den Pfad zur
.csproj
-Datei als Arbeitsverzeichnis ein.Wählen Sie Hinzufügen.
Wählen Sie Speichern, um die Änderung zu committen.
Hinzufügen von .NET SDK-Befehlen zu Ihrer Pipeline
Sie können .NET SDK-Befehle als Skript oder mit Hilfe der .NET Core-Aufgabe zu Ihrem Projekt hinzufügen. Die .NET Core-Aufgabe (DotNetCoreCLI@2) ermöglicht es Ihnen, Ihrer Pipeline ganz einfach .NET-CLI-Befehle hinzuzufügen. Sie können .NET Core-Aufgaben hinzufügen, indem Sie Ihre YAML-Datei bearbeiten oder den klassischen Editor verwenden.
Hinzufügen eines .NET-CLI-Befehls mit der .NET Core-Aufgabe
Um einen .NET Core-CLI-Befehl über den YAML Pipeline-Editor hinzuzufügen, führen Sie die folgenden Schritte aus:
Gehen Sie zu der Stelle in der YAML-Datei, an der Sie die Aufgabe einfügen möchten.
Wählen Sie .NET Core aus dem Aufgabenkatalog aus.
Wählen Sie den Befehl aus, den Sie ausführen möchten.
Konfigurieren Sie alle erforderlichen Optionen.
Wählen Sie Hinzufügen.
Wählen Sie Speichern, um die Änderung zu committen.
Hinzufügen eines .NET Core-CLI-Befehls mithilfe eines Skripts
Sie können .NET Core-CLI-Befehle als script
in Ihre azure-pipelines.yml
-Datei einfügen.
Beispiel:
steps:
# ...
- script: dotnet test <test-project>
Installieren eines Tools
Führen Sie die folgenden Schritte aus, um ein globales .NET Core-Tool wie dotnetsay in Ihrem Build unter Windows zu installieren:
- Fügen Sie die .NET Core-Aufgabe hinzu, und legen Sie die folgenden Eigenschaften fest:
- Befehl: custom.
- Pfad zu Projekten: leer lassen.
- Benutzerdefinierter Befehl: tool.
- Argumente:
install -g dotnetsay
.
- Befehl: custom.
- Um das Tool auszuführen, fügen Sie eine Befehlszeile hinzu und legen Sie die folgenden Eigenschaften fest:
- Skript:
dotnetsay
.
- Skript:
Ausführen der Tests
Wenn Sie Testprojekte in Ihrem Repository haben, können Sie die .NET Core-Aufgabe verwenden, um Unit-Tests unter Verwendung von Test-Frameworks wie MSTest, xUnit und NUnit auszuführen. Das Testprojekt muss auf Microsoft.NET.Test.SDK, Version 15.8.0 oder höher, verweisen. Die Testergebnisse werden automatisch in dem Dienst veröffentlicht. Diese Ergebnisse stehen Ihnen in der Buildzusammenfassung zur Verfügung und können für die Problembehandlung fehlgeschlagener Tests und die Analyse der Testzeitplanung verwendet werden.
Sie können Ihrer Pipeline mit der Aufgabe DotNetCoreCLI@2 eine Testaufgabe hinzufügen oder den folgenden Code-Ausschnitt zu Ihrer azure-pipelines.yml
-Datei hinzufügen:
steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration $(buildConfiguration)'
Wenn Sie den .NET Core-Aufgabeneditor verwenden, legen Sie Befehl auf Test fest. Pfad zu Projekten sollte sich auf die Testprojekte in Ihrer Lösung beziehen.
Alternativ können Sie den Befehl dotnet test
mit einem bestimmten Logger ausführen und dann die Aufgabe Testergebnisse veröffentlichen verwenden:
steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testRunner: VSTest
testResultsFiles: '**/*.trx'
Sammeln von Code Coverage
Wenn Sie unter Windows Builds erstellen, können Sie Kennzahlen zur Code-Abdeckung mit dem integrierten Daten-Collector erfassen. Das Testprojekt muss auf Microsoft.NET.Test.SDK, Version 15.8.0 oder höher, verweisen.
Wenn Sie die .NET Core-Aufgabe verwenden, um Tests auszuführen, werden die Abdeckungsdaten automatisch auf dem Server veröffentlicht. Die .coverage
-Datei kann von der Build-Zusammenfassung heruntergeladen und in Visual Studio angezeigt werden.
Fügen Sie Ihrer Datei azure-pipelines.yml
das folgende Codeschnipsel hinzu:
steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
So fügen Sie die Aufgabe .NET Core über den Aufgabeneditor hinzu:
Fügen Sie dem Buildauftrag die .NET Core-Aufgabe hinzu, und legen Sie die folgenden Eigenschaften fest:
- Befehl: test.
- Pfad zu Projekten: Sollte auf die Testprojekte in Ihrer Projektmappe verweisen.
- Argumente:
--configuration $(BuildConfiguration) --collect "Code coverage"
.
Stellen Sie sicher, dass die Option Testergebnisse veröffentlichen ausgewählt bleibt.
Wenn Sie den Befehl dotnet test
ausführen möchten, geben Sie die Optionen für Testergebnisprotokollierung und Abdeckung an. Verwenden Sie dann die Aufgabe Testergebnisse veröffentlichen:
steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx --collect "Code coverage"
- task: PublishTestResults@2
inputs:
testRunner: VSTest
testResultsFiles: '**/*.trx'
Sammeln von Code Coverage-Metriken mit Coverlet
Wenn Sie Builds unter Linux oder macOS erstellen, können Sie Coverlet oder ein ähnliches Tool verwenden, um Code Coverage-Metriken zu sammeln.
Sie können die Ergebnisse der Code-Abdeckung mit der Aufgabe Code-Abdeckungsergebnisse veröffentlichen (PublishCodeCoverageResults@1) auf dem Server veröffentlichen. Das Abdeckungstool muss so konfiguriert sein, dass Ergebnisse im Cobertura- oder JaCoCo-Abdeckungsformat generiert werden.
Führen Sie die folgenden Aufgaben aus, um Tests auszuführen und Code Coverage mit Coverlet zu veröffentlichen:
Fügen Sie einen Verweis auf das NuGet-Paket
coverlet.collector
hinzu.Fügen Sie Ihrer Datei
azure-pipelines.yml
das folgende Codeschnipsel hinzu:- task: UseDotNet@2 inputs: version: '8.x' includePreviewVersions: true # Required for preview versions - task: DotNetCoreCLI@2 displayName: 'dotnet build' inputs: command: 'build' configuration: $(buildConfiguration) - task: DotNetCoreCLI@2 displayName: 'dotnet test' inputs: command: 'test' arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura' publishTestResults: true projects: 'MyTestLibrary' # update with your test project directory - task: PublishCodeCoverageResults@1 displayName: 'Publish code coverage report' inputs: codeCoverageTool: 'Cobertura' summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
Verpacken und Übermitteln von Code
Sie können Ihre Build-Artefakte folgendermaßen veröffentlichen:
- Veröffentlichen in Azure Pipelines
- Veröffentlichen von Paketen in Azure Artifacts
- Erstellen Sie ein NuGet-Paket, und veröffentlichen Sie es in Ihrem NuGet-Feed.
- Erstellen eines .ZIP-Archivs zur Bereitstellung Ihrer Web-App.
Veröffentlichen von Artefakten in Azure Pipelines
Um die Ausgabe Ihres .NET-Builds in Ihrer Pipeline zu veröffentlichen, führen Sie die folgenden Aufgaben aus:
- Führen Sie
dotnet publish --output $(Build.ArtifactStagingDirectory)
über die .NET-CLI aus, oder fügen Sie die Aufgabe DotNetCoreCLI@2 mit dem Befehl publish hinzu. - Veröffentlichen Sie das Artefakt mit der Aufgabe Pipeline veröffentlichen Artefakt.
Fügen Sie Ihrer Datei azure-pipelines.yml
den folgenden Codeschnipsel hinzu:
steps:
- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: True
# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: 'myWebsite'
Hinweis
Die Aufgabe DotNetCoreCLI@2 verfügt über eine publishWebProjects
Eingabe, die standardmäßig auf wahr festgelegt ist. Diese Aufgabe veröffentlicht standardmäßig alle Webprojekte in Ihrem Repository. Weitere Hilfe und Informationen finden Sie in der Open-Source-Aufgabe auf GitHub.
Um vor dem Veröffentlichen weitere Dateien in das Build-Verzeichnis zu kopieren, verwenden Sie die Aufgabe Dateien kopieren (CopyFile@2).
Um die Ausgabe Ihres .NET-Builds in Ihrer Pipeline zu veröffentlichen, führen Sie die folgenden Aufgaben aus:
- Führen Sie
dotnet publish --output $(Build.ArtifactStagingDirectory)
über die CLI aus, oder fügen Sie die Aufgabe DotNetCoreCLI@2 mit dem Befehl publish hinzu. - Veröffentlichen Sie das Artefakt mit der Aufgabe Build-Artefakt veröffentlichen (PublishBuildArtifacts@1).
Fügen Sie den folgenden Code-Ausschnitt zu Ihrer azure-pipelines.yml
-Datei hinzu, um Ihre Build-Artefakte als ZIP-Datei zu veröffentlichen:
steps:
- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: True
# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
Weitere Informationen finden Sie unter Build-Artefakte veröffentlichen und herunterladen.
Veröffentlichen in einem NuGet-Feed
Um ein NuGet-Paket zu erstellen und es in Ihrem NuGet Feed zu veröffentlichen, fügen Sie den folgenden Code-Ausschnitt hinzu:
steps:
# ...
# do this near the end of your pipeline in most cases
- script: dotnet pack /p:PackageVersion=$(version) # define version variable elsewhere in your pipeline
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: '<Name of the NuGet service connection>'
- task: NuGetCommand@2
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: '<Name of the NuGet service connection>'
versioningScheme: byEnvVar
versionEnvVar: version
Hinweis
Die Aufgabe NuGetAuthenticate@1 unterstützt keine NuGet-API-Schlüsselauthentifizierung. Wenn Sie einen NuGet-API-Schlüssel verwenden, verwenden Sie die Aufgabe NuGetCommand@2, bei der die command
Eingabe auf push
mit dem Argument --api-key festgelegt ist. Beispiel: dotnet nuget push --api-key $(NuGetApiKey)
.
Weitere Informationen zur Versionsverwaltung und zur Veröffentlichung von NuGet-Paketen finden Sie unter Veröffentlichen von NuGet-Feeds.
Veröffentlichen eines NuGet-Pakets in Azure Artifacts
Sie können Ihre NuGet-Pakete in Ihrem Azure Artifacts-Feed veröffentlichen, indem Sie NuGetCommand@2 verwenden, um zu Ihrem Azure Artifact-Feed zu pushen. Siehe zum Beispiel NuGet-Pakete mit Azure Pipelines veröffentlichen.
Bereitstellen einer Web-App
Um ein ZIP-Archiv zu erstellen, das bereit ist, in einer Web-App veröffentlicht zu werden, fügen Sie den folgenden Code-Ausschnitt ein:
steps:
# ...
# do this after you've built your app, near the end of your pipeline in most cases
# for example, you do this before you deploy to an Azure web app on Windows
- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: True
Informationen zum Veröffentlichen dieses Archivs in einer Web-App finden Sie unter Azure-Web-App-Bereitstellung.
Erstellen eines Images und Pushen in eine Containerregistrierung
Sie können auch ein Image für Ihre App erstellen und es in eine Container-Registry pushen.
Veröffentlichen von Symbolen
Sie können die PublishSymbols@2-Aufgabe verwenden, um Symbole für einen Azure Artifacts-Symbolserver oder eine Dateifreigabe zu veröffentlichen.
Wenn Sie beispielsweise Symbole in einer Dateifreigabe veröffentlichen möchten, fügen Sie der azure-pipelines.yml
-Datei den folgenden Codeausschnitt hinzu:
- task: PublishSymbols@2
inputs:
SymbolsFolder: '$(Build.SourcesDirectory)'
SearchPattern: '**/bin/**/*.pdb'
IndexSources: true
PublishSymbols: true
SymbolServerType: 'FileShare'
SymbolsPath: '\\server\shareName'
Wenn Sie den klassischen Editor verwenden, wählen Sie Indizieren von Quellen und Veröffentlichen von Symbolen aus dem Aufgabenkatalog aus, um sie der Pipeline hinzuzufügen.
Weitere Informationen finden Sie unter Symbole veröffentlichen.
Problembehandlung
Wenn Sie Ihr Projekt auf Ihrem Entwicklungscomputer erstellen können, aber Probleme beim Erstellen in Azure Pipelines auftreten, untersuchen Sie die folgenden möglichen Ursachen und Korrekturmaßnahmen:
- Vorabversionen des .NET Core SDKs werden nicht auf von Microsoft gehosteten Agenten installiert. Nachdem eine neue Version des .NET Core SDKs veröffentlicht wurde, kann es einige Wochen dauern, bis sie in allen Rechenzentren von Azure Pipelines verfügbar ist. Sie müssen nicht warten, bis das Rollout abgeschlossen ist. Sie können die Aufgabe .NET Core verwenden verwenden, um die gewünschte Version des .NET Core SDKs auf von Microsoft gehosteten Agenten zu installieren.
Überprüfen Sie die .NET Core SDK-Versionen und -Runtime auf Ihrem Entwicklungscomputer, und stellen Sie sicher, dass sie mit dem Agent übereinstimmen. Sie können ein Befehlszeilenskript
dotnet --version
in Ihre Pipeline einschließen, um die Version des .NET Core SDK zu drucken. Verwenden Sie entweder den .NET Core Tool-Installer, um dieselbe Version auf dem Agent bereitzustellen, oder aktualisieren Sie Ihre Projekte und Ihren Entwicklungscomputer auf die neuere Version des .NET Core SDK.Möglicherweise verwenden Sie Logik in der Visual Studio-IDE, die in Ihrer Pipeline nicht codiert ist. Azure Pipelines führt jeden der Befehle, die Sie in den Aufgaben angeben, nacheinander in einem neuen Prozess aus. Untersuchen Sie die Protokolle aus dem Pipelinebuild, um die genauen Befehle anzuzeigen, die im Rahmen des Builds ausgeführt wurden. Wiederholen Sie dieselben Befehle in derselben Reihenfolge auf Ihrem Entwicklungscomputer, um das Problem zu finden.
Wenn Sie über eine gemischte Projektmappe verfügen, die einige .NET Core-Projekte und einige .NET Framework-Projekte enthält, sollten Sie auch die NuGet-Aufgabe verwenden, um in
packages.config
-Dateien angegebene Pakete wiederherzustellen. Fügen Sie die Aufgabe MSBuild oder Visual Studio-Build hinzu, um die .NET Framework-Projekte zu erstellen.Es kann sein, dass Ihre Builds beim Wiederherstellen von Paketen zeitweise fehlschlagen: Entweder hat NuGet.org Probleme, oder es gibt Netzwerkprobleme zwischen dem Azure-Rechenzentrum und NuGet.org. Sie können feststellen, ob die Verwendung von Azure Artifacts mit NuGet.org als Upstream-Quelle die Zuverlässigkeit Ihrer Builds verbessert, da dies nicht in unserem Einflussbereich liegt.
Wenn eine neue Version des .NET Core SDKs oder von Visual Studio veröffentlicht wird, kann es gelegentlich vorkommen, dass Ihr Build nicht funktioniert. Zum Beispiel könnte eine neuere Version oder Funktion des NuGet Tools, das mit dem SDK ausgeliefert wird, Ihren Build beeinträchtigen. Um dieses Problem einzugrenzen, verwenden Sie die Aufgabe .NET Core Tool-Installer, um die in Ihrem Build verwendete Version des .NET Core SDK anzugeben.
Häufig gestellte Fragen
F: Wo kann ich mehr über Azure Artifacts erfahren?
A: Paketverwaltung in Azure Artifacts
F: Wo erfahre ich mehr über .NET Core-Befehle?
F: Wo erhalte ich weitere Informationen zum Ausführen von Tests in meiner Projektmappe?
A: Komponententests in .NET Core-Projekten