.NET 빌드 및 테스트하기
.NET 빌드 및 테스트하기
.NET 프로젝트를 빌드하고 테스트하는 지속적 통합(CI) 워크플로를 만드는 방법을 알려드릴게요. .NET Core SDK를 활용해서 패키지를 빌드·테스트·게시하는 과정을 배울 수 있어요.
출처: 문서
본문
.NET 프로젝트를 빌드하고 테스트하는 지속적 통합(CI) 워크플로를 만드는 방법을 알아봅니다.
소개
이 가이드는 .NET 패키지를 빌드, 테스트, 게시하는 방법을 보여줍니다.
GitHub 호스팅 러너에는 .NET Core SDK를 포함한 사전 설치된 소프트웨어가 있는 도구 캐시가 있습니다. 최신 소프트웨어의 전체 목록과 사전 설치된 .NET Core SDK 버전은 GitHub-hosted runners에 설치된 소프트웨어를 참고하세요.
사전 요구 사항
YAML 구문과 GitHub Actions에서의 사용법에 이미 익숙해야 합니다. 자세한 내용은 Workflow syntax for GitHub Actions를 참고하세요.
.NET Core SDK에 대한 기본적인 이해를 권장합니다. 자세한 내용은 Getting started with .NET을 참고하세요.
.NET 워크플로 템플릿 사용하기
빠르게 시작하려면 저장소의 .github/workflows 디렉터리에 워크플로 템플릿을 추가하세요.
GitHub는 대부분의 .NET 프로젝트에서 작동하는 .NET용 워크플로 템플릿을 제공합니다. 이 가이드의 이후 섹션은 이 워크플로 템플릿을 사용자 지정하는 방법의 예시를 제공합니다.
-
GitHub에서 저장소의 메인 페이지로 이동합니다.
-
저장소 이름 아래에서 Actions를 클릭합니다.

-
저장소에 이미 워크플로가 있다면 New workflow를 클릭합니다.
-
"Choose a workflow" 페이지에 추천 워크플로 템플릿 목록이 표시됩니다. "dotnet"을 검색하세요.
-
".NET" 워크플로에서 Configure를 클릭합니다.
-
필요에 따라 워크플로를 편집합니다. 예를 들어 .NET 버전을 변경합니다.
-
Commit changes를 클릭합니다.
dotnet.yml워크플로 파일이 저장소의.github/workflows디렉터리에 추가됩니다.
.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@v6
- 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 버전 사용하기
잡이 6.0.22 같은 특정 .NET 버전을 사용하도록 구성할 수 있습니다. 또는 시맨틱 버전 구문을 사용해서 최신 마이너 릴리스를 얻을 수 있습니다. 이 예시는 .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 패키지 관리자가 설치되어 있습니다. dotnet CLI를 사용해서 코드를 빌드하고 테스트하기 전에 NuGet 패키지 레지스트리에서 의존성을 설치할 수 있습니다. 예를 들어 아래 YAML은 Newtonsoft 패키지를 설치합니다.
steps:
- uses: actions/checkout@v6
- 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
의존성 캐싱하기
선택적 cache 입력을 사용해서 이후 워크플로를 위해 NuGet 의존성을 캐시할 수 있습니다. 예를 들어 아래 YAML은 NuGet global-packages 폴더를 캐시한 다음 Newtonsoft 패키지를 설치합니다. 두 번째 선택적 입력인 cache-dependency-path는 의존성 파일 packages.lock.json의 경로를 지정하는 데 사용할 수 있습니다.
자세한 내용은 Dependency caching reference를 참고하세요.
steps:
- uses: actions/checkout@v6
- 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
[!NOTE] 의존성 수에 따라 의존성 캐시를 사용하는 것이 더 빠를 수 있습니다. 크고 많은 의존성이 있는 프로젝트는 다운로드에 필요한 시간을 줄여 성능 향상을 볼 수 있습니다. 의존성이 적은 프로젝트는 큰 성능 향상을 보지 못할 수 있으며, NuGet이 캐시된 의존성을 설치하는 방식 때문에 오히려 약간 느려질 수도 있습니다. 성능은 프로젝트마다 다릅니다.
코드 빌드 및 테스트하기
로컬에서 코드를 빌드하고 테스트하는 데 사용하는 것과 같은 명령을 사용할 수 있습니다. 이 예시는 잡에서 dotnet build와 dotnet test를 사용하는 방법을 보여줍니다:
steps:
- uses: actions/checkout@v6
- 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 액션을 사용해서 테스트 결과를 업로드하는 방법을 보여줍니다.
자세한 내용은 Store and share data with workflow artifacts를 참고하세요.
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@v6
- 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@v4
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@v6
- 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