Skip to main content

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2023-01-18. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise にアップグレードします。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせく� さい

.NETでのビルドとテスト

.NETプロジェクトのビルドとテストのための継続的インテグレーション(CI)ワークフローを作成できます。

注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。

はじめに

このガイドは、.NETパッケージのビルド、テスト、公開の方法を紹介します。

GitHub ホステッド ランナーにはツール キャッシュとプレインストールされたソフトウェアがあり、それには .NET Core SDK が含まれます。 最新のソフトウェアの完全な一覧と、.NET Core SDK のプレインストールされたバージョンについては、GitHub ホステッド ランナーにインストールされているソフトウェアに関するページを参照してく� さい。

前提条件

YAMLの構文と、GitHub ActionsでのYAMLの使われ方に馴染んでいる必要があります。 詳細については、GitHub Actions のワークフロー構文に関するページを参照してく� さい。

.NET Core SDKの基本的な理解をしておくことをおすすめします。 詳しくは、「.NET の概要」をご覧く� さい。

.NET スターター ワークフローの使用

GitHub には、ほとんどの .NET プロジェクトで動作する .NET スターター ワークフローが用意されており、このガイドにはこのスターター ワークフローのカスタマイズ方法を示す例が含まれています。 詳細については、「.NET スターター ワークフロー」を参照してく� さい。

すぐに作業を開始するには、リポジトリの .github/workflows ディレクトリにスターター ワークフローを追� します。

name: dotnet package

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        dotnet-version: ['3.0', '3.1.x', '5.0.x' ]

    steps:
      - uses: actions/checkout@v2
      - name: Setup .NET Core SDK ${{ matrix.dotnet-version }}
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ matrix.dotnet-version }}
      - name: Install dependencies
        run: dotnet restore
      - name: Build
        run: dotnet build --configuration Release --no-restore
      - name: Test
        run: dotnet test --no-restore --verbosity normal

.NETのバージョンの指定

GitHub ホステッド ランナーにプレインストールされたバージョンの .NET Core SDK を使うには、setup-dotnet アクションを使います。 このアクションは、各ランナーのツール キャッシュから特定のバージョンの .NET を見つけて、必要なバイナリを PATH に追� します。 これらの変更は、ジョブの残りの部分で保持されます。

setup-dotnet アクションを使用すると、異なるランナーおよび .NET の異なるバージョンの間で一貫した動作が保証されるため、GitHub Actions で NET を使用する� �合の推奨される方法です。 セルフホステッド ランナーを使用している� �合は、.NET をインストールし、それを PATH に追� する必要があります。 詳細については、setup-dotnet アクションを参照してく� さい。

複数の.NETバージョンの利用

name: dotnet package

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        dotnet-version: [ '3.0', '3.1.x', '5.0.x' ]

    steps:
      - uses: actions/checkout@v2
      - name: Setup dotnet ${{ matrix.dotnet-version }}
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ matrix.dotnet-version }}
      # You can test your matrix by printing the current dotnet version
      - name: Display dotnet version
        run: dotnet --version

特定のバージョンの.NETの利用

3.1.3 のような特定のバージョンの .NET を使うようにジョブを構成できます。 あるいは、最新のマイナーリリースを取得するためにセマンティックバージョン構文を使うこともできます。 この例では.NET 3の最新のマイナーリリースを使っています。

    - name: Setup .NET 3.x
      uses: actions/setup-dotnet@v1
      with:
        # Semantic version range syntax or exact version of a dotnet version
        dotnet-version: '3.x'

依存関係のインストール

GitHubホストランナーには、NuGetパッケージマネージャーがインストールされています。 コードをビルドしてテストする前に、dotnetCLIを使って依存関係をNuGetパッケージレジストリからインストールしておくことができます。 たとえば、次の YAML は Newtonsoft パッケージをインストールします。

steps:
- uses: actions/checkout@v2
- name: Setup dotnet
  uses: actions/setup-dotnet@v1
  with:
    dotnet-version: '3.1.x'
- name: Install dependencies
  run: dotnet add package Newtonsoft.Json --version 12.0.1

コードのビルドとテスト

ローカルで使うのと同じコマンドを、コードのビルドとテストに使えます。 この例では、ジョブで dotnet builddotnet test を使用する方法を示します。

steps:
- uses: actions/checkout@v2
- name: Setup dotnet
  uses: actions/setup-dotnet@v1
  with:
    dotnet-version: '3.1.x'
- name: Install dependencies
  run: dotnet restore
- name: Build
  run: dotnet build
- name: Test with the dotnet CLI
  run: dotnet test

成果物としてのワークフローのデータのパッケージ化

ワークフローが完了すると、結果の成果物を分析のためにアップロードできます。 たとえば、ログファイル、コアダンプ、テスト結果、スクリーンショットを保存する必要があるかもしれません。 次の例では、upload-artifact アクションを使ってテスト結果をアップロードする方法を示します。

詳細については、「アーティファクトを使用してワークフロー データを永続化する」を参照してく� さい。

name: dotnet package

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        dotnet-version: [ '3.0', '3.1.x', '5.0.x' ]

      steps:
        - uses: actions/checkout@v2
        - name: Setup dotnet
          uses: actions/setup-dotnet@v1
          with:
            dotnet-version: ${{ matrix.dotnet-version }}
        - name: Install dependencies
          run: dotnet restore
        - name: Test with dotnet
          run: dotnet test --logger trx --results-directory "TestResults-${{ matrix.dotnet-version }}"
        - name: Upload dotnet test results
          uses: actions/upload-artifact@v2
          with:
            name: dotnet-results-${{ matrix.dotnet-version }}
            path: TestResults-${{ matrix.dotnet-version }}
          # Use always() to always run this step to publish test results when there are test failures
          if: ${{ always() }}

パッケージレジストリへの公開

CI テストに合� �したら .NET パッケージをパッケージ レジストリに公開するように、ワークフローを構成できます。 バイナリを公開するのに必要なトークンや認証情� �を保存するために、リポジトリシークレットを使うことができます。 次の例では、dotnet core cli を使ってパッケージを作成し、GitHub Packages に公開します。

name: Upload dotnet package

on:
  release:
    types: [created]

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '3.1.x' # SDK Version to use.
          source-url: https://nuget.pkg.github.com/<owner>/index.json
        env:
          NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
      - run: dotnet build --configuration Release <my project>
      - name: Create the package
        run: dotnet pack --configuration Release <my project>
      - name: Publish the package to GPR
        run: dotnet nuget push <my project>/bin/Release/*.nupkg