참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.
소개
이 가이드에서는 .NET 패키지를 빌드하고 테스트하고 게시하는 방법을 보여 줍니다.
GitHub 호스트 실행기에는 .NET Core SDK를 포함하는 소프트웨어가 사전 설치된 도구 캐시가 있습니다. 최신 소프트웨어 및 사전 설치된 버전의 .NET Core SDK에 대한 전체 목록은 GitHub 호스트 실행기에 설치된 소프트웨어를 참조하세요.
필수 조건
YAML 구문과 이를 GitHub Actions와 함께 사용하는 방법에 대해 잘 알고 있어야 합니다. 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을(를) 참조하세요.
.NET Core SDK를 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 .NET 시작을 참조하세요.
.NET 워크플로 템플릿 사용
빠르게 시작하려면 워크플로 템플릿을 리포지토리의 .github/workflows
디렉터리에 추가합니다.
GitHub은(는) 대부분의 .NET 프로젝트에서 작동하는 .NET 워크플로 템플릿을 제공합니다. 이 가이드의 후속 섹션에서는 이 워크플로 템플릿을 사용자 지정하는 방법에 대한 예시를 제공합니다.
-
GitHub에서 리포지토리의 기본 페이지로 이동합니다.
-
리포지토리 이름 아래에서 작업을 클릭합니다.
-
리포지토리에 워크플로가 이미 있는 경우 새 워크플로를 클릭합니다.
-
"워크플로 선택" 페이지에는 권장되는 워크플로 템플릿의 선택 항목이 표시됩니다. "dotnet"을 검색합니다.
-
".NET" 워크플로에서 구성을 클릭합니다.
".NET" 워크플로 템플릿을 찾을 수 없는 경우 다음 워크플로 코드를 리포지토리의
.github/workflows
디렉터리에 있는dotnet.yml
(이)라는 새 파일에 복사합니다.YAML name: .NET on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v3 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
name: .NET on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v3 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 버전 지정
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.1.x', '6.0.x' ]
steps:
- uses: actions/checkout@v4
- 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 버전 사용
6.0.22
과 같은 특정 버전의 .NET을 사용하도록 작업을 구성할 수 있습니다. 또는 의미 체계 버전 구문을 사용하여 최신 부 릴리스를 가져올 수 있습니다. 이 예시에서는 .NET 6의 최신 부 릴리스를 사용합니다.
- name: Setup .NET 6.x
uses: actions/setup-dotnet@v3
with:
# Semantic version range syntax or exact version of a dotnet version
dotnet-version: '6.x'
종속성 설치
GitHub 호스트 실행기에는 NuGet 패키지 관리자가 설치되어 있습니다. 코드를 빌드하고 테스트하기 전에 dotnet CLI를 사용하여 NuGet 패키지 레지스트리에서 종속성을 설치할 수 있습니다. 예를 들어 아래 YAML은 Newtonsoft
패키지를 설치합니다.
steps:
- uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.0.x'
- name: Install dependencies
run: dotnet add package Newtonsoft.Json --version 12.0.1
종속성 캐싱
선택적 cache
입력을 사용하여 향후 워크플로에 대한 NuGet 종속성을 캐시할 수 있습니다. 예를 들어 아래 YAML은 NuGet global-packages
폴더를 캐시한 다음 Newtonsoft
패키지를 설치합니다. 두 번째 선택적 입력인 cache-dependency-path
를 사용하여 종속성 파일: packages.lock.json
의 경로를 지정할 수 있습니다.
자세한 정보는 "워크플로 속도를 높이기 위한 종속성 캐싱" 항목을 참조하세요.
steps:
- uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
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@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.0.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.1.x', '6.0.x' ]
steps:
- uses: actions/checkout@v4
- 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() }}
패키지 레지스트리에 게시
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@v4
- uses: actions/setup-dotnet@v3
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