Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Создание и тестирование для .NET

Можно создать рабочий процесс непрерывной интеграции (CI) для сборки и тестирования проекта .NET.

Введение

В этом руководстве описано, как создать, протестировать и опубликовать пакет .NET.

Размещенные в GitHub средства выполнения имеют кэш инструментов с предварительно установленным программным обеспечением, включающим в себя пакет SDK для .NET Core. Полный список актуального программного обеспечения и предварительно установленных версий пакета SDK для .NET Core см. в разделе Программное обеспечение, установленное в средствах выполнения, размещенных в GitHub.

Предварительные требования

Вы уже должны быть знакомы с синтаксисом YAML и его использованием с GitHub Actions. Дополнительные сведения см. в статье Синтаксис рабочего процесса для GitHub Actions.

Рекомендуется иметь базовое представление о пакете SDK для .NET Core. Дополнительные сведения см. в разделе Приступая к работе с .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@v3
      - name: Setup .NET Core SDK ${{ matrix.dotnet-version }}
        uses: actions/setup-dotnet@v3
        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

Чтобы использовать предустановленную версию пакета SDK для .NET Core в размещенном в GitHub средстве выполнения, используйте действие 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@v3
      - name: Setup dotnet ${{ matrix.dotnet-version }}
        uses: actions/setup-dotnet@v3
        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

Вы можете настроить задание для использования конкретной версии .NET, например 3.1.3. Кроме того, можно использовать синтаксис семантической версии, чтобы получить последний дополнительный выпуск. В этом примере используется последний дополнительный выпуск .NET 3.

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

Установка зависимостей

Для размещенных в GitHub средств выполнения установлен диспетчер пакетов NuGet. Вы можете использовать CLI .NET для установки зависимостей из реестра пакетов NuGet перед сборкой и тестированием кода. Например, приведенный ниже код YAML устанавливает пакет Newtonsoft.

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

Кэширование зависимостей

Зависимости NuGet можно кэшировать с помощью уникального ключа, что позволяет восстановить зависимости для будущих рабочих процессов посредством действия cache. Например, приведенный ниже код YAML устанавливает пакет Newtonsoft.

Дополнительные сведения см. в разделе Кэширование зависимостей для ускорения рабочих процессов.

steps:
- uses: actions/checkout@v3
- name: Setup dotnet
  uses: actions/setup-dotnet@v3
  with:
    dotnet-version: '3.1.x'
- uses: actions/cache@v3
  with:
    path: ~/.nuget/packages
    # Look to see if there is a cache hit for the corresponding requirements file
    key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
    restore-keys: |
      ${{ runner.os }}-nuget
- name: Install dependencies
  run: dotnet add package Newtonsoft.Json --version 12.0.1

Примечание. В зависимости от количества зависимостей может быть быстрее использовать кэш зависимостей. Проекты с большим количеством крупных зависимостей должны выигрывать в производительности из-за сокращения времени скачивания. Проекты с меньшим количеством зависимостей могут не получать значительного выигрыша в производительности, либо производительность может даже немного снижаться из-за того, как NuGet устанавливает кэшированные зависимости. Производительность варьируется от проекта к проекту.

Создание и тестирование кода

Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде. В этом примере показано, как использовать dotnet build и dotnet test в задании:

steps:
- uses: actions/checkout@v3
- name: Setup dotnet
  uses: actions/setup-dotnet@v3
  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@v3
        - name: Setup dotnet
          uses: actions/setup-dotnet@v3
          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@v3
          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() }}

Публикация в реестрах пакетов

Вы можете настроить рабочий процесс для публикации пакета .NET в реестре пакетов после прохождения тестов CI. Вы можете использовать секреты репозитория для хранения любых токенов или учетных данных, необходимых для публикации двоичного файла. В следующем примере пакет создается и публикуется в GitHub Packages с помощью dotnet core cli.

name: Upload dotnet package

on:
  release:
    types: [created]

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-dotnet@v3
        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