.NET Core 앱 빌드, 테스트 및 배포

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Azure Pipeline을 사용하여 .NET Core 프로젝트를 자동으로 빌드, 테스트 및 배포합니다. 이 문서에서는 다음 작업을 수행하는 방법을 보여 줍니다.

참고 항목

.NET Framework 프로젝트에 대한 도움말은 .NET Framework를 사용하여 ASP.NET 앱 빌드를 참조 하세요.

필수 조건

  • 리포지토리를 만들 수 있는 GitHub 계정. 체험 계정 만들기
  • Azure DevOps 조직 및 프로젝트. 체험 계정 만들기
  • Microsoft 호스팅 에이전트에서 파이프라인을 실행하는 기능. 병렬 작업을 구매하거나 무료 계층을 요청할 수 있습니다.
  • 리포지토리를 만들 수 있는 GitHub 계정. 체험 계정 만들기
  • Azure DevOps 컬렉션입니다.
  • Docker가 설치되어 에이전트의 호스트에서 실행되는 자체 호스팅 에이전트에서 파이프라인을 실행하는 기능입니다.

첫 번째 파이프라인 만들기

Azure Pipelines를 새로 사용하시나요? 그렇다면 먼저 다음 섹션을 시도하는 것이 좋습니다.

.NET 프로젝트 만들기

작업할 .NET 프로젝트가 없는 경우 로컬 시스템에 새 프로젝트를 만듭니다. 최신 .NET 8.0 SDK를 설치하여 시작합니다.

  1. 터미널 창을 엽니다.

  2. 프로젝트 디렉터리를 만들고 해당 디렉터리로 이동합니다.

  3. 새 .NET 8 웹앱을 만듭니다.

    dotnet new webapp -f net8.0
    
  4. 동일한 터미널 세션에서 프로젝트 디렉터리의 명령을 사용하여 애플리케이션을 dotnet run 로컬로 실행합니다.

    dotnet run
    
  5. 애플리케이션이 시작되면 Ctrl-C를 눌러 종료합니다.

Git 리포지토리를 만들고 GitHub에 연결

  1. 프로젝트 디렉터리에서 로컬 git 리포지토리를 만들고 애플리케이션 코드를 기본 분기에 커밋합니다.

  2. 로컬 Git 리포지토리를 GitHub 리포지토리로 커넥트.

DevOps 프로젝트 만들기

Azure Pipelines에 로그인합니다. 로그인하면 브라우저가 https://dev.azure.com/my-organization-name으로 이동하여 Azure DevOps 대시보드를 표시합니다.

  1. 브라우저에서 dev.azure.com 이동하여 로그인합니다.
  2. 조직을 선택합니다.
  3. 조직에서 첫 번째 프로젝트를 만드는 경우 새 프로젝트를 선택하거나 프로젝트 만들기를 선택하여 새 프로젝트를 만듭니다.
  4. 프로젝트 이름을 입력합니다.
  5. 프로젝트의 표시 유형을 선택합니다.
  6. 만들기를 실행합니다.
  1. 브라우저에서 Azure DevOps Server로 이동합니다.
  2. 컬렉션을 선택합니다.
  3. 컬렉션에서 첫 번째 프로젝트를 만드는 경우 새 프로젝트를 선택하거나 프로젝트 만들기를 선택하여 새 프로젝트를 만듭니다.
  4. 프로젝트 이름을 입력합니다.
  5. 프로젝트의 표시 유형을 선택합니다.
  6. 만들기를 실행합니다.
  1. 브라우저 창에서 Azure DevOps Server에 로그인하고 컬렉션을 선택합니다.
  2. 새 프로젝트를 선택합니다.
  3. 프로젝트 이름을 입력합니다.
  4. 선택적으로 설명을 입력합니다.
  5. 만들기를 실행합니다.

빌드 환경 설정

빌드는 자체 호스팅 에이전트에서 실행됩니다. 에이전트에 필요한 버전의 .NET Core SDK 및 런타임이 설치되어 있는지 확인합니다. Windows, Linux, macOS 및 Docker에서 .NET Core SDK 및 런타임을 사용하여 .NET Core 프로젝트를 빌드할 수 있습니다.

파이프라인 YAML 파일에 UseDotNet@2 작업을 추가하여 특정 버전의 .NET SDK를 설치하거나 클래식 편집기를 사용하여 파이프라인에 작업을 추가할 수 있습니다.

YAML 코드 조각 예제:

steps:
- task: UseDotNet@2
  inputs:
    version: '8.x'

빌드는 Microsoft 호스팅 에이전트에서 실행됩니다. Windows, Linux 및 macOS에서 .NET Core SDK 및 런타임을 사용하여 .NET Core 프로젝트를 빌드할 수 있습니다.

또는 자체 호스팅 에이전트사용할 수 있습니다. 자체 호스팅 에이전트를 사용하면 Azure DevOps Services에서 공식적으로 지원되지 않는 미리 보기 또는 프라이빗 SDK를 사용하고 증분 빌드를 실행할 수 있습니다.

파이프라인 만들기

YAML 파이프라인 편집기 또는 클래식 편집기를 사용하여 파이프라인을 만들 수 있습니다. 클래식 편집기를 사용하려면 클래식 편집기 사용을 선택합니다.

새 파이프라인 만들기 및 원본 선택
  1. Azure DevOps 조직에 로그인하고, 프로젝트로 이동합니다.

  2. 파이프라인으로 이동한 다음 새 파이프라인을 선택하거나 첫 번째 파이프라인을 만드는 경우 파이프라인 만들기를 선택합니다.

  3. 먼저 소스 코드의 위치로 GitHub 선택하여 마법사의 단계를 수행합니다.

  4. 로그인할 GitHub로 리디렉션될 수 있습니다. 그렇다면 GitHub 자격 증명을 입력합니다.

  5. 리포지토리 목록이 표시되면 리포지토리를 선택합니다.

  6. Azure Pipelines 앱을 설치하도록 GitHub로 리디렉션될 수 있습니다. 그렇다면 승인 및 설치를 선택합니다.

파이프라인 구성
  1. 구성 탭이 나타나면 자세히 표시를 선택하고 목록에서 ASP.NET Core 파이프라인 템플릿을 선택합니다.

  2. 새 파이프라인을 검사하여 YAML이 수행하는 작업을 확인합니다.

요구 사항에 맞게 YAML 파일을 사용자 지정할 수 있습니다. 예를 들어 에이전트 풀을 지정하거나 작업을 추가하여 다른 .NET SDK를 설치할 수 있습니다.

파이프라인 저장 및 실행
  1. 준비가 되면 저장 및 실행을 선택합니다.

    새 YAML 파이프라인의 저장 및 실행 단추

  2. 필요에 따라 커밋 메시지 편집할 수 있습니다.

  3. 저장 및 실행을 선택하여 azure-pipelines.yml 파일을 리포지토리에 커밋합니다.

  4. 파이프라인의 작동을 확인하려면 작업 섹션에서 작업을 선택합니다.

파이프라인 만들기 및 실행

YAML 파이프라인 편집기 또는 클래식 편집기를 사용하여 파이프라인을 만들 수 있습니다.

  1. 프로젝트로 이동하여 파이프라인을 선택합니다.
  2. 이 프로젝트에 대한 첫 번째 파이프라인을 만드는 경우 파이프라인 만들기 또는 새 파이프라인을 선택합니다.
원본 선택
  1. 원본 리포지토리를 선택합니다. 이 예제에서는 GitHub Enterprise Server를 사용합니다.

    1. GitHub 계정의 URL을 입력합니다. 예들 들어 https://github.com/<username>입니다.
    2. GitHub 계정에 대한 개인용 액세스 토큰을 입력합니다.
    3. 서비스 연결 이름을 입력합니다. 예들 들어 my-github입니다.
    4. 만들기를 실행합니다.
  2. GitHub 리포지토리를 선택합니다.

파이프라인 구성
  1. 구성 탭에서 자세히 표시를 선택하고 목록에서 ASP.NET Core 파이프라인 템플릿을 선택합니다.

  2. 새 파이프라인을 검사하여 YAML이 수행하는 작업을 확인합니다.

요구 사항에 맞게 YAML 파일을 사용자 지정할 수 있습니다. 예를 들어 .NET SDK를 설치하거나 프로젝트를 테스트하고 게시하는 작업을 추가할 수 있습니다.

파이프라인 저장 및 실행
  1. 저장을 선택합니다.

    새 YAML 파이프라인의 저장 및 실행 단추를 보여 주는 스크린샷

  2. 파이프라인 YAML 파일을 리포지토리에 커밋하려면 필요에 따라 커밋 메시지 편집하고 저장을 선택합니다.

  3. 실행을 선택하여 파이프라인을 실행합니다.

파이프라인 실행 시 빌드 로그를 보려면 페이지 맨 위에 있는 빌드 번호를 선택합니다.

  1. 저장 및 실행을 선택합니다.

    새 YAML 파이프라인의 저장 및 실행 단추를 보여 주는 스크린샷

  2. azure-pipelines.yml 파일을 리포지토리에 커밋하려면 필요에 따라 커밋 메시지 편집하고 저장 및 실행을 선택합니다.

파이프라인의 작동을 확인하려면 작업 섹션에서 작업을 선택합니다.

이제 사용자 지정할 준비가 된 작업 파이프라인이 있습니다. 파이프라인을 사용자 지정하는 몇 가지 일반적인 방법에 대해 자세히 알아보세요.

빌드 환경

Azure Pipelines는 자체 호스팅 에이전트를 사용하여 .NET Core 프로젝트를 빌드합니다. 에이전트에 필요한 버전의 .NET Core SDK 및 런타임이 설치되어 있는지 확인합니다. Windows, Linux, macOS 및 Docker에서 .NET Core SDK 및 런타임을 사용하여 .NET Core 프로젝트를 빌드할 수 있습니다.

예를 들어 파이프라인 YAML 파일에서 풀 및 에이전트 기능을 선택하려면 다음을 수행합니다.

빌드 작업에 대한 에이전트 풀 및 에이전트를 선택할 수 있습니다. 에이전트는 해당 기능에 따라 지정됩니다.

pool:
  name: myPrivateAgents
  demands:
  - agent.os -equals Darwin
  - anotherCapability -equals somethingElse

파이프라인에 UseDotNet@2 작업을 추가하여 특정 버전의 .NET SDK를 설치할 수 있습니다. 물리적 시스템에서 실행되는 에이전트의 경우 파이프라인을 통해 SDK 및 도구를 설치하면 에이전트 호스트의 빌드 환경이 변경됩니다.

최신 SDK를 설치하려면 다음 코드 조각으로 설정합니다 performMultiLevelLookuptrue .

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

Azure Pipelines를 사용하여 인프라를 설정할 필요 없이 Windows, Linux 또는 macOS에서 .NET Core 프로젝트를 빌드할 수 있습니다.

예를 들어 Ubuntu는 파이프라인 YAML 파일에서 여기에 설정됩니다.

pool:
  vmImage: 'ubuntu-latest' 

이미지의 전체 목록 및 추가 구성 예제는 Microsoft 호스팅 에이전트를 참조하세요.

Azure Pipelines의 Microsoft 호스팅 에이전트에는 지원되는 .NET Core SDK의 미리 설치된 여러 버전이 포함됩니다. Microsoft 호스팅 에이전트는 이전 버전의 .NET Core SDK를 포함하지 않습니다. 또한 일반적으로 시험판 버전은 포함되지 않습니다. Microsoft 호스팅 에이전트에서 이러한 버전의 SDK가 필요한 경우 UseDotNet@2 작업을 사용하여 설치합니다.

예를 들어 5.0.x SDK를 설치하려면 다음 코드 조각을 추가합니다.

steps:
- task: UseDotNet@2
  inputs:
    version: '5.x'

Windows 에이전트에는 이미 .NET Core 런타임이 포함되어 있습니다. 최신 SDK를 설치하려면 다음 코드 조각으로 설정합니다 performMultiLevelLookuptrue .

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

도구 설치 관리자를 실행하는 비용을 절약하려면 Linux, macOS 또는 Windows자체 호스팅 에이전트를 설정할 수 있습니다. 또한 자체 호스팅 에이전트를 사용하여 큰 리포지토리가 있거나 증분 빌드를 실행하는 경우 추가 시간을 절약할 수 있습니다. 자체 호스팅 에이전트는 Azure DevOps에서 공식적으로 지원되지 않거나 회사 또는 온-프레미스 환경에서만 사용할 수 있는 미리 보기 또는 프라이빗 SDK를 사용하는 데 도움이 될 수 있습니다.

종속성 복원

NuGet은 빌드하지 않는 코드에 의존하는 인기 있는 방법입니다. .NET Core 태스크를 통해 또는 파이프라인의 스크립트에서 직접 명령을 실행 dotnet restore 하여 프로젝트 파일에 지정된 NuGet 패키지 및 프로젝트별 도구를 다운로드할 수 있습니다. 자세한 내용은 .NET Core 작업(DotNetCoreCLI@2)을 참조하세요.

Azure Artifacts, NuGet.org 또는 기타 외부 또는 내부 NuGet 리포지토리에서 NuGet 패키지를 다운로드할 수 있습니다. .NET Core 작업은 인증된 NuGet 피드에서 패키지를 복원하는 데 특히 유용합니다. 피드가 파이프라인과 동일한 프로젝트에 있는 경우 인증할 필요가 없습니다.

이 파이프라인은 DotNetCoreCLI@2 작업에서 Azure Artifact 피드 dotnet restore사용합니다.

trigger:
- main

pool:
  vmImage: 'windows-latest'

steps:
- task: UseDotNet@2
  displayName: 'Install .NET Core SDK'
  inputs:
    version: 8.x
    performMultiLevelLookup: true
    includePreviewVersions: true # Required for preview versions

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    feedsToUse: 'select'
    vstsFeed: 'my-vsts-feed' # A series of numbers and letters

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    arguments: '--configuration $(buildConfiguration)'
  displayName: 'dotnet build $(buildConfiguration)'

dotnet restore 명령은 .NET Core SDK와 함께 패키지된 것을 사용 NuGet.exe 하며 .NET Core 프로젝트 .csproj 파일에 지정된 패키지만 복원할 수 있습니다.

솔루션에 Microsoft .NET Framework 프로젝트가 있거나 종속성을 지정하는 데 사용하는 package.json 경우 NuGet 작업을 사용하여 해당 종속성을 복원합니다.

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'

.NET Core SDK 버전 2.0 이상에서는 다음과 같은 dotnet build명령을 실행할 때 패키지가 자동으로 복원됩니다. 그러나 인증된 피드를 사용하는 경우 .NET Core 작업을 사용하여 패키지를 복원해야 합니다.

NuGet.org 패키지를 복원할 때 연결 문제로 인해 빌드가 실패할 수 있습니다. 업스트림 원본과 함께 Azure Artifacts를 사용하여 패키지를 캐시할 수 있습니다. 파이프라인의 자격 증명은 Azure Artifacts에 연결할 때 자동으로 사용됩니다. 이러한 자격 증명은 일반적으로 프로젝트 컬렉션 빌드 서비스 계정에서 파생됩니다. Azure Artifacts를 사용하여 NuGet 패키지를 캐시하는 방법에 대한 자세한 내용은 Azure Artifact 피드에 대한 커넥트 참조하세요.

NuGet 리포지토리를 지정하려면 리포지토리의 파일에 URL을 NuGet.config 넣습니다. 피드가 인증된 경우 Project 설정 아래의 서비스 탭에서 NuGet 서비스 연결을 만들어 해당 자격 증명을 관리합니다.

Microsoft 호스팅 에이전트를 사용하는 경우 빌드를 실행할 때마다 새 머신이 만들어지며, 이 컴퓨터는 실행 시 패키지를 복원합니다. 복원에는 상당한 시간이 걸릴 수 있습니다. 완화하려면 Azure Artifacts 또는 자체 호스팅 에이전트를 사용하여 패키지 캐시를 사용할 수 있습니다.

NuGet 서비스 연결에 대한 자세한 내용은 NuGet 피드에 게시를 참조 하세요.

외부 피드에서 패키지 복원

외부 피드에서 패키지를 복원하려면 다음을 수행합니다.

다음 코드 조각을 파일에 직접 삽입하거나 작업 도우미 사용하여 .NET Core 작업을 추가하여 YAML 파이프라인 편집기를 사용하여 파이프라인에 복원 명령을 추가할 수 있습니다azure-pipelines.yml.

# do this before your build tasks
steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config    # Relative to root of the repository
    externalFeedCredentials: <Name of the NuGet service connection>

<자리 표시자를> 서비스 연결 이름으로 바꿉 있습니다.

작업 도우미 사용하려면 다음을 수행합니다.

작업 도우미 사용하여 빌드 작업을 추가하려면 다음 단계를 수행합니다.

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.

  2. 작업 카탈로그에서 .NET Core를 선택합니다.

  3. 명령 드롭다운 목록에서 복원 명령을 선택합니다.

  4. 프로젝트 경로 필드에 파일 경로를 입력합니다.csproj.

  5. 추가를 선택합니다.

  6. 저장을 선택하여 변경 내용을 커밋합니다.

참고 항목

사용자 지정 피드가 파일에 지정되고 NuGet.config 자격 증명이 NuGet 서비스 연결에 지정되어 있는지 확인합니다.

프로젝트 빌드

명령을 실행하여 .NET Core 프로젝트를 빌드합니다 dotnet build . 명령줄 스크립트로 또는 .NET Core 작업을 사용하여 파이프라인에 명령을 추가할 수 있습니다.

.NET Core 작업을 사용하여 .NET Core 빌드

DotNetCoreCLI@2 작업을 사용하여 빌드하는 YAML 예제:

steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)' # Update this to match your needs

파일을 직접 편집하거나 작업 도우미 사용하여 .NET Core 작업을 추가하여 YAML 파이프라인 편집기를 사용하여 빌드 작업을 추가할 수 있습니다.

작업 도우미 사용하여 빌드 작업을 추가하려면 다음 단계를 수행합니다.

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.

  2. 작업 카탈로그에서 .NET Core를 선택합니다.

  3. 명령 드롭다운 목록에서 빌드 명령을 선택합니다.

  4. 프로젝트 경로 필드에 파일 경로를 입력합니다.csproj.

  5. 추가를 선택합니다.

  6. 저장을 선택하여 변경 내용을 커밋합니다.

명령줄 스크립트를 사용하여 .NET Core 빌드

스크립트로 사용하여 dotnet build 빌드하는 YAML 예제:

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

파일을 직접 편집하거나 명령줄 작업을 추가하여 YAML 파이프라인 편집기를 사용하여 빌드 작업을 추가할 수 있습니다.

명령줄 작업을 추가하려면 다음 단계를 사용합니다.

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.

  2. 작업 카탈로그에서 명령줄을 선택합니다.

  3. 필요에 따라 표시 이름을 추가합니다.

  4. 매개 변수를 사용하여 dotnet build 명령을 입력합니다. 예들 들어 dotnet build --configuration $(buildConfiguration)입니다.

  5. 파일 경로를 .csproj 작업 디렉터리로 입력합니다.

  6. 추가를 선택합니다.

  7. 저장을 선택하여 변경 내용을 커밋합니다.

파이프라인에 .NET SDK 명령 추가

프로젝트에 .NET SDK 명령을 스크립트로 추가하거나 .NET Core 작업을 사용할 수 있습니다. .NET Core 작업(DotNetCoreCLI@2) 작업을 사용하면 파이프라인에 dotnet CLI 명령을 쉽게 추가할 수 있습니다. YAML 파일을 편집하거나 클래식 편집기를 사용하여 .NET Core 작업을 추가할 수 있습니다.

.NET Core 작업을 사용하여 .NET CLI 명령 추가

YAML 파이프라인 편집기를 사용하여 .NET Core CLI 명령을 추가하려면 다음 단계를 수행합니다.

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.

  2. 작업 카탈로그에서 .NET Core를 선택합니다.

  3. 실행할 명령을 선택합니다.

  4. 필요한 옵션을 구성합니다.

  5. 추가를 선택합니다.

  6. 저장을 선택하여 변경 내용을 커밋합니다.

스크립트를 사용하여 .NET Core CLI 명령 추가

파일에서 .NET Core CLI 명령을 추가할 script 수 있습니다 azure-pipelines.yml .

예시:


steps:
# ...
- script: dotnet test <test-project> 

도구 설치

Windows에서 실행되는 빌드에서 dotnetsay와 같은 .NET Core 글로벌 도구를 설치하려면 다음 단계를 수행합니다.

  1. .NET Core 작업을 추가하고 다음 속성을 설정합니다.
    • 명령: 사용자 지정.
      • 프로젝트 경로: 비워 둡니다.
    • 사용자 지정 명령: 도구.
    • 인수: install -g dotnetsay.
  2. 도구를 실행하려면 명령줄추가하고 다음 속성을 설정합니다.
    • 스크립트:dotnetsay.

테스트 실행

리포지토리에 테스트 프로젝트가 있는 경우 .NET Core 작업을 사용하여 MSTest, xUnit 및 NUnit과 같은 테스트 프레임워크를 사용하여 단위 테스트를 실행할 수 있습니다. 테스트 프로젝트는 Microsoft.NET.Test.SDK 버전 15.8.0 이상을 참조해야 합니다. 테스트 결과는 서비스에 자동으로 게시됩니다. 이러한 결과는 빌드 요약에서 사용할 수 있으며 실패한 테스트 및 테스트 타이밍 분석 문제를 해결하는 데 사용할 수 있습니다.

DotNetCoreCLI@2 작업을 사용하여 파이프라인에 테스트 태스크를 추가하거나 파일에 다음 코드 조각을 추가할 수 있습니다azure-pipelines.yml.

steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

.NET Core 태스크 편집기를 사용하는 경우 명령을 테스트 하도록 설정하고 프로젝트의 경로는 솔루션의 테스트 프로젝트를 참조해야 합니다.

또는 특정 로거를 dotnet test 사용하여 명령을 실행한 다음 테스트 결과 게시 작업을 사용할 수 있습니다.

steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx
- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

코드 검사 수집

Windows 플랫폼에서 빌드하는 경우 기본 제공 검사 데이터 수집기를 사용하여 코드 검사 메트릭을 수집할 수 있습니다. 테스트 프로젝트는 Microsoft.NET.Test.SDK 버전 15.8.0 이상을 참조해야 합니다.

.NET Core 작업을 사용하여 테스트를 실행하면 검사 데이터가 서버에 자동으로 게시됩니다. Visual .coverage Studio에서 볼 수 있도록 빌드 요약에서 파일을 다운로드할 수 있습니다.

파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml .

steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'

작업 편집기를 통해 .NET Core 작업을 추가하려면 다음을 수행합니다.

  1. 빌드 작업에 .NET Core 작업을 추가하고 다음 속성을 설정합니다.

    1. 명령: test.
    2. 프로젝트 경로: 솔루션의 테스트 프로젝트를 참조해야 합니다.
    3. 인수: --configuration $(BuildConfiguration) --collect "Code coverage".
  2. 테스트 결과 게시 옵션이 다시 선택되었는지 기본.

명령을 실행 dotnet test 하도록 선택한 경우 테스트 결과 로거 및 검사 옵션을 지정합니다. 그런 다음 테스트 결과 게시 태스크를 사용합니다.

steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx --collect "Code coverage"
- task: PublishTestResults@2
  inputs:
    testRunner: VSTest
    testResultsFiles: '**/*.trx'

Coverlet을 사용하여 코드 검사 메트릭 수집

Linux 또는 macOS에서 빌드하는 경우 Coverlet 또는 유사한 도구를 사용하여 코드 검사 메트릭을 수집할 수 있습니다.

PublishCodeCoverageResults@1(코드 검사 결과) 작업을 사용하여 코드 검사 결과를 서버에 게시할 수 있습니다. 검사 도구는 Cobertura 또는 JaCoCo 검사 형식으로 결과를 생성하도록 구성해야 합니다.

Coverlet을 사용하여 테스트를 실행하고 코드 검사를 게시하려면 다음 작업을 수행합니다.

  • coverlet.collector NuGet 패키지에 대한 참조를 추가합니다.

  • 파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml .

    - task: UseDotNet@2
      inputs:
        version: '8.x'
        includePreviewVersions: true # Required for preview versions
    
    - task: DotNetCoreCLI@2
      displayName: 'dotnet build'
      inputs:
        command: 'build'
        configuration: $(buildConfiguration)
    
    - task: DotNetCoreCLI@2
      displayName: 'dotnet test'
      inputs:
        command: 'test'
        arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'
        publishTestResults: true
        projects: 'MyTestLibrary' # update with your test project directory
    
    - task: PublishCodeCoverageResults@1
      displayName: 'Publish code coverage report'
      inputs:
        codeCoverageTool: 'Cobertura'
        summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
    

코드 패키지 및 배달

다음을 통해 빌드 아티팩트 게시할 수 있습니다.

  • Azure Pipelines에 게시
  • Azure Artifacts에 패키지 게시
  • NuGet 패키지를 만들고 NuGet 피드에 게시합니다.
  • 웹앱을 배포하는 .zip 보관 파일을 만듭니다.

Azure Pipelines에 아티팩트 게시

.NET 빌드 의 출력을 파이프라인에 게시하려면 다음 작업을 수행합니다.

  • .NET CLI에서 실행 dotnet publish --output $(Build.ArtifactStagingDirectory) 하거나 게시 명령을 사용하여 DotNetCoreCLI@2 작업을 추가합니다.
  • 파이프라인 아티팩트 게시 작업을 사용하여 아티팩트 게시

파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml .

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsite'

참고 항목

DotNetCoreCLI@2 작업에는 publishWebProjects 기본적으로 true설정된 입력이 있습니다. 이 작업은 기본적으로 리포지 토리의 모든 웹 프로젝트를 게시합니다. GitHub의 오픈 소스 작업에서 더 많은 도움말과 정보를 찾을 수 있습니다.

게시하기 전에 빌드 디렉터리에 더 많은 파일을 복사하려면 파일 복사(CopyFile@2) 작업을 사용합니다.

.NET 빌드 의 출력을 파이프라인에 게시하려면 다음 작업을 수행합니다.

  • CLI에서 실행 dotnet publish --output $(Build.ArtifactStagingDirectory) 하거나 게시 명령을 사용하여 DotNetCoreCLI@2 작업을 추가합니다.
  • 빌드 아티팩트 게시(PublishBuildArtifacts@1) 작업을 사용하여 아티팩트 게시

다음 코드 azure-pipelines.yml 조각을 파일에 추가하여 빌드 아티팩트를 .zip 파일로 게시합니다.

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'

자세한 내용은 빌드 아티팩트 게시 및 다운로드를 참조 하세요.

NuGet 피드에 게시

NuGet 패키지를 만들고 NuGet 피드에 게시하려면 다음 코드 조각을 추가합니다.

steps:
# ...
# do this near the end of your pipeline in most cases
- script: dotnet pack /p:PackageVersion=$(version)  # define version variable elsewhere in your pipeline
- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: '<Name of the NuGet service connection>'
- task: NuGetCommand@2
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: '<Name of the NuGet service connection>'
    versioningScheme: byEnvVar
    versionEnvVar: version

참고 항목

NuGetAuthenticate@1 작업은 NuGet API 키 인증을 지원하지 않습니다. NuGet API 키를 사용하는 경우 입력이 --api-key 인수로 command설정된 push NuGetCommand@2 작업을 사용합니다. 예들 들어 dotnet nuget push --api-key $(NuGetApiKey)입니다.

NuGet 패키지의 버전 관리 및 게시에 대한 자세한 내용은 NuGet 피드에 게시를 참조 하세요.

Azure Artifacts에 NuGet 패키지 게시

NuGetCommand@2 사용하여 Azure Artifacts 피드에 NuGet 패키지를 게시할 수 있습니다. 예를 들어 Azure Pipelines를 사용하여 NuGet 패키지 게시를 참조 하세요.

웹 앱 배포

웹앱에 게시할 준비가 된 .zip 파일 보관 파일을 만들려면 다음 코드 조각을 추가합니다.

steps:
# ...
# do this after you've built your app, near the end of your pipeline in most cases
# for example, you do this before you deploy to an Azure web app on Windows
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

이 보관 파일을 웹앱에 게시하려면 Azure Web Apps 배포를 참조하세요.

이미지 빌드 및 컨테이너 레지스트리에 푸시

앱에 대한 이미지를 빌드하고 컨테이너 레지스트리에 푸시할 수도 있습니다.

기호 게시

PublishSymbols@2 작업을 사용하여 Azure Artifacts 기호 서버 또는 파일 공유에 기호를 게시할 수 있습니다.

예를 들어 파일 공유에 기호를 게시하려면 파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml .

- task: PublishSymbols@2
  inputs:
    SymbolsFolder: '$(Build.SourcesDirectory)'
    SearchPattern: '**/bin/**/*.pdb'
    IndexSources: true
    PublishSymbols: true
    SymbolServerType: 'FileShare' 
    SymbolsPath: '\\server\shareName'

클래식 편집기를 사용하는 경우 인덱스 원본을 선택하여 파이프라인에 추가할 작업 카탈로그의 기호 를 게시합니다.

자세한 내용은 기호 게시를 참조 하세요.

문제 해결

개발 머신에서 프로젝트를 빌드할 수 있지만 Azure Pipelines에서 프로젝트를 빌드하는 데 문제가 있는 경우 다음과 같은 잠재적 원인 및 수정 작업을 살펴봅니다.

  • .NET Core SDK의 시험판 버전은 Microsoft 호스팅 에이전트에 설치되지 않습니다. 새 버전의 .NET Core SDK가 릴리스된 후 모든 Azure Pipelines 데이터 센터에 배포하는 데 몇 주가 걸릴 수 있습니다. 이 롤아웃이 완료될 때까지 기다릴 필요가 없습니다. .NET Core 사용 태스크를 사용하여 Microsoft 호스팅 에이전트에 원하는 .NET Core SDK 버전을 설치할 수 있습니다.
  • 개발 머신에서 .NET Core SDK 버전 및 런타임을 확인하고 에이전트와 일치하는지 확인합니다. 파이프라인에 명령줄 스크립트 dotnet --version 를 포함하여 .NET Core SDK 버전을 인쇄할 수 있습니다. .NET Core 도구 설치 관리자를 사용하여 에이전트에 동일한 버전을 배포하거나 프로젝트 및 개발 머신을 최신 버전의 .NET Core SDK로 업데이트합니다.

  • 파이프라인에서 인코딩되지 않은 Visual Studio IDE에서 일부 논리를 사용할 수 있습니다. Azure Pipelines는 작업에서 지정한 각 명령을 새 프로세스에서 하나씩 실행합니다. 파이프라인 빌드의 로그를 검사하여 빌드의 일부로 실행된 정확한 명령을 확인합니다. 개발 컴퓨터에서 동일한 순서로 동일한 명령을 반복하여 문제를 찾습니다.

  • 일부 .NET Core 프로젝트와 일부 .NET Framework 프로젝트를 포함하는 혼합 솔루션이 있는 경우 NuGet 작업을 사용하여 파일에 지정된 packages.config 패키지를 복원해야 합니다. MSBuild 또는 Visual Studio 빌드 작업을 추가하여 .NET Framework 프로젝트를 빌드합니다.

  • 패키지를 복원하는 동안 빌드가 간헐적으로 실패할 수 있습니다. NuGet.org 문제가 있거나 Azure 데이터 센터와 NuGet.org 간에 네트워킹 문제가 있습니다. NuGet.org Azure Artifacts를 업스트림 원본으로 사용하면 제어할 수 없으므로 빌드의 안정성이 향상되는지 살펴볼 수 있습니다.

  • 경우에 따라 .NET Core SDK 또는 Visual Studio의 새 버전이 롤아웃되면 빌드가 중단될 수 있습니다. 예를 들어 NuGet 도구의 최신 버전 또는 기능이 SDK와 함께 제공되면 빌드가 중단될 수 있습니다. 이 문제를 격리하려면 .NET Core 도구 설치 관리자 작업을 사용하여 빌드에 사용되는 .NET Core SDK의 버전을 지정합니다.

FAQ

Q: Azure Artifacts에 대한 자세한 내용은 어디에서 확인할 수 있나요?

A: Azure Artifacts의 패키지 관리

Q: .NET Core 명령에 대한 자세한 내용은 어디에서 확인할 수 있나요?

A: .NET Core CLI 도구

Q: 솔루션에서 테스트를 실행하는 방법에 대한 자세한 내용은 어디에서 확인할 수 있나요?

A: .NET Core 프로젝트의 단위 테스트

Q: 작업에 대한 자세한 내용은 어디에서 확인할 수 있나요?

A: 작업 빌드 및 해제