.NET Core アプリをビルド、テスト、デプロイする

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

Azure Pipeline を使用して、.NET Core プロジェクトを自動的にビルド、テスト、デプロイします。 この記事では、次のタスクの手順について説明します。

Note

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

前提条件

  • リポジトリを作成できる GitHub アカウント。 無料で作成できます
  • Azure DevOps 組織とプロジェクト。 無料で作成できます
  • Microsoft によってホストされるエージェントでパイプラインを実行する機能。 並列ジョブを購入するか、Free レベルを要求できます。
  • リポジトリを作成できる GitHub アカウント。 無料で作成できます
  • Azure DevOps コレクション。
  • Docker がインストールされ、エージェント ホスト上で実行されているセルフホステッド エージェントでパイプラインを実行する機能。

最初のパイプラインの作成

Azure Pipelines を使うのは初めてですか。 その場合は、まず次のセクションを試してみることをお勧めします。

.NET プロジェクトを作成する

操作する .NETプロジェクトがない場合は、ローカル システム上に新しいプロジェクトを作成します。 まず、最新の .NET 8.0 SDK をインストールし ます。

  1. ターミナル ウィンドウを開きます。

  2. プロジェクト ディレクトリを作成し、それに移動します。

  3. 新しい .NET 8 Web アプリを作成します。

    dotnet new webapp -f net8.0
    
  4. 同じターミナル セッションで、プロジェクト ディレクトリから dotnet run コマンドを使用してアプリケーションをローカルに実行します。

    dotnet run
    
  5. アプリケーションを起動したら、Ctrl-C を押してシャットダウンします。

Git リポジトリを作成して GitHub に接続する

  1. プロジェクト ディレクトリから、ローカル Git リポジトリを作成し、アプリケーション コードを メイン ブランチにコミットします

  2. ローカル Git リポジトリを GitHub リポジトリに接続します

DevOps プロジェクトを作成する

Azure Pipelines にサインインします。 サインインすると、ブラウザーが https://dev.azure.com/my-organization-name に移動し、Azure DevOps ダッシュボーが表示されます。

  1. ブラウザで dev.azure.com にアクセスし、サインインします。
  2. 自分の組織を選択します。
  3. [新しいプロジェクト] を選択して新しいプロジェクトを作成します。または、組織内で最初のプロジェクトを作成する場合は、[プロジェクトの作成] を選択します。
  4. プロジェクト名を入力します。
  5. プロジェクトの [可視性] を選択します。
  6. [作成] を選択します
  1. ブラウザーで、Azure DevOps Server にアクセスします。
  2. コレクションを選択します。
  3. [新しいプロジェクト] を選択して新しいプロジェクトを作成します。または、コレクション内で最初のプロジェクトを作成する場合は、[プロジェクトの作成] を選択します。
  4. プロジェクト名を入力します。
  5. プロジェクトの [可視性] を選択します。
  6. [作成] を選択します
  1. ブラウザー ウィンドウで、Azure DevOps Server にサインインし、コレクションを選択します。
  2. [新しいプロジェクト] を選択します。
  3. プロジェクト名を入力します。
  4. 必要に応じて、説明を入力します。
  5. [作成] を選択します

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

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

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

YAML スニペットの例:

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

ビルドは、Microsoft ホステッド エージェントで実行されます。 Windows、Linux、macOS で .NET Core SDK とランタイムを使用すると .NET Core プロジェクトをビルドできます。

または、セルフホステッド エージェントを使用することもできます。 セルフホステッド エージェントを使用すると、Azure DevOps Services で正式にサポートされていないプレビュー SDK またはプライベート SDK を使用し、増分ビルドを実行できます。

パイプラインを作成する

YAML パイプライン エディターまたはクラシック エディターを使用して、パイプラインを作成できます。 クラシック エディターを使用するには、[クラシック エディターを使用する] を選択します。

新しいパイプラインを作成し、ソースを選択する
  1. Azure DevOps 組織にサインインし、プロジェクトに移動します。

  2. [パイプライン] に移動し、最初のパイプラインを作成する場合は [新しいパイプライン] または [[パイプラインの作成] を選択します。

  3. 最初に、ソース コードの場所として GitHub を選択し、ウィザードの手順を実行します。

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

  5. リポジトリの一覧が表示されたら、目的のリポジトリを選択します。

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

パイプラインを構成する
  1. [構成] タブが表示されたら、[詳細を表示] を選択し 、一覧から [ASP.NET Core パイプライン テンプレート] を選択します 。

  2. 新しいパイプラインを調べて、YAML が何を行うかを確認します。

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

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

    新しい YAML パイプラインの [保存および実行] ボタン

  2. 必要に応じて、コミット メッセージを編集できます。

  3. 新しい azure-pipelines.yml ファイルをリポジトリにコミットするには、[保存して実行] を選択します。

  4. 起動中のパイプライン確認するには、[ジョブ] セクションでジョブを選択します。

パイプラインを作成して実行する

パイプラインは、YAML パイプライン エディターまたはクラシック エディターを使用して作成できます。

  1. プロジェクトに移動し、[パイプライン] を選択します。
  2. [パイプラインの作成] (または、これがプロジェクトの最初のパイプラインの場合は [新しいパイプライン]) を選びます。
ソースを選択する
  1. 使用するソース リポジトリを選択します。 この例では、GitHub Enterprise Server を使用します。

    1. GitHub アカウントの URL を入力します。 たとえば、https://github.com/<username> のようにします。
    2. GitHub アカウントの個人アクセス トークンを入力します。
    3. サービス接続名を入力します。 たとえば、my-github のようにします。
    4. [作成] を選択します
  2. 使用する GitHub リポジトリを選択します。

パイプラインを構成する
  1. [構成] タブで、[詳細を表示] を選択し、一覧から [ASP.NET Core パイプライン テンプレート] を選択します。

  2. 新しいパイプラインを調べて、YAML が何を行うかを確認します。

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

パイプラインを保存して実行します。
  1. [保存] を選択します。

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

  2. パイプライン YAML ファイルをリポジトリにコミットするには、必要に応じてコミット メッセージを編集し、[保存] を選択します。

  3. [実行] を選択してパイプラインを実行します。

パイプラインの実行時にビルド ログを表示するには、ページの上部にあるビルド番号を選択します。

  1. [保存して実行] を選択します。

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

  2. 新しい azure-pipelines.yml ファイルをリポジトリにコミットするには、必要に応じてコミット メッセージを編集し、[保存して実行] を選択します。

起動中のパイプライン確認するには、[ジョブ] セクションでジョブを選択します。

この時点で、動作するパイプラインが用意できました。これはすぐにカスタマイズできます。 パイプラインをカスタマイズする一般的な方法のいくつかについては、以下をさらにお読みください。

ビルド環境

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

たとえば、パイプライン YAML ファイルでプールとエージェントの機能を選択するには、次のようにします。

ビルド ジョブのエージェント プールとエージェントを選択できます。 エージェントは、その機能に基づいて指定されます。

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

パイプラインに UseDotNet@2 タスクを追加することで、特定のバージョンの .NET SDK をインストールできます。 物理システムで実行されるエージェントの場合、パイプラインを介して SDK とツールをインストールすると、エージェントのホスト上のビルド環境が変更されます。

より新しい SDK をインストールするには、次のスニペットの performMultiLevelLookuptrue に設定します。

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

Azure Pipelines を使用すると、インフラストラクチャを設定しなくても、Windows、Linux、または macOS で .NET Core プロジェクトをビルドできます。

たとえば、Ubuntu はパイプライン YAML ファイルで設定されます。

pool:
  vmImage: 'ubuntu-latest' 

イメージの完全な一覧とその他の構成例については、「Microsoft ホステッド エージェント」を参照してください。

Azure Pipelines の Microsoftホステッド エージェントには、サポートされている .NET Core SDKのプレインストールされたバージョンがいくつか含まれています。 Microsoft ホステッド エージェントには、以前のバージョンの .NET Core SDK の一部は含まれていません。 また、通常はプレリリース バージョンも含まれていません。 Microsoft がホストするエージェントでこれらのバージョンの SDK が必要な場合は、UseDotNet@2 タスクを使用してインストールします。

たとえば、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

ヒント

ツール インストーラーの実行コストを節約するために、LinuxmacOS、または Windows セルフホステッド エージェントを設定できます。 大規模なリポジトリがある場合や、増分ビルドを実行する場合は、セルフホステッド エージェントを使って時間を節約することもできます。 セルフホステッド エージェントは、Azure DevOps で正式にサポートされていない、または企業環境またはオンプレミス環境でのみ使用できるプレビューまたはプライベート SDK の使用にも役立ちます。

依存関係を復元する

自分がビルドしていないコードに依存する場合は NuGet が一般的な方法です。 .NET Core タスクを使って、またはパイプラインのスクリプトで直接 dotnet restore コマンドを実行することで、このプロジェクト ファイルに指定されている NuGet パッケージとプロジェクト固有のツールをダウンロードできます。 詳細については、「.NET Core タスク (DotNetCoreCLI@2)」を参照してください。

Azure Artifacts、NuGet.org、その他の外部または内部の NuGet リポジトリから、NuGet パッケージをダウンロードすることができます。 .NET Core タスクは、認証した NuGet フィードからパッケージを復元する場合に特に役立ちます。 フィードがパイプラインと同じプロジェクトにある場合、認証する必要はありません。

このパイプラインは、DotNetCoreCLI@2 タスク の dotnet restore に 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)'

dotnet restore コマンドは、.NET Core SDK がパッケージ化した NuGet.exe を使用します。また、.NET Core プロジェクト .csproj ファイルで指定されたパッケージのみを復元します。

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

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

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

NuGet.org からパッケージを復元するときに、接続の問題が原因でビルドが失敗する可能性があります。アップストリーム ソースで Azure Artifacts を使用して、パッケージをキャッシュできます。 パイプラインの資格情報は、Azure Artifacts に接続するときに自動的に使われます。 通常、これらの資格情報は、プロジェクト コレクション ビルド サービス アカウントから導出されます。 Azure Artifacts を使用して NuGet パッケージをキャッシュする方法の詳細については、「Azure Artifact フィードへの接続」を参照してください。

NuGet リポジトリを指定するには、リポジトリ内の NuGet.config ファイルに URL を入れます。 フィードが認証されている場合は、[プロジェクトの設定][サービス] タブで NuGet サービス接続を作成することで資格情報を管理します。

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

NuGet サービス接続の詳細については、NuGet フィードへの発行に関する記事を参照してください。

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

外部フィードからパッケージを復元するには、次の操作を行います。

YAML パイプライン エディターを使用してパイプラインに復元コマンドを追加するには、次のスニペットを azure-pipelines.yml ファイルに直接挿入するか、タスク アシスタントを使用して .NET Core タスクを追加します。

# 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>

<プレースホルダー>をサービス接続名に置き換えます。

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

タスク アシスタントを使用してビルド タスクを追加するには、次の手順を実行します。

  1. タスクを挿入する YAML ファイル内の位置に移動します。

  2. [タスク カタログ] で [.NET Core] を選択します。

  3. [コマンド] ドロップダウン リストで [restore コマンド] を選択します。

  4. [プロジェクトへのパス] フィールドに、.csproj ファイルへのパスを入力します。

  5. [追加] を選択します。

  6. [保存] を選び、変更をコミットします。

Note

カスタム フィードが NuGet.config ファイルで指定されていること、NuGet サービス接続で資格情報が指定されていることを確認します。

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

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

.NET Core タスクを使用した .NET Core ビルド

DotNetCoreCLI@2 タスクを使用してビルドする YAML の例:

steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)' # Update this to match your needs

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

タスク アシスタントを使用してビルド タスクを追加するには、次の手順を実行します。

  1. タスクを挿入する YAML ファイル内の位置に移動します。

  2. [タスク カタログ] で [.NET Core] を選択します。

  3. [コマンド] ドロップダウン リストで [build コマンド] を選択します。

  4. [プロジェクトへのパス] フィールドに、.csproj ファイルへのパスを入力します。

  5. [追加] を選択します。

  6. [保存] を選び、変更をコミットします。

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

スクリプトとして dotnet build を使用してビルドする YAML の例:

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

YAML パイプライン エディターを使用してビルド タスクを追加するには、ファイルを直接編集するか、コマンド ライン タスクを追加します。

次の手順を使用して、コマンド ライン タスクを追加します。

  1. タスクを挿入する YAML ファイル内の位置に移動します。

  2. [タスク カタログ] で [コマンド ライン] を選択します。

  3. 必要に応じて、[表示名] を追加します。

  4. パラメーターを指定して dotnet build コマンドを入力します。 たとえば、dotnet build --configuration $(buildConfiguration) のようにします。

  5. 作業ディレクトリとして .csproj ファイルへのパスを入力します。

  6. [追加] を選択します。

  7. [保存] を選び、変更をコミットします。

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

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

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

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

  1. タスクを挿入する YAML ファイル内の位置に移動します。

  2. [タスク カタログ] で [.NET Core] を選択します。

  3. 実行するコマンドを選択します。

  4. 必要なオプションを構成します。

  5. [追加] を選択します。

  6. [保存] を選び、変更をコミットします。

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

azure-pipelines.yml ファイルに .NET Core CLI コマンドを script として追加できます。

例:


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

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

Windows 上で動作するビルドに dotnetsay のような .NET Core グローバル ツールをインストールするには、以下のステップを実行します。

  1. .NET Core タスクを追加し、次のプロパティを設定します。
    • コマンド: カスタム。
      • プロジェクトへのパス: "空のままにします"。
    • カスタム コマンド: ツール
    • 引数: install -g dotnetsay
  2. ツールを実行するには、[コマンド ライン] を追加し、次のプロパティを設定します。
    • スクリプト:dotnetsay

テストの実行

リポジトリにテスト プロジェクトがある場合は、.NET Core タスクを使用して、MSTest、xUnit、NUnit などのテスト フレームワークを使用して単体テストを実行します。 テスト プロジェクトは、Microsoft.NET.Test.SDK バージョン 15.8.0 以降を参照する必要があります。 テスト結果は自動的にサービスに発行されます。 これらの結果はビルドの概要で使用できます。また、失敗したテストのトラブルシューティングやテストタイミングの分析に使用できます。

DotNetCoreCLI@2 タスクを使用するか、次のスニペットを azure-pipelines.yml ファイルに追加すると、パイプラインにテスト タスクに追加できます。

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

.NET Core タスク エディターを使用する場合は、[コマンド][テスト] に設定し、[プロジェクトへのパス] はソリューション内のテスト プロジェクトを参照する必要があります。

または、特定のロガーで dotnet test コマンドを実行し、[テスト結果の発行] タスクを使用します。

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'

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

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

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

次のスニペットを azure-pipelines.yml ファイルに追加します。

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

タスク エディターを使用して .NET Core タスクを追加するには:

  1. .NET Core タスクをビルド ジョブに追加し、次のプロパティを設定します。

    1. コマンド: test。
    2. プロジェクトへのパス: "ソリューションのテスト プロジェクトを参照するようにします"。
    3. 引数: --configuration $(BuildConfiguration) --collect "Code coverage"
  2. [テスト結果の発行] オプションはオンのままにします。

dotnet test コマンドを実行する場合は、テスト結果ロガーとカバレッジ オプションを指定します。 次に、テスト結果の発行タスクを使います。

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'

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

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

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

Coverlet を使ってテストを実行し、コード カバレッジを発行するには、次のタスクを実行します。

  • coverlet.collector NuGet パッケージの参照を追加します。

  • 次のスニペットを azure-pipelines.yml ファイルに追加します。

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

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

ビルド アーティファクトは、次の方法で発行できます。

  • Azure Pipelines への発行。
  • Azure Artifacts へのパッケージの発行。
  • NuGet パッケージを作成し、NuGet フィードに発行する。
  • Web アプリをデプロイするための .zip アーカイブの作成。

成果物を Azure Pipelines に発行する

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

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

次のスニペットを azure-pipelines.yml ファイルに追加します。

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'

Note

DotNetCoreCLI@2 タスクの publishWebProjects 入力は、デフォルトで true に設定されています。 このタスクは、既定でリポジトリにある "すべて" の Web プロジェクトを発行します。 その他のヘルプと情報については、GitHub 上のオープン ソース タスクを参照してください。

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

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

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

次のスニペットを azure-pipelines.yml ファイルに追加して、.zip ファイルとしてビルド アーティファクトを発行します。

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'

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

NuGet フィードに発行する

NuGet パッケージを作成して NuGet フィードに発行するには、次のスニペットを追加します。

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

Note

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

NuGet パッケージのバージョン管理と発行の詳細については、NuGet フィードへの発行に関する記事を参照してください。

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

NuGetCommand@2 を使用して Azure Artifact フィードにプッシュすることで、Azure Artifacts フィードに NuGet パッケージを発行できます。 たとえば、「Azure Pipelines を使用して NuGet パッケージを発行する」を参照してください。

Web アプリをデプロイする

Web アプリ に発行する準備ができている .zip ファイル アーカイブを作成するには、次のスニペットを追加します。

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

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

イメージをビルドしてコンテナー レジストリにプッシュする

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

シンボルを発行する

PublishSymbols@2 タスクを使用して、シンボルをA zure 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 ホステッド エージェントにはインストールされません。 新しいバージョンの .NET Core SDK がリリースされた後、すべての Azure Pipelines データ センターにロールアウトされるまでに数週間かかる場合があります。 このロールアウトが完了するまで待つ必要はありません。 Use .NET Core タスクを使用して、Microsoft ホステッド エージェントに必要な .NET Core SDK バージョンをインストールします。
  • 開発マシンの .NET Core SDK のバージョンとランタイムを調べて、エージェントと一致していることを確認します。 .NET Core SDK のバージョンを出力するコマンドライン スクリプト dotnet --version をパイプラインに含めることができます。 .NET Core Tool インストーラーを使ってエージェント上に同じバージョンを配置するか、プロジェクトと開発マシンを新しいバージョンの .NET Core SDK に更新します。

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

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

  • パッケージの復元中にビルドが断続的に失敗することがあります: NuGet.org に問題があるか、Azure データ センターと NuGet.org の間にネットワークの問題があります。アップストリーム ソースとして NuGet.org で Azure Artifacts を使用すると、ビルドの信頼性が向上するかどうかを調べることができます (これは Microsoft の制御下にないからです)。

  • 場合によっては、新しいバージョンの .NET Core SDK または Visual Studio がロールアウトされると、ビルドが破損することがあります。 たとえば、新しいバージョンまたは新しい機能の NuGet ツールが SDK に付属している場合、ビルドが破損する可能性があります。 この問題を切り分けるには、.NET Core Tool インストーラー タスクを使って、ビルドで使われている .NET Core SDK のバージョンを指定します。

よく寄せられる質問

Q: Azure Artifacts に関する詳細は、どこで学習できますか?

A: Azure Artifacts の Package Management

Q: .NET Core コマンドの詳細はどこで確認できますか?

A: .NET Core CLI ツール

Q: ソリューションでテストを実行する方法の詳細はどこで確認できますか?

A: .NET Core プロジェクトの単体テスト

Q: タスクの詳細はどこで確認できますか?

A: タスクのビルドとリリース