다음을 통해 공유


.NET Core 프로젝트 빌드, 테스트 및 배포

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

이 문서에서는 Azure Pipelines를 사용하여 .NET Core 프로젝트를 사용하는 방법을 설명합니다. 이 문서에서는 다음 작업을 안내합니다.

  • .NET Core 웹앱을 만들고 GitHub 리포지토리에 업로드합니다.
  • Azure DevOps 프로젝트 및 Azure Pipelines 파이프라인을 만들어 프로젝트를 빌드합니다.
  • 자체 호스팅 에이전트를 사용하여 빌드 환경을 설정합니다.
  • 종속성을 복원하고, 프로젝트를 빌드하고, .NET Core (DotNetCoreCLI@2) 작업 또는 스크립트를 사용하여 테스트합니다.
  • .NET Core(DotNetCoreCLI@2) 작업을 사용하여 파이프라인에 다른 .NET SDK 명령을 추가합니다.
  • 코드 검사 결과 게시(Publish code coverage results v2) 작업을 사용하여 코드 검사 결과를 게시합니다.
  • 파이프라인, NuGet 피드, ZIP 보관 파일 또는 기타 대상에 빌드 출력을 패키지하고 제공합니다.
  • .NET Core 웹앱을 만들고 GitHub 리포지토리에 업로드합니다.
  • Azure DevOps 프로젝트 및 Azure Pipelines 파이프라인을 만들어 프로젝트를 빌드합니다.
  • Microsoft 호스팅 또는 자체 호스팅 에이전트를 사용하여 빌드 환경을 설정합니다.
  • 종속성을 복원하고, 프로젝트를 빌드하고, .NET Core (DotNetCoreCLI@2) 작업 또는 스크립트를 사용하여 테스트합니다.
  • .NET Core(DotNetCoreCLI@2) 작업을 사용하여 파이프라인에 다른 .NET SDK 명령을 추가합니다.
  • 코드 검사 결과 게시(Publish code coverage results v2) 작업을 사용하여 코드 검사 결과를 게시합니다.
  • 파이프라인, NuGet 피드, ZIP 보관 파일 또는 기타 대상에 빌드 출력을 패키지하고 제공합니다.

Note

.NET Framework 프로젝트를 사용하려면 .NET Framework를 사용하여 ASP.NET 앱 빌드를 참조하세요.

필수 조건

이 문서의 모든 절차를 완료하려면 다음 필수 구성 요소가 필요합니다.

  • 하나의 Azure DevOps 조직. 무료로 하나를 만들 수 있습니다.
  • 조직 프로젝트 관리자 그룹의 멤버 자격을 통해 Azure DevOps 프로젝트를 만들고 파이프라인에 대한 프로젝트 액세스 권한을 부여할 수 있습니다. Azure DevOps 조직 소유자는 자동으로 이 멤버 자격을 갖습니다.
  • 조직의 Azure DevOps 프로젝트입니다. Azure DevOps에서 프로젝트를 만듭니다.
  • 무료 병렬 작업 계층을 요청하여 Microsoft 호스팅 에이전트에서 파이프라인을 실행하는 기능입니다. 이 요청을 처리하는 데 영업일 기준 몇 일이 걸릴 수 있습니다. 병렬 작업을 구성하고 결제하는 방법에 대한 자세한 내용은 를 참조하세요.
  • 프로젝트 관리자로 할당할 수 있는 서비스 연결에 대한 관리자 또는 작성자 역할입니다.
  • GitHub 계정 및 리포지토리.

이 문서의 모든 절차를 완료하려면 다음 필수 구성 요소가 필요합니다.

.NET 프로젝트를 만들고 GitHub에 업로드

GitHub 리포지토리에 이미 있는 .NET 프로젝트를 사용하려는 경우 이 섹션을 건너뛸 수 있습니다.

작업할 .NET 프로젝트가 없는 경우 다음과 같이 로컬 컴퓨터에 새 프로젝트를 만듭니다.

  1. .NET 8.0 SDK를 설치하거나 설치되어 있는지 확인합니다.
  2. 로컬 컴퓨터에서 터미널 창을 엽니다.
  3. 프로젝트 디렉터리를 만들고 해당 디렉터리로 이동합니다.
  4. 를 실행하여 새 .NET 8 웹앱을 만듭니다 dotnet new webapp -f net8.0.
  5. 를 사용하여 dotnet run애플리케이션을 로컬로 빌드하고 실행합니다.
  6. 애플리케이션이 시작되면 Ctrl+C를 눌러 종료합니다.
  7. 로컬 프로젝트를 GitHub 리포지토리에 업로드하거나 연결합니다.

파이프라인 만들기

사용하려는 파이프라인이 있는 경우 이 섹션을 건너뛸 수 있습니다. 그렇지 않으면 YAML 파이프라인 편집기 또는 클래식 편집기를 사용하여 다음과 같이 파이프라인을 만들 수 있습니다.

  1. Azure DevOps 프로젝트의 왼쪽 탐색 메뉴에서 파이프라인 을 선택합니다.

  2. 파이프라인 을 선택하거나 이 파이프라인이 프로젝트의 첫 번째 파이프라인인 경우 파이프라인 만들기 를 선택합니다.

  3. 코드의 위치 화면에서 GitHub를 선택합니다.

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

  5. 리포지토리 선택 화면에서 .NET 앱이 있는 리포지토리를 선택합니다.

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

  1. 구성 탭에서 자세히 표시를 선택한 다음 목록에서 ASP.NET Core 파이프라인 템플릿을 선택합니다. 이 템플릿은 이 문서에서 설명하는 많은 단계와 설정을 제공합니다.

    구성 탭에서 시작 파이프라인을 선택하여 최소 파이프라인으로 시작하고 단계 및 설정을 직접 추가할 수도 있습니다.

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

  1. Azure DevOps 프로젝트의 왼쪽 탐색 메뉴에서 파이프라인 을 선택합니다.

  2. 파이프라인 을 선택하거나 이 파이프라인이 프로젝트의 첫 번째 파이프라인인 경우 파이프라인 만들기 를 선택합니다.

  3. 원본 리포지토리 유형을 선택합니다. 이 예제에서는 GitHub Enterprise Server를 사용합니다.

  4. 다음 화면에서 다음 정보를 입력합니다.

    • 예를 들어 https://github.com/mynameGitHub 계정의 URL입니다.
    • GitHub PAT(개인용 액세스 토큰).
    • 예를 들어 my-github서비스 연결 이름입니다.
  5. 생성을 선택합니다.

  6. GitHub 리포지토리를 선택합니다.

  7. 구성 탭에서 자세히 표시를 선택하고 목록에서 ASP.NET Core 파이프라인 템플릿을 선택합니다. 이 템플릿은 이 문서에서 설명하는 많은 단계와 설정을 제공합니다.

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

  1. 준비가 되면 저장 및 실행을 선택합니다.

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

  2. 필요에 따라 커밋 메시지를 편집한 다음 저장을 선택하고 다시 실행합니다.

  3. 요약 탭의 작업 섹션에서 작업을 선택하여 파이프라인의 작동을 확인합니다.

이제 사용자 지정할 준비가 된 작업 파이프라인이 있습니다.

빌드 환경 설정

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

특정 버전의 .NET SDK를 설치하려면 YAML 파이프라인 파일 또는 클래식 편집기에서 UseDotNet@2 태스크에 작업을 추가 합니다.

Note

물리적 시스템에서 실행되는 에이전트의 경우 파이프라인을 통해 SDK 및 도구를 설치하면 에이전트 호스트의 빌드 환경이 변경됩니다.

다음 예제 YAML 코드 조각은 .NET SDK 8.0.x를 설치합니다.

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

최신 SDK를 설치하려면 .로 설정합니다 performMultiLevelLookuptrue.

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

빌드 작업에 대한 에이전트 풀 및 에이전트를 선택할 수 있습니다. 해당 기능에 따라 에이전트를 지정할 수도 있습니다. 예를 들어 다음 YAML 파이프라인 코드 조각은 풀 및 에이전트 기능을 선택합니다.

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

Windows, Linux 또는 macOS용 .NET Core SDK 및 런타임을 사용하여 .NET Core 프로젝트를 빌드할 수 있습니다. 기본적으로 빌드는 Microsoft 호스팅 에이전트에서 실행되므로 인프라를 설정할 필요가 없습니다.

Azure Pipelines Microsoft 호스팅 에이전트에는 지원되는 여러 버전의 .NET Core SDK가 포함되어 있습니다. 사용 가능한 이미지 및 구성 예제의 전체 목록은 Microsoft 호스팅 에이전트 를 참조하세요.

다음 YAML 파이프라인 코드 조각은 에이전트 풀에 대한 Ubuntu OS를 설정합니다.

pool:
  vmImage: 'ubuntu-latest' 

Microsoft 호스팅 에이전트는 일부 이전 버전의 .NET Core SDK를 포함하지 않으며 일반적으로 시험판 버전을 포함하지 않습니다. Microsoft 호스팅 에이전트에서 이러한 버전의 SDK가 필요한 경우 dotNet(UseDotNet@2) 작업을 사용하여 설치할 수 있습니다.

예를 들어 다음 코드는 .NET 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

자체 호스팅 에이전트

또는 자체 호스팅 에이전트를 사용하여 .NET Core 프로젝트를 빌드할 수 있습니다. Linux, macOS 또는 Windows 자체 호스팅 에이전트를 설정할 수 있습니다.

자체 호스팅 에이전트를 사용하면 다음을 수행할 수 있습니다.

  • 도구 설치 관리자를 실행하는 UseDotNet@2 데 드는 비용을 방지합니다.
  • 큰 리포지토리가 있는 경우 빌드 시간을 줄입니다.
  • 증분 빌드를 실행합니다.
  • Microsoft에서 공식적으로 지원하지 않는 미리 보기 또는 프라이빗 SDK를 사용합니다.
  • 회사 또는 온-프레미스 환경에서만 사용할 수 있는 SDK를 사용합니다.

자세한 내용은 자체 호스팅 에이전트를 참조 하세요.

종속성 복원

NuGet 패키지는 빌드하지 않는 코드에 따라 프로젝트가 달라지는 방법입니다. dotnet restore() 태스크를 통해 또는 파이프라인의 스크립트로 명령을 실행 DotNetCoreCLI@2 하여 NuGet 패키지 및 프로젝트별 도구를 다운로드할 수 있습니다. 이 dotnet restore 명령은 .NET Core SDK로 패키지된 NuGet.exe 사용하며 .NET Core 프로젝트 *.csproj 파일에 지정된 패키지만 복원할 수 있습니다.

.NET Core(DotNetCoreCLI@2) 작업을 사용하여 Azure Artifacts, NuGet.org 또는 인증된 다른 외부 또는 내부 NuGet 리포지토리에서 NuGet 패키지를 다운로드하고 복원할 수 있습니다. NuGet 피드가 파이프라인과 동일한 프로젝트에 있는 경우 인증할 필요가 없습니다. 자세한 내용은 .NET Core 작업(DotNetCoreCLI@2)을 참조하세요.

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

다음 파이프라인은 이 DotNetCoreCLI@2 작업을 사용하여 Azure Artifact 피드를 복원합니다.

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)'

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

프로젝트 설정> 파이프라인서비스 연결에서 NuGet 서비스 연결을 만들어 인증된 피드에 대한 자격 증명> 관리합니다. NuGet 서비스 연결에 대한 자세한 내용은 Azure Pipelines를 사용하여 NuGet 패키지 게시를 참조하세요.

NuGet.org 패키지 복원

NuGet.org 패키지를 복원하려면 다음과 같이 파이프라인을 업데이트합니다.

YAML 코드를 직접 편집하거나 작업 도우미를 사용하여 파이프라인에 복원 명령을 추가할 수 있습니다.

빌드 작업 전에 다음 코드 조각을 azure-pipelines.yml 파일에 삽입하여 DotNetCoreCLI@2() 작업을 직접 추가합니다.

steps:
- task: DotNetCoreCLI@2
  displayName: Restore
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: select

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

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.
  2. 작업 카탈로그에서 .NET Core를 선택합니다.
  3. 구성 화면의 명령 드롭다운 목록에서 복원을 선택합니다.
  4. 프로젝트 경로 또는 솔루션 필드에 *.csproj 파일의 경로를 입력합니다. 모든 하위 폴더의 모든 *.csproj 파일에 대해 와일드카드 **/*.csproj를 사용할 수 있습니다.
  5. 피드를 추가하려면여기서 선택한 피드NuGet.org 패키지 사용이 선택되어 있는지 확인합니다.
  6. 추가를 선택합니다.
  7. 유효성 검사 및 저장을 선택한 다음 저장을 선택하여 변경 내용을 커밋합니다.

외부 피드에서 패키지 복원

외부 NuGet 리포지토리를 지정하려면 리포지토리의 NuGet.config 파일에 URL을 넣습니다. 사용자 지정 피드가 NuGet.config 파일에 지정되고 해당 자격 증명이 NuGet 서비스 연결에 지정되어 있는지 확인합니다.

외부 피드에서 패키지를 복원하려면 이전 섹션의 restore 지시에 따라 작업을 추가하지만 다음과 같이 구성 설정을 변경합니다.

빌드 작업 전에 다음 코드 조각을 azure-pipelines.yml 파일에 삽입하여 DotNetCoreCLI@2() 작업을 직접 추가합니다. 서비스 연결 이름으로 대체 <NuGet service connection> 합니다.

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

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

  1. .NET Core 작업을 추가하고 이전 절차와 같이 구성 화면에서 복원을 선택합니다.
  2. 피드를 추가하려면NuGet.config피드를 선택합니다.
  3. NuGet.config경로 아래에서 리포지토리의 루트를 기준으로 NuGet.config 파일의 경로를 입력합니다. 필드 옆에 있는 줄임표를 선택하여 위치를 찾아서 선택할 수 있습니다.
  4. 이 조직/컬렉션 외부의 피드에 대한 자격 증명 아래에서 선택한NuGet.config파일의 외부 레지스트리에 사용할 자격 증명을 선택합니다. 동일한 조직의 피드의 경우 이 필드를 비워 둘 수 있습니다. 빌드의 자격 증명이 자동으로 사용됩니다.

.NET Framework 프로젝트에 대한 패키지 복원

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

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

Note

Ubuntu 24.04 이상의 경우 .NET CLI를 사용하여 NuGetCommand@2 작업 대신 NuGetAuthenticate 작업을 사용해야 합니다. 자세한 내용은 최신 Ubuntu 호스팅 이미지에 대한 지원을 참조하세요.

프로젝트 빌드

명령을 실행하여 .NET Core 프로젝트를 빌드합니다 dotnet build . .NET Core(DotNetCoreCLI@2) 태스크를 사용하거나 명령줄 스크립트로 사용하여 파이프라인에 명령을 추가할 수 있습니다.

.NET Core 작업 사용

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

다음 코드 조각을 삽입하여 .NET Core (DotNetCoreCLI@2) 작업을 직접 추가합니다. arguments 요구 사항에 맞게 업데이트합니다.

steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'

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

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.
  2. .NET Core(DotNetCoreCLI@2) 작업을 선택합니다.
  3. 명령 드롭다운 목록에서 빌드를 선택합니다.
  4. 프로젝트 경로 또는 솔루션 필드에 *.csproj 파일의 경로를 입력합니다. 모든 하위 폴더의 모든 *.csproj 파일에 대해 와일드카드 **/*.csproj를 사용할 수 있습니다.
  5. 추가를 선택합니다.
  6. 저장을 선택하여 변경 내용을 커밋합니다.

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

명령줄 스크립트를 사용하여 빌드할 수도 있습니다.

YAML 파일을 직접 편집하여 빌드 명령줄을 추가하려면 다음 코드를 추가합니다.

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

작업 도우미를 사용하여 명령줄 작업을 추가할 수도 있습니다.

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.
  2. 목록에서 명령줄 (CmdLine@2) 작업을 선택합니다.
  3. 스크립트 필드에 매개 변수가 있는 dotnet build 명령을 입력합니다. 예들 들어 dotnet build --configuration $(buildConfiguration)입니다.
  4. 고급>작업 디렉터리에서 *.csproj 파일의 경로를 작업 디렉터리로 입력합니다. 비워 두면 작업 디렉터리의 기본값은 .입니다 $(Build.SourcesDirectory).
  5. 추가를 선택합니다.
  6. 저장을 선택하여 변경 내용을 커밋합니다.

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

.NET Core() 태스크 또는 스크립트를 사용하여 파이프라인에 다른 DotNetCoreCLI@2 SDK 명령을 추가할 수 있습니다.

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

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

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

  1. 작업을 삽입할 YAML 파일의 위치로 이동합니다.
  2. 작업 카탈로그에서 .NET Core를 선택합니다.
  3. 명령 필드의 드롭다운 목록에서 실행할 명령을 선택합니다.
  4. 필요한 옵션을 구성합니다.
  5. 추가를 선택합니다.
  6. 저장을 선택하여 변경 내용을 커밋합니다.

스크립트에 .NET Core CLI 명령 추가

.NET Core CLI 명령을 script 파일에 추가할 수 있습니다. 다음은 그 예입니다.


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

도구 설치

Windows에서 실행되는 빌드에 dotnetsay 와 같은 .NET Core 글로벌 도구를 설치하려면 .NET Core 작업을 추가하고 구성에서 다음 속성을 설정합니다.

  • 명령: 사용자 지정
  • 프로젝트 경로: 비워 둡니다.
  • 사용자 지정 명령: tool
  • 인수: install -g dotnetsay

도구를 실행하려면 명령줄 작업을 추가하고 dotnetsay 필드에 입력 합니다.

테스트 실행

리포지토리에 테스트 프로젝트가 있는 경우 .NET Core (DotNetCoreCLI@2) 작업을 사용하여 MSTest, xUnit 및 NUnit과 같은 테스트 프레임워크를 사용하여 단위 테스트를 실행할 수 있습니다. 테스트 프로젝트는 Microsoft.NET.Test.SDK 버전 15.8.0 이상을 참조해야 합니다.

테스트 결과는 서비스에 자동으로 게시되며 빌드 요약에서 사용할 수 있습니다. 테스트 결과를 사용하여 실패한 테스트 문제를 해결하고 테스트 타이밍을 분석할 수 있습니다.

파이프라인에 테스트 작업을 추가하려면 azure-pipelines.yml 파일에 다음 코드 조각을 추가합니다.

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

작업 도우미를 사용하여 .NET Core (DotNetCoreCLI@2) 작업을 추가하는 경우 다음 속성을 설정합니다.

  • 명령: 테스트
  • 프로젝트 경로: 솔루션의 테스트 프로젝트로 설정
  • 인수: --configuration $(BuildConfiguration)

또는 특정 로거를 dotnet test 사용하여 명령을 실행한 다음 작업을 사용할 PublishTestResults@2 수 있습니다.

steps:
# ...
# do this after your tests 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(DotNetCoreCLI@2) 작업을 사용하여 테스트를 실행하면 검사 데이터가 서버에 자동으로 게시됩니다. 빌드 요약에서 *.coverage 파일을 다운로드하여 Visual Studio에서 볼 수 있습니다.

코드 검사를 수집하려면 테스트 작업을 파이프라인에 --collect "Code Coverage" 추가할 때 인수를 추가합니다.

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

작업 도우미를 사용하여 .NET Core (DotNetCoreCLI@2) 작업을 추가하는 경우 다음 속성을 설정합니다.

  • 명령: 테스트
  • 프로젝트 경로: 솔루션의 테스트 프로젝트로 설정
  • 인수: --configuration $(BuildConfiguration) --collect "Code Coverage"

테스트 결과 게시 옵션이 선택된 상태로 유지되는지 확인합니다.

또는 특정 로거와 함께 명령을 사용하여 dotnet test 코드 검사 결과를 수집한 다음 PublishTestResults@2 작업을 실행하려면 다음 코드를 사용합니다.

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

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

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

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

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

  1. coverlet.collector NuGet 패키지에 대한 참조를 추가합니다.
  2. azure-pipelines.yml 파일에 다음 코드 조각을 추가합니다.
- 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: '<test project directory>'
  
- task: PublishCodeCoverageResults@2
  displayName: 'Publish code coverage report'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'

코드 패키지화 및 배포

빌드 출력을 패키지하고 제공하려면 다음을 수행할 수 있습니다.

  • Azure Pipelines에 빌드 아티팩트 게시
  • NuGet 패키지를 만들고 NuGet 피드에 게시합니다.
  • Azure Artifacts에 NuGet 패키지를 게시합니다.
  • ZIP 보관 파일을 만들어 웹앱에 배포합니다.
  • Azure Artifacts 기호 서버 또는 파일 공유에 기호를 게시합니다.

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

Azure Pipelines에 아티팩트 게시

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

  1. .NET CLI를 사용하여 실행 dotnet publish --output $(Build.ArtifactStagingDirectory) 하거나 게시 명령을 사용하여 DotNetCoreCLI@2() 작업을 추가합니다.
  2. PublishPipelineArtifact@1(파이프라인 아티팩트) 게시 작업을 사용하여 아티팩트 게시 이 작업은 모든 파일을 $(Build.ArtifactStagingDirectory) 빌드의 아티팩트로 업로드합니다.

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

steps:

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

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsite'

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

Note

publishWebProjects .NET Core(DotNetCoreCLI@2) 작업의 입력은 기본적으로 설정 true 되며 리포지토리의 모든 웹 프로젝트를 게시합니다. 자세한 내용은 azure-pipelines-tasks GitHub 리포지토리를 참조하세요.

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

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

다음 azure-pipelines.yml 코드는 빌드 아티팩트를 ZIP 파일로 게시합니다. 작업은 PublishBuildArtifacts@1 빌드의 아티팩트로 모든 파일을 $(Build.ArtifactStagingDirectory) 업로드합니다.

steps:

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

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'

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

NuGet 피드에 게시

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

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

Note

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

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

Azure Artifacts에 NuGet 패키지 게시

NuGetCommand@2 작업을 사용하여 Azure Artifacts 피드에 NuGet 패키지를 게시할 수 있습니다. 자세한 내용은 Azure Pipelines를 사용하여 NuGet 패키지 게시를 참조하세요.

웹앱에 ZIP 파일 보관 게시

웹앱에 게시할 준비가 된 ZIP 파일 보관 파일을 만들려면 azure-pipelines.yml 다음 코드 조각을 추가합니다. 대부분의 경우 파이프라인 끝 부근에서 앱을 빌드한 후 이 작업을 실행합니다. 예를 들어 Windows에서 Azure 웹앱에 배포하기 전에 이 작업을 실행합니다.

steps:
# ...
- 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 호스팅 에이전트에 설치되지 않으며 모든 Azure Pipelines 데이터 센터에 새 버전의 SDK를 롤아웃하는 데 몇 주가 걸릴 수 있습니다. 롤아웃이 완료될 때까지 기다리는 대신 .NET Core 작업을 사용하여 Microsoft 호스팅 에이전트에 원하는 .NET Core SDK 버전을 설치할 수 있습니다.
  • .NET Core SDK 또는 Visual Studio의 새 버전은 빌드를 중단시킬 수 있습니다(예: NuGet 도구의 최신 버전 또는 기능이 포함된 경우). 개발 머신의 .NET Core SDK 버전 및 런타임이 파이프라인 에이전트와 일치하는지 확인합니다.

    파이프라인에 명령줄 스크립트를 dotnet --version 포함하여 .NET Core SDK 버전을 인쇄할 수 있습니다. .NET Core 도구 설치 관리자를 사용하여 에이전트에 동일한 버전을 배포하거나 프로젝트 및 개발 머신을 .NET Core SDK의 파이프라인 버전으로 업데이트합니다.

  • NuGet.org 패키지를 복원할 때 연결 문제로 인해 빌드가 간헐적으로 실패할 수 있습니다. NuGet.org 문제가 있거나 Azure 데이터 센터와 NuGet.org 간에 네트워킹 문제가 있을 수 있습니다. 업스트림 원본 과 함께 Azure Artifacts를 사용하여 패키지를 캐시하면 빌드의 안정성이 향상되는지 살펴볼 수 있습니다.

    파이프라인의 자격 증명은 Azure Artifacts에 연결하는 데 자동으로 사용됩니다. 이러한 자격 증명은 일반적으로 프로젝트 컬렉션 빌드 서비스 계정에서 파생됩니다. Azure Artifacts를 사용하여 NuGet 패키지를 캐시하는 방법에 대한 자세한 내용은 Azure Artifact 피드에 연결을 참조 하세요.

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

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