Примечание.
GitHubразмещенные в данный момент средства выполнения не поддерживаются в GitHub Enterprise Server.
Введение
В этом руководстве описано, как создать, протестировать и опубликовать пакет .NET.
GitHubразмещенные в среде runners имеют кэш средств с предварительно установленным программным обеспечением, которое включает пакет SDK для .NET Core. Полный список актуального программного обеспечения и предварительно установленных версий пакета SDK для .NET Core см. в разделе Программное обеспечение, установленное в средствах выполнения, размещенных в GitHub.
Необходимые компоненты
Вы уже должны быть знакомы с синтаксисом YAML и его использованием с GitHub Actions. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Рекомендуется иметь базовое представление о пакете SDK для .NET Core. Дополнительные сведения см. в разделе Приступая к работе с .NET.
Использование шаблона рабочего процесса .NET
Чтобы быстро приступить к работе, добавьте шаблон рабочего процесса в .github/workflows каталог репозитория.
GitHub предоставляет шаблон рабочего процесса для .NET, который должен работать для большинства проектов .NET. В последующих разделах этого руководства приведены примеры настройки этого шаблона рабочего процесса.
-
На GitHubперейдите на главную страницу репозитория. данных repositories.repositories.actions-tab %} 1. Если в вашем репозитории уже используется рабочий процесс, нажмите кнопку Создать рабочий процесс.
-
На странице "Выбор рабочего процесса" показан выбор рекомендуемых шаблонов рабочих процессов. Найдите dotnet.
-
В рабочем процессе .NET нажмите кнопку "Настроить".
Если вы не найдете шаблон рабочего процесса .NET, скопируйте следующий код рабочего процесса в новый файл, который вызывается
dotnet.ymlв.github/workflowsкаталоге репозитория.YAML name: .NET on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 6.0.x - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --no-restore - name: Test run: dotnet test --no-build --verbosity normalname: .NET on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 6.0.x - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --no-restore - name: Test run: dotnet test --no-build --verbosity normal -
Измените рабочий процесс по мере необходимости. Например, измените версию .NET.
-
Щелкните Зафиксировать изменения.
Указание версии .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.1.x', '6.0.x' ]
steps:
- uses: actions/checkout@v5
- name: Setup dotnet ${{ matrix.dotnet-version }}
uses: actions/setup-dotnet@v4
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, например 6.0.22. Кроме того, можно использовать синтаксис семантической версии, чтобы получить последний дополнительный выпуск. В этом примере используется последний дополнительный выпуск .NET 6.
- name: Setup .NET 6.x
uses: actions/setup-dotnet@v4
with:
# Semantic version range syntax or exact version of a dotnet version
dotnet-version: '6.x'
Установка зависимостей
Для размещенных в GitHub средств выполнения установлен диспетчер пакетов NuGet. Вы можете использовать CLI .NET для установки зависимостей из реестра пакетов NuGet перед сборкой и тестированием кода. Например, приведенный ниже код YAML устанавливает пакет Newtonsoft.
steps:
- uses: actions/checkout@v5
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: '6.0.x'
- name: Install dependencies
run: dotnet add package Newtonsoft.Json --version 12.0.1
Кэширование зависимостей
Можно кэшировать зависимости NuGet для будущих рабочих процессов с помощью необязательных cache входных данных. Например, YAML ниже кэширует папку global-packages NuGetNewtonsoft, а затем устанавливает пакет. Второй необязательный входcache-dependency-path, можно использовать для указания пути к файлу зависимостей: packages.lock.json
Дополнительные сведения см. в разделе Справочник по кэшированию зависимостей.
steps:
- uses: actions/checkout@v5
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: '6.x'
cache: true
- name: Install dependencies
run: dotnet add package Newtonsoft.Json --version 12.0.1
Примечание.
В зависимости от количества зависимостей может быть быстрее использовать кэш зависимостей. Проекты с большим количеством крупных зависимостей должны выигрывать в производительности из-за сокращения времени скачивания. Проекты с меньшим количеством зависимостей могут не получать значительного выигрыша в производительности, либо производительность может даже немного снижаться из-за того, как NuGet устанавливает кэшированные зависимости. Производительность варьируется от проекта к проекту.
Создание и тестирование кода
Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде. В этом примере показано, как использовать dotnet build и dotnet test в задании:
steps:
- uses: actions/checkout@v5
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: '6.0.x'
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test with the dotnet CLI
run: dotnet test --no-build
Упаковка данных рабочего процесса в виде артефактов
После завершения рабочего процесса можно отправить полученные артефакты для анализа. Например, может потребоваться сохранить файлы журналов, основные дампы, результаты теста или снимки экрана. В следующем примере показано, как использовать действие upload-artifact для отправки результатов теста.
Дополнительные сведения см. в разделе Хранение и предоставление общего доступа к данным с артефактами рабочего процесса.
name: dotnet package
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
dotnet-version: [ '3.1.x', '6.0.x' ]
steps:
- uses: actions/checkout@v5
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ matrix.dotnet-version }}
- name: Install dependencies
run: dotnet restore
- name: Test with dotnet
run: dotnet test --no-restore --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@v5
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '6.0.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