次の方法で共有


.NET Core プロジェクトのビルド、テスト、およびデプロイ

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

この記事では、Azure Pipelines を使用して .NET Core プロジェクトを操作する方法について説明します。 この記事では、次のタスクについて説明します。

  • .NET Core Web アプリを作成し、GitHub リポジトリにアップロードします。
  • Azure DevOps プロジェクトと Azure Pipelines パイプラインを作成してプロジェクトをビルドします。
  • セルフホステッド エージェントを使用してビルド環境を設定します。
  • 依存関係を復元し、プロジェクトをビルドし、 .NET Core (DotNetCoreCLI@2) タスクまたはスクリプトを使用してテストします。
  • .NET Core (DotNetCoreCLI@2) タスクを使用して、他の .NET SDK コマンドをパイプラインに追加します。
  • コード カバレッジ結果の発行 (Publish code coverage results v2) タスクを使用して、コード カバレッジの結果を発行します。
  • ビルド出力をパッケージ化し、パイプライン、NuGet フィード、ZIP アーカイブ、またはその他のターゲットに配信します。
  • .NET Core Web アプリを作成し、GitHub リポジトリにアップロードします。
  • Azure DevOps プロジェクトと Azure Pipelines パイプラインを作成してプロジェクトをビルドします。
  • Microsoft がホストするエージェントまたはセルフホステッド エージェントを使用してビルド環境を設定します。
  • 依存関係を復元し、プロジェクトをビルドし、 .NET Core (DotNetCoreCLI@2) タスクまたはスクリプトを使用してテストします。
  • .NET Core (DotNetCoreCLI@2) タスクを使用して、他の .NET SDK コマンドをパイプラインに追加します。
  • コード カバレッジ結果の発行 (Publish code coverage results v2) タスクを使用して、コード カバレッジの結果を発行します。
  • ビルド出力をパッケージ化し、パイプライン、NuGet フィード、ZIP アーカイブ、またはその他のターゲットに配信します。

Note

.NET Framework プロジェクトを操作するには、「.NET Framework を使用した ASP.NET アプリのビルド」を参照してください。

前提条件

この記事のすべての手順を完了するには、次の前提条件が必要です。

  • Azure DevOps 組織。 無料で作成できます
  • Azure DevOps プロジェクトを作成し、プロジェクトにパイプラインへのアクセス権を付与できるように、組織のプロジェクト管理者グループのメンバーシップ。 Azure DevOps 組織の所有者は、このメンバーシップを自動的に持ちます。
  • 組織内の Azure DevOps プロジェクト。 Azure DevOps でプロジェクトを作成します
  • 無料レベルの並列ジョブを要求することで、Microsoft がホストするエージェントでパイプラインを実行する機能。 この要求の処理には数日かかる場合があります。 詳しくは、「並列ジョブの設定と支払いについて」をご覧ください。
  • プロジェクト管理者として割り当てることができるサービス接続の管理者または作成者ロール。
  • GitHub アカウントとリポジトリ。

この記事のすべての手順を完了するには、次の前提条件が必要です。

  • Azure DevOps コレクション。
  • 組織で作成された Azure DevOps プロジェクト。 手順については、「 Azure DevOps でプロジェクトを作成する」を参照してください。
  • Azure DevOps プロジェクトを作成し、プロジェクトにパイプラインへのアクセス権を付与できるように、プロジェクト管理者グループのメンバーシップ。 Azure DevOps 組織の所有者は、このメンバーシップを自動的に持ちます。
  • プロジェクト管理者として割り当てることができるサービス接続の管理者または作成者ロール。
  • GitHub アカウントとリポジトリ。

.NET プロジェクトを作成して GitHub にアップロードする

GitHub リポジトリに既に .NET プロジェクトを使用する場合は、このセクションをスキップできます。

使用する .NET プロジェクトがない場合は、次のようにローカル コンピューターに新しいプロジェクトを作成します。

  1. .NET 8.0 SDK をインストールするか、インストールされていることを確認します。
  2. ローカル コンピューターでターミナル ウィンドウを開きます。
  3. プロジェクト ディレクトリを作成し、それに移動します。
  4. dotnet new webapp -f net8.0を実行して、新しい .NET 8 Web アプリを作成します。
  5. dotnet runを使用して、アプリケーションをローカルでビルドして実行します。
  6. アプリケーションが起動したら、Ctrl キーを押しながら C キーを押してシャットダウンします。
  7. ローカル プロジェクトをアップロードするか、GitHub リポジトリに接続します。

パイプラインを作成する

使用するパイプラインがある場合は、このセクションをスキップできます。 それ以外の場合は、YAML パイプライン エディターまたはクラシック エディターを使用して、次のようにパイプラインを作成できます。

  1. Azure DevOps プロジェクトで、左側のナビゲーション メニューから [パイプライン ] を選択します。

  2. このパイプラインがプロジェクトの最初のパイプラインである場合は、[ 新しい パイプライン] または [パイプラインの 作成 ] を選択します。

  3. [コードの場所] 画面で、GitHub を選択します。

  4. サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。

  5. [ リポジトリの選択 ] 画面で、.NET アプリが含まれているリポジトリを選択します。

  6. Azure Pipelines アプリをインストールするために、GitHub にリダイレクトされる場合があります。 その場合は、[承認してインストール] を選択します。

  1. [ 構成 ] タブで、[ 詳細を表示 ] を選択し、一覧から ASP.NET Core パイプライン テンプレートを選択します。 このテンプレートでは、この記事で説明する手順と設定の多くを提供します。

    [構成] タブで [スターター パイプライン] を選択して最小限のパイプラインから開始し、手順と設定を自分で追加することもできます。

  2. [ 校閲 ] タブで、YAML コードを確認します。 要件に合わせてファイルをカスタマイズできます。 たとえば、別のエージェント プールを指定したり、別の .NET SDK をインストールするタスクを追加したりできます。

  1. Azure DevOps プロジェクトで、左側のナビゲーション メニューから [パイプライン ] を選択します。

  2. このパイプラインがプロジェクトの最初のパイプラインである場合は、[ 新しい パイプライン] または [パイプラインの 作成 ] を選択します。

  3. ソース リポジトリの種類を選択します。 この例では、GitHub Enterprise Server を使用します。

  4. 次の画面で、次の情報を入力します。

    • GitHub アカウントの URL ( https://github.com/mynameなど)。
    • GitHub 個人用アクセス トークン (PAT)。
    • my-githubなどのサービス接続名。
  5. [作成] を選択します

  6. 使用する GitHub リポジトリを選択します。

  7. [構成] タブで、[詳細を表示] を選択し、一覧から [ASP.NET Core パイプライン テンプレート] を選択します。 このテンプレートでは、この記事で説明する手順と設定の多くを提供します。

  8. 新しい YAML パイプライン コードを調べます。 要件に合わせて YAML ファイルをカスタマイズすることができます。 たとえば、 別の .NET SDK をインストールしたり 、プロジェクトをテストして発行したりするタスクを追加できます。

  1. 準備ができたら、[保存および実行] を選択します。

    新しい YAML パイプラインの [保存して実行] ボタンを示すスクリーンショット。

  2. 必要に応じて[ コミット]メッセージを編集し、[ 保存して再度実行] を選択します。

  3. [ 概要 ] タブの [ ジョブ ] セクションでジョブを選択して、パイプラインの動作を監視します。

これで、カスタマイズする準備ができている作業パイプラインが作成されました。

ビルド環境のセットアップ

Azure Pipelines では 、セルフホステッド エージェント を使用して .NET Core プロジェクトをビルドします。 .NET Core SDK とランタイムは、 WindowsLinuxmacOS、または Docker エージェントで使用できます。 必要なバージョンの .NET Core SDK とランタイムがエージェントにインストールされていることを確認します。

特定のバージョンの .NET SDK をインストールするには、 UseDotNet@2 タスクを YAML パイプライン ファイルに追加するか、クラシック エディターで .NET Core を使用 するタスクを追加します。

Note

物理システムで実行されるエージェントの場合、パイプラインを介して SDK とツールをインストールすると、エージェントのホスト上のビルド環境が変更されます。

次の YAML スニペットの例では、.NET SDK 8.0.x がインストールされます。

steps:
- task: UseDotNet@2
  inputs:
    version: '8.x'

新しい SDK をインストールするには、 performMultiLevelLookuptrue に設定します。

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

ビルド ジョブのエージェント プールとエージェントを選択できます。 エージェントの機能に基づいてエージェントを指定することもできます。 たとえば、次の YAML パイプライン スニペットでは、プールとエージェントの機能が選択されます。

pool:
  name: myPrivateAgents
  demands:
  - agent.os -equals Darwin
  - anotherCapability -equals somethingElse

Windows、Linux、または macOS 用の .NET Core SDK とランタイムを使用して、.NET Core プロジェクトをビルドできます。 既定では、ビルドは Microsoft がホストするエージェントで実行されるため、インフラストラクチャを設定する必要はありません。

Azure Pipelines Microsoft でホストされるエージェントには、サポートされている .NET Core SDK のプレインストールバージョンがいくつか含まれています。 使用可能なイメージと構成例の完全な一覧については、 Microsoft がホストするエージェント を参照してください。

次の YAML パイプライン スニペットは、エージェント プールの Ubuntu OS を設定します。

pool:
  vmImage: 'ubuntu-latest' 

Microsoft がホストするエージェントには、一部の古いバージョンの .NET Core SDK は含まれていません。また、通常はプレリリース バージョンは含まれません。 Microsoft がホストするエージェントでこれらのバージョンの SDK が必要な場合は、 DotNet の使用 (UseDotNet@2) タスクを使用してインストールできます。

たとえば、次のコードは .NET 5.0.x SDK をインストールします。

steps:
- task: UseDotNet@2
  inputs:
    version: '5.x'

Windows エージェントには、既に .NET Core ランタイムが含まれています。 新しい SDK をインストールするには、次のスニペットのように performMultiLevelLookuptrue に設定します。

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

セルフホステッド・エージェント

または、 セルフホステッド エージェント を使用して .NET Core プロジェクトをビルドすることもできます。 LinuxmacOS、または Windows のセルフホステッド エージェントを設定できます。

セルフホステッド エージェントを使用すると、次の機能を利用できます。

  • UseDotNet@2 ツール インストーラーの実行コストを回避します。
  • リポジトリが大きい場合は、ビルド時間を短縮します。
  • インクリメンタル ビルドを実行します。
  • Microsoft が公式にサポートしていないプレビュー SDK またはプライベート SDK を使用します。
  • 企業またはオンプレミスの環境でのみ使用できる SDK を使用します。

詳しくは、「セルフホステッド エージェント」をご覧ください。

依存関係を復元する

NuGet パッケージは、プロジェクトがビルドしないコードに依存する方法です。 NuGet パッケージとプロジェクト固有のツールをダウンロードするには、dotnet restore () タスクを使用するか、パイプライン内のスクリプトとして、DotNetCoreCLI@2 コマンドを実行します。 dotnet restore コマンドは、.NET Core SDK でパッケージ化された NuGet.exe を使用し、.NET Core プロジェクト *.csproj ファイルで指定されたパッケージのみを復元できます。

.NET Core (DotNetCoreCLI@2) タスクを使用して、Azure Artifacts、NuGet.org、または認証された別の外部または内部の NuGet リポジトリから NuGet パッケージをダウンロードして復元できます。 NuGet フィードがパイプラインと同じプロジェクトにある場合は、認証する必要はありません。 詳細については、「.NET Core タスク (DotNetCoreCLI@2)」を参照してください。

Microsoft ホステッド エージェントを使用すると、ビルドを実行するたびに新しいコンピューターが取得され、実行のたびにパッケージが復元されます。 復元にはかなりの時間がかかることがあります。 この問題を軽減するには、Azure Artifacts または セルフホステッド エージェント を使用してパッケージ キャッシュを利用します。

次のパイプラインでは、 DotNetCoreCLI@2 タスクを使用して Azure Artifact フィードを復元します。

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)'

.NET Core SDK バージョン 2.0 以降では、 dotnet buildなどのコマンドを実行すると、パッケージが自動的に復元されます。 認証されたフィードを使用する場合は、 .NET Core (DotNetCoreCLI@2) タスクを使用してパッケージを復元する必要があります。

Project Settings>Pipelines>Service 接続で NuGet サービス接続を作成して、認証されたフィードの資格情報管理します。 NuGet サービス接続の詳細については、「 Azure Pipelines を使用して NuGet パッケージを発行する」を参照してください。

NuGet.org からパッケージを復元する

NuGet.org からパッケージを復元するには、次のようにパイプラインを更新します。

YAML コードを直接編集するか、タスク アシスタントを使用して、復元コマンドをパイプラインに追加できます。

ビルド タスクの前に次のスニペットをazure-pipelines.yml ファイルに挿入して、.NET Core (DotNetCoreCLI@2) タスクを直接追加します。

steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: select

タスク アシスタントを使用するには:

  1. タスクを挿入する YAML ファイル内の位置に移動します。
  2. [タスク カタログ] で [.NET Core] を選択します。
  3. 構成画面で、[コマンド] ドロップダウン リストから [復元] を選択します。
  4. [ プロジェクトまたはソリューションへのパス ] フィールドに、 *.csproj ファイルへのパスを入力します。 すべてのサブフォルダー内のすべての *.csproj ファイルにワイルドカード **/*.csproj を使用できます。
  5. フィードを追加するにはここで選択したフィードと[NuGet.org からパッケージを使用する]が選択されていることを確認します。
  6. [追加] を選択します。
  7. [ 検証して保存] を選択し、[ 保存] を選択して変更をコミットします。

外部フィードからパッケージを復元する

外部 NuGet リポジトリを指定するには、リポジトリ内の NuGet.config ファイルに URL を配置します。 NuGet.config ファイルでカスタム フィードが指定されていること、および資格情報が NuGet サービス接続で指定されていることを確認します。

外部フィードからパッケージを復元するには、前のセクションの指示に従って restore タスクを追加しますが、構成設定は次のように変更します。

ビルド タスクの前に次のスニペットをazure-pipelines.yml ファイルに挿入して、.NET Core (DotNetCoreCLI@2) タスクを直接追加します。 <NuGet service connection>をサービス接続名に置き換えます。

steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config    # Relative to root of the repository
    externalFeedCredentials: <NuGet service connection>

タスク アシスタントを使用するには:

  1. .NET Core タスクを追加し、前の手順のように構成画面で復元を選択します。
  2. フィードを追加するにはNuGet.configの [フィード] を選択します。
  3. [ NuGet.configパス ] で、リポジトリのルートを基準にして、 NuGet.config ファイルへのパスを入力します。 フィールドの横にある省略記号 ... を選択して、場所を参照して選択できます。
  4. [ この組織/コレクション外のフィードの資格情報] で、選択した NuGet.config ファイル内の外部レジストリに使用する資格情報を選択します。 同じ組織内のフィードの場合、このフィールドは空白のままにすることができます。 ビルドの資格情報は自動的に使用されます。

.NET Framework プロジェクトのパッケージを復元する

ソリューションにも Microsoft .NET Framework プロジェクトがある場合、または package.json を使用して依存関係を指定する場合は、 NuGetCommand@2 タスクを使用してそれらの依存関係を復元します。

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'

Note

Ubuntu 24.04 以降では、.NET CLI でNuGetCommand@2 タスクの代わりに NuGetAuthenticate タスクを使用する必要があります。 詳細については、「 新しい Ubuntu ホストイメージのサポート」を参照してください。

プロジェクトをビルドする

dotnet build コマンドを実行して、.NET Core プロジェクトをビルドします。 .NET Core (DotNetCoreCLI@2) タスクを使用するか、コマンド ライン スクリプトとしてコマンドをパイプラインに追加できます。

.NET Core タスクを使用する

ファイルを直接編集するか、タスク アシスタントを使用して、YAML パイプライン エディターを使用してビルド タスクを追加できます。

次のスニペットを挿入して 、.NET Core (DotNetCoreCLI@2) タスクを直接追加します。 ニーズに合わせて arguments を更新します。

steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

タスク アシスタントを使用するには:

  1. タスクを挿入する YAML ファイル内の位置に移動します。
  2. .NET Core (DotNetCoreCLI@2) タスクを選択します。
  3. [コマンド] ドロップダウン リストから [ビルド] を選択します。
  4. [ プロジェクトまたはソリューションへのパス ] フィールドに、 *.csproj ファイルへのパスを入力します。 すべてのサブフォルダー内のすべての *.csproj ファイルにワイルドカード **/*.csproj を使用できます。
  5. [追加] を選択します。
  6. [保存] を選び、変更をコミットします。

コマンド ライン スクリプトを使用して .NET Core をビルドする

コマンド ライン スクリプトを使用してビルドすることもできます。

YAML ファイルを直接編集してビルド コマンド ラインを追加するには、次のコードを追加します。

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

タスク アシスタントを使用して コマンド ライン タスクを追加することもできます。

  1. タスクを挿入する YAML ファイル内の位置に移動します。
  2. 一覧から コマンド ライン (CmdLine@2) タスクを選択します。
  3. [ スクリプト ] フィールドに、パラメーターを指定して dotnet build コマンドを入力します。 たとえば、dotnet build --configuration $(buildConfiguration) のようにします。
  4. [ 詳細設定>作業ディレクトリ] で、作業ディレクトリとして *.csproj ファイルへのパスを入力します。 空白のままにすると、作業ディレクトリは既定で $(Build.SourcesDirectory)されます。
  5. [追加] を選択します。
  6. [保存] を選び、変更をコミットします。

他の .NET SDK コマンドをパイプラインに追加する

.NET Core () タスクを使用するか、スクリプトとして、他の DotNetCoreCLI@2 SDK コマンドをパイプラインに追加できます。

.NET Core タスクを使用して .NET CLI コマンドを追加する

.NET Core (DotNetCoreCLI@2) タスクを使用すると、.NET CLI コマンドをパイプラインに簡単に追加できます。 .NET Core (DotNetCoreCLI@2) タスクを追加するには、YAML ファイルを編集するか、クラシック エディターを使用します。

YAML パイプライン エディターでタスク アシスタントを使用して .NET Core コマンドを追加するには、次の手順を実行します。

  1. タスクを挿入する YAML ファイル内の位置に移動します。
  2. [タスク カタログ] で [.NET Core] を選択します。
  3. コマンド フィールドのドロップダウン リストから実行する コマンド を選択します。
  4. 必要なオプションを構成します。
  5. [追加] を選択します。
  6. [保存] を選び、変更をコミットします。

スクリプトに .NET Core CLI コマンドを追加する

.NET Core CLI コマンドは、script ファイルにとして追加できます。 例えば次が挙げられます。


steps:
# ...
- script: dotnet test <test-project> 

ツールをインストールする

Windows で実行されているビルドに dotnetsay などの .NET Core グローバル ツールをインストールするには、 .NET Core タスクを追加し、構成で次のプロパティを設定します。

  • コマンド: カスタム
  • プロジェクトへのパス: 空のままにします
  • カスタム コマンド: tool
  • 引数: install -g dotnetsay

ツールを実行するには、コマンド ライン タスクを追加し、[dotnetsay] フィールドに「」と入力します。

テストの実行

リポジトリにテスト プロジェクトがある場合は、 .NET Core (DotNetCoreCLI@2) タスクを使用して、MSTest、xUnit、NUnit などのテスト フレームワークを使用して単体テストを実行できます。 テスト プロジェクトは、Microsoft.NET.Test.SDK バージョン 15.8.0 以降を参照する必要があります。

テスト結果は自動的にサービスに発行され、ビルドの概要で使用できます。 テスト結果を使用して、失敗したテストのトラブルシューティングとテストのタイミングの分析を行うことができます。

パイプラインにテスト タスクを追加するには、次のスニペットを azure-pipelines.yml ファイルに追加します。

steps:
# ...
# do this after other tasks such as build
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

タスク アシスタントを使用して .NET Core (DotNetCoreCLI@2) タスクを追加する場合は、次のプロパティを設定します。

  • コマンド: テスト
  • プロジェクトへのパス: ソリューション内のテスト プロジェクトに設定する
  • 引数: --configuration $(BuildConfiguration)

または、特定のロガーを使用して dotnet test コマンドを実行し、 PublishTestResults@2 タスクを使用することもできます。

steps:
# ...
# do this after your tests run
- script: dotnet test <test-project> --logger trx
- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

コード カバレッジを収集する

Windows プラットフォームでビルドする場合は、組み込みのカバレッジ データ コレクターを使用してコード カバレッジ メトリックを収集できます。 テスト プロジェクトは、Microsoft.NET.Test.SDK バージョン 15.8.0 以降を参照する必要があります。

.NET Core (DotNetCoreCLI@2) タスクを使用してテストを実行すると、カバレッジ データがサーバーに自動的に発行されます。 ビルドの概要から *.coverage ファイルをダウンロードして、Visual Studio で表示できます。

コード カバレッジを収集するには、パイプラインにテスト タスクを追加するときに、 --collect "Code Coverage" 引数を追加します。

steps:
# ...
# do this after other tasks such as build
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code Coverage"'

タスク アシスタントを使用して .NET Core (DotNetCoreCLI@2) タスクを追加する場合は、次のプロパティを設定します。

  • コマンド: テスト
  • プロジェクトへのパス: ソリューション内のテスト プロジェクトに設定する
  • 引数: --configuration $(BuildConfiguration) --collect "Code Coverage"

[テスト結果の発行] オプションはオンのままにします。

または、特定のロガーで dotnet test コマンドを使用してコード カバレッジの結果を収集し、 PublishTestResults@2 タスクを実行するには、次のコードを使用します。

steps:
# ...
# do this after your tests run
- script: dotnet test <test-project> --logger trx --collect "Code Coverage"
- task: PublishTestResults@2
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

Coverlet を使ってコード カバレッジ メトリックを収集する

Linux または macOS 上でビルドする場合は、 Coverlet または同様のツールを使用してコード カバレッジ メトリックを収集できます。

コード カバレッジ結果の発行 (PublishCodeCoverageResults@2) タスクを使用して、 コード カバレッジの結果をサーバーに発行 できます。 Cobertura または JaCoCo カバレッジ形式で結果を生成するようにカバレッジ ツールを構成する必要があります。

Coverlet を使用してテストを実行し、コード カバレッジを発行するには:

  1. coverlet.collector NuGet パッケージの参照を追加します。
  2. azure-pipelines.yml ファイルに次のスニペットを追加します。
- 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: '<test project directory>'
  
- task: PublishCodeCoverageResults@2
  displayName: 'Publish code coverage report'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'

コードをパッケージ化して提供する

ビルド出力をパッケージ化して配信するには、次のことができます。

  • ビルド成果物を Azure Pipelines に発行します。
  • NuGet パッケージを作成し、それを NuGet フィードに発行します。
  • NuGet パッケージを Azure Artifacts に発行します。
  • WEB アプリにデプロイする ZIP アーカイブを作成します。
  • Azure Artifacts シンボル サーバーまたはファイル共有にシンボルを発行します。

また、アプリに対して、イメージをビルドして、それをコンテナー レジストリにプッシュすることもできます。

成果物を Azure Pipelines に発行する

.NET ビルドの出力をパイプラインに発行するには、次の手順に従います。

  1. .NET CLI を使用してdotnet publish --output $(Build.ArtifactStagingDirectory)を実行するか、publish コマンドを使用して DotNetCoreCLI@2 () タスクを追加します。
  2. パイプライン成果物の 発行 (PublishPipelineArtifact@1) タスクを使用して成果物を発行します。 このタスクは、 $(Build.ArtifactStagingDirectory) 内のすべてのファイルをビルドの成果物としてアップロードします。

azure-pipelines.yml ファイルに次のコードを追加します。

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsite'

公開前にさらにファイルをビルド ディレクトリにコピーするには、Copy Files (CopyFile@2) タスクを使用します。

Note

publishWebProjects () タスクのDotNetCoreCLI@2入力は既定でtrueに設定され、リポジトリ内のすべての Web プロジェクトが発行されます。 詳細については、 azure-pipelines-tasks GitHub リポジトリを参照してください。

.NET ビルドの出力をパイプラインに発行するには、次のタスクを実行します。

  1. .NET CLI を使用してdotnet publish --output $(Build.ArtifactStagingDirectory)を実行するか、publish コマンドを使用して DotNetCoreCLI@2 () タスクを追加します。
  2. Publish build artifact (PublishBuildArtifacts@1) タスクを使用して、アーティファクトを発行します。

のazure-pipelines.yml コードでは、ビルド成果物も ZIP ファイルとして発行されます。 PublishBuildArtifacts@1 タスクは、$(Build.ArtifactStagingDirectory)内のすべてのファイルをビルドの成果物としてアップロードします。

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: true
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'

詳細については、「ビルド アーティファクトを発行してダウンロードする」を参照してください。

NuGet フィードに発行する

NuGet パッケージを作成して NuGet フィードに発行するには、次のスニペットを azure-pipelines.yml ファイルに追加します。

steps:
# ...
# do this near the end of your pipeline
- script: dotnet pack /p:PackageVersion=$(version)  # define the version variable elsewhere in your pipeline
- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: '<NuGet service connection>'
- task: NuGetCommand@2
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: '<NuGet service connection>'
    versioningScheme: byEnvVar
    versionEnvVar: version

Note

NuGetAuthenticate@1 タスクでは、NuGet API キー認証はサポートされていません。 NuGet API キーを使用している場合は、 NuGetCommand@2 タスクを使用し、 command 入力を push に設定し、引数を --api-key します。 たとえば、dotnet nuget push --api-key $(NuGetApiKey) のようにします。

NuGet パッケージのバージョン管理と発行の詳細については、「 Azure Pipelines を使用して NuGet パッケージを発行する」を参照してください。

NuGet パッケージを Azure Artifacts に発行する

NuGetCommand@2 タスクを使用して、NuGet パッケージを Azure Artifacts フィードに発行できます。 詳細については、「 Azure Pipelines を使用して NuGet パッケージを発行する」を参照してください。

ZIP ファイル アーカイブを Web アプリに発行する

Web アプリに発行する準備ができている ZIP ファイル アーカイブを作成するには、次のスニペットを azure-pipelines.ymlに追加します。 ほとんどの場合、パイプラインの終わり近くでアプリをビルドした後、このタスクを実行します。 たとえば、Windows 上の Azure Web アプリにデプロイする前に、このタスクを実行します。

steps:
# ...
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

このアーカイブを Web アプリに発行するには、Azure Web アプリのデプロイに関する記事を参照してください。

シンボルを発行する

PublishSymbols@2 タスクを使用して、シンボルを Azure Artifacts シンボル サーバーまたはファイル共有に発行できます。 詳細については、「シンボルを発行する」を参照してください。

たとえば、シンボルをファイル共有に発行するには、 azure-pipelines.yml ファイルに 次のスニペットを追加します。

- task: PublishSymbols@2
  inputs:
    SymbolsFolder: '$(Build.SourcesDirectory)'
    SearchPattern: '**/bin/**/*.pdb'
    IndexSources: true
    PublishSymbols: true
    SymbolServerType: 'FileShare' 
    SymbolsPath: '\\<server>\<shareName>'

クラシック エディターを使用するには、 インデックス ソースを追加し、シンボル タスクをパイプラインに発行します。

トラブルシューティング

プロジェクトがローカル コンピューター上に正常にビルドされ、Azure Pipelines ではビルドされない場合は、次の潜在的な原因と是正措置を確認してください。

  • .NET Core SDK のプレリリース バージョンは Microsoft がホストするエージェントにインストールされていないため、新しいバージョンの SDK をすべての Azure Pipelines データ センターにロールアウトするには数週間かかる場合があります。 ロールアウトが完了するのを待つ代わりに、 .NET Core の使用 タスクを使用して、Microsoft ホスト型エージェントに必要な .NET Core SDK バージョンをインストールできます。
  • 新しいバージョンの .NET Core SDK または Visual Studio は、たとえば NuGet ツールの新しいバージョンや機能が含まれている場合に、ビルドを中断する可能性があります。 開発マシン上の .NET Core SDK のバージョンとランタイムがパイプライン エージェントと一致していることを確認します。

    パイプラインに dotnet --version コマンド ライン スクリプトを含め、.NET Core SDK のバージョンを出力できます。 .NET Core ツール インストーラーを使用してエージェントに同じバージョンをデプロイするか、プロジェクトと開発マシンを .NET Core SDK のパイプライン バージョンに更新します。

  • NuGet.org からパッケージを復元するときに接続の問題が原因で、ビルドが断続的に失敗する可能性があります。NuGet.org 問題が発生している場合や、Azure データ センターと NuGet.org の間にネットワークの問題が発生している可能性があります。 アップストリーム ソース と共に Azure Artifacts を使用してパッケージをキャッシュすることで、ビルドの信頼性が向上するかどうかを調べることができます。

    パイプラインの資格情報は、Azure Artifacts への接続に自動的に使用されます。 通常、これらの資格情報は、プロジェクト コレクション ビルド サービス アカウントから導出されます。 Azure Artifacts を使用して NuGet パッケージをキャッシュする方法の詳細については、「Azure Artifact フィードへの接続」を参照してください。

  • パイプラインでエンコードされていないロジックを Visual Studio で使用している可能性があります。 Azure Pipelines は、新しいプロセスでタスク内の各コマンドを順番に実行します。 パイプライン ビルドのログを調べて、ビルドで実行された正確なコマンドを確認します。 問題を特定するには、開発用コンピューターで同じコマンドを同じ順序で繰り返します。

  • 一部の .NET Core プロジェクトと一部の .NET Framework プロジェクトを含む混合ソリューションがある場合は、 NuGet タスクを使用して 、packages.config ファイルで指定されたパッケージを復元します。 MSBuild または Visual Studio Build タスクを追加して、.NET Framework プロジェクトをビルドします。