다음을 통해 공유


Azure Pipelines에서 코드 검사 결과 검토 및 구성

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

코드 검사를 사용하면 단위 테스트와 같이 실제로 테스트 중인 프로젝트 코드의 비율을 확인할 수 있습니다. 코드 변경에 대한 신뢰를 높이고 버그를 효과적으로 보호하려면 테스트에서 코드의 상당 부분을 실행하거나 처리해야 합니다.

코드 검사 결과를 검토할 때 테스트가 다루지 않는 코드 경로를 식별할 수 있습니다. 이 정보는 테스트 부채를 줄여 시간이 지남에 따라 테스트 적용 범위를 개선하는 데 도움이 됩니다.

이 문서에서는 Azure Pipelines에서 코드 검사를 보고, 구성하고, 문제를 해결하는 방법을 보여 줍니다. 끌어오기 요청에 대한 diff 검사를 설정하고, 적용 범위 정책을 구성하고, 일반적인 문제를 해결하는 방법을 알아봅니다.

비고

Azure Pipelines에서 지원하는 다양한 버전 제어 시스템에서 코드를 빌드할 수 있지만 이 문서에서 설명하는 끌어오기 요청 기능에 대한 코드 검사는 현재 Azure Repos에서만 사용할 수 있습니다.

지원되는 형식, 작업 및 아티팩트

지원되는 형식

Azure Pipelines는 코드 검사 결과 게시 v2 작업을 통해 검사 결과를 게시할 수 있습니다. 태스크는 2개의 다른 보기로 결과를 표시할 수 있습니다.

  • cobertura, jacoco, clover, gcov, pcov 및 기타 xml 형식의 경우 코드 검사 보고서의 세부 정보를 포함하는 HTML 보기가 생성되며 대부분의 고객이 선호합니다.
  • 의 경우 .coverage/.cjson/.covx - HTML 보기보다 세부 정보가 적은 테이블 형식 보기가 생성됩니다.

아티팩트 및 결과

파이프라인 실행 요약의 요약 탭에서 빌드 중에 게시된 코드 범위 아티팩트를 볼 수 있습니다.

스크린샷은 수동 실행과 2개 게시된 항목이 있는 요약 탭을 보여줍니다.

또한 코드 검사 탭에서 코드 검사 보고서의 결과를 검토할 수 있습니다.

스크린샷은 요약, 메트릭 및 적용 범위가 있는 코드 검사 탭 콘텐츠를 보여줍니다.

  • Cobertura 또는 JaCoCo 코드 커버리지 형식을 사용하여 코드 커버리지를 게시하는 경우, 코드 커버리지 아티팩트에는 추가 분석을 위해 오프라인에서 .html 볼 수 있는 파일이 포함되어 있습니다. 스크린샷은 HTML 보고서 요약을 보여줍니다.
  • .NET 및 .NET Core의 경우 빌드 요약에서 코드 검사 중요 시점을 선택하여 링크에 액세스하여 아티팩트를 다운로드할 수 있습니다.
  • Visual Studio Test 는 .NET 및 .NET Core 앱에 대한 적용 범위를 수집할 수 있습니다. Visual Studio에서 .coverage 추가 분석을 위해 다운로드하고 사용할 수 있는 파일을 생성합니다. 스크린샷은 코드 검사 결과를 보여줍니다.

업무

코드 검사 결과 게시Cobertura 또는 JaCoCo 형식의 빌드에 의해 생성된 Azure Pipelines에 코드 검사 결과를 게시합니다.

Visual Studio Test, .NET Core, Ant, Maven, Gulp, GruntGradle과 같은 기본 제공 작업은 코드 검사 데이터를 파이프라인에 게시하는 옵션을 제공합니다.

Docker 고려 사항

Docker를 사용하는 앱의 경우 컨테이너 내에서 빌드 및 테스트를 실행하고 컨테이너 내에서 코드 검사 결과를 생성할 수 있습니다. 파이프라인에 결과를 게시하려면 결과 아티팩트가 코드 검사 결과 게시 태스크에서 사용할 수 있도록 합니다. 참조는 Docker용 Docker 파일 섹션을 사용하여 빌드, 테스트 및 게시 결과 아래에 테스트 결과를 게시하는 유사한 예제를 참조하세요.

중요한 고려 사항

  • 다단계 YAML 파이프라인에서 코드 검사 결과는 전체 파이프라인이 완료된 후에만 사용할 수 있습니다. 프로덕션에 배포하기 전에 코드 검사 결과를 검토하려면 빌드 단계를 자체 파이프라인으로 분리해야 할 수 있습니다.
  • 여러 테스트 실행의 코드 검사 결과를 병합하는 작업은 현재 .NET 및 .NET Core에서만 작동합니다. 다른 형식을 지원할 계획은 없습니다.

전체 커버리지 대 diff 커버리지

전체 범위 는 프로젝트의 전체 코드베이스에 대한 범위를 측정합니다. 끌어오기 요청의 컨텍스트에서 개발자는 변경 내용에 중점을 두고 추가하거나 변경한 특정 코드 줄이 적용되는지 여부를 알고자 합니다. 이러한 유형의 적용 범위는 diff 검사입니다.

적용 범위 설정은 리포지토리에 적용되고 코드를 빌드하는 파이프라인에 관계없이 사용되기 때문에 YAML 파이프라인과 다릅니다. 또한 이 분리는 클래식 디자이너 기반 빌드 파이프라인을 사용하는 경우 풀 리퀘스트에 대한 코드 커버리지 상태 확인을 제공합니다.

끌어오기 요청 주석 세부 정보의 설정에 관계없이, 변경된 파일 보기에서 커버리지 지표가 표시됩니다.

diff 비교 범위 구성

끌어오기 요청에 대한 코드 검사 환경의 기본 설정을 변경하려면 리포지토리의 루트에 명명된 azurepipelines-coverage.yml 구성 YAML 파일을 포함합니다. 이 파일에서 원하는 값을 설정하면 다음에 파이프라인이 실행될 때 Azure DevOps에서 자동으로 사용합니다.

다음 설정을 변경할 수 있습니다.

스크린샷은 구성할 수 있는 설정을 보여줍니다.

예제 구성

coverage:  
  status:                    # Code coverage status will be posted to pull requests based on targets defined below. 
    comments: on             # Off by default. When on, details about coverage for each file changed will be posted as a pull request comment.  
    diff:                    # Diff coverage is code coverage only for the lines changed in a pull request. 
      target: 60%            # Set this to a desired percentage. Default is 70 percent 

코드 검사 YAML 샘플 리포지토리에서 세부 정보가 포함된 더 많은 예제를 찾을 수 있습니다.

검사 상태, 세부 정보 및 표시기

파이프라인을 설정하여 코드 커버리지를 수집하고 게시하면, 끌어오기 요청을 만들 때 코드 커버리지 상태가 게시됩니다. 기본적으로 서버는 테스트가 변경된 줄의 최소 70%를 포함하는지 확인합니다. 앞에서 언급한 대상 매개 변수를 수정하여 diff 검사 임계값 대상을 선택한 값으로 변경할 수 있습니다.

스크린샷은 검사 상태 확인이 실패했음을 보여줍니다.

상태 검사는 끌어오기 요청의 모든 파일에 대한 차이 범위를 계산합니다. 각 파일의 백분율을 보려면 이전 섹션에서 설명한 대로 세부 정보를 사용하도록 설정합니다. 사용하도록 설정하면 시스템은 끌어오기 요청에 대한 주석으로 세부 정보를 게시합니다.

스크린샷은 Diff 커버리지 검사 실패 결과를 보여줍니다.

끌어오기 요청의 변경된 파일 보기에서, 변경된 줄에는 해당 줄의 커버리지 포함 여부를 나타내기 위해 커버리지 지표가 주석으로 추가됩니다.

스크린샷은 끌어오기 요청 줄 변경 검사 표시기를 보여줍니다.

코드 검사 정책을 사용하여 분기 보호 적용

기본적으로 끌어오기 요청에 대한 코드 커버리지 상태 확인은 참고용입니다. 커버리지가 낮은 경우에도 병합을 차단하지 않습니다. 병합하기 전에 변경 내용이 최소 적용 범위 임계값을 충족하는지 확인하려면 적용 범위 상태 검사를 사용하는 분기 정책을 구성합니다.

파이프라인에서 게시된 코드 검사 상태는 명명 규칙을 {name-of-your-pipeline/codecoverage}따릅니다.

비고

  • Azure Repos의 분기 정책(선택적 정책)은 끌어오기 요청이 실패할 경우 자동으로 완료되지 않도록 방지합니다. 이 동작은 코드 검사 정책과 관련이 없습니다.
  • 빌드가 실패할 경우 코드 검사 정책이 실패로 재정의되지 않습니다.

문제 해결 가이드

코드 검사 탭의 검사 보기에 중복 DLL이 표시되는 이유는 무엇인가요?

파이프라인에서 .NET Core와 .NET Framework를 모두 사용하는 경우 중복된 DLL이 표시될 수 있습니다. 둘 다 사용될 때 중복된 DLL을 예상합니다. 이는 동일한 모듈이 서로 다른 경로에서 제공되기 때문에 디자인에 따라 달라집니다.

코드 검사 탭에 검사 데이터가 없는 이유는 무엇인가요?

몇 가지 이유로 인해 이 문제가 발생할 수 있습니다.

  • 테스트 또는 DLL이 없습니다. 파일에 테스트 또는 DLL이 없는 경우 검사 값은 0입니다. 검사 값이 0인 경우 Azure DevOps는 탭에 코드 검사 데이터를 표시하지 않습니다. 대신 코드 검사 탭 아래에 검사 데이터가 없는 이유를 설명하는 메시지가 표시됩니다.

  • 빈 검사 XML: 코드 검사 게시 작업을 사용하는 경우 입력으로 제공된 검사 .xml 에 정보가 없거나 0줄로 덮인 경우 검사 데이터가 탭 아래에 나타나지 않습니다. 검사 .xml 파일(입력 파일)이 비어 있거나 정보가 부족한 이유를 확인합니다.

  • 빌드 실패: 빌드에 실패하면 코드 검사 탭이 적절한 메시지와 함께 표시됩니다.

  • VSTest 작업 구성: VSTest 작업을 사용하는 경우, 코드 검사 검사를 사용하도록 설정하지 않거나 테스트 필터 필드에서 파일을 테스트하기 위해 잘못된 DLL 또는 잘못된 경로를 언급하는 경우 검사 데이터가 표시되지 않습니다.

  • 빌드 구성 문제: 빌드 구성 값이 여러 개 있고 BuildFlavour 또는 BuildPlatform과 같은 모든 값을 설정하지 않는 경우가 있습니다. UI는 특정 빌드 구성의 값만 표시하므로 다른 모듈이 누락됩니다.

  • 큰 HTML 파일: 파일이 7MB보다 크면 .html 코드 검사 탭에서 보고서를 사용할 수 없습니다. 해결 방법으로 요약의 게시된 아티팩트에서 "코드 검사 Report_*" 아티팩트를 다운로드합니다.

  • 오류 메시지: 코드 검사 탭에 사용자별 오류와 관련된 오류 메시지가 포함된 경우 해당 오류 메시지를 트리거한 항목을 조사합니다.

코드 검사 상태 검사가 완료되지 않거나 실패하지 않는 경우 어떻게 해야 하나요?

코드 커버리지 상태 검사를 사용하도록 설정하려면 리포지토리의 루트에 파일 azurepipelines-coverage.yml을 추가해 보세요. 파일 이름이 정확히 동일하게 유지되는지 확인합니다. 예제는 다음과 같습니다.

coverage: 
  status: 
    comments: on 
    diff: 
      target: 50% 

커버리지 상태 확인이 실패하는 경우:

  1. diff 커버리지 비율을 확인합니다. 대상보다 작은 경우 diff 커버리지 비율을 늘려야 합니다.
  2. 어떤 이유로든 빌드에 실패한 경우 이 오류로 인해 코드 검사 상태 확인이 실패할 수도 있습니다.
  3. 파이프라인에서 어떤 작업이 커버리지 파일 또는 보고서를 생성하는지 확인합니다. 작업이 검사 보고서 또는 파일을 제대로 업로드하고 있는지 확인합니다.
  4. diff 커버리지 주석에 "실행 가능한 변경 사항 없음" 또는 "코드 커버리지 데이터를 찾을 수 없음"이 표시되는 경우, 줄 제거, 공백 추가 또는 주석 삽입으로 인해 발생할 수 있습니다. 이러한 경우는 수정할 수 없는 변경 내용이며 중요하지 않으므로 코드 검사에서 보고하지 않습니다.

코드 검사에서 일부 DLL을 제외하는 방법

코드 검사에서 파일을 제외하려면 ExcludeFromCodeCoverageAttribute 클래스를 사용합니다.

여러 요약 파일을 병합하여 적절한 세부 정보로 코드 검사 요약을 게시하려면 어떻게 해야 하나요?

코드 커버리지 V1 게시 작업은 여러 요약 파일을 입력으로 받을 수 없습니다. 대신 여러 파일 형식을 지원하는 코드 커버리지 V2 게시 작업을 사용합니다.

보고서 생성기 태스크를 사용하여 모든 .xml 파일을 병합한 다음 생성된 XML 경로를 코드 검사 게시 태스크에 입력으로 전달할 수도 있습니다.

코드 커버리지 검사를 트리거하려면 어떻게 해야 하나요?

.html 파일의 커버리지 상태 검사는 지원되지 않습니다. 빌드 품질 검사 작업을 사용하여 코드 검사 결과를 확인합니다.

코드 검사 탭의 보고서에 부정확한 숫자가 포함되어 있습니다.

탭에 표시되는 데이터는 커버리지 파일에서 가져옵니다. 사용자 지정 작업을 사용하여 코드 검사 파일을 생성하는 경우 파일에 DLL 또는 파일이 누락되었는지 확인합니다.

코드 검사 정책이 중단되었습니다. 이 원인은 무엇인가요?

몇 가지 요인으로 인해 이 문제가 발생할 수 있습니다.

  • 잘못된 분기 정책 이름 형식: 파이프라인 이름이 분기 정책 이름과 일치하고 추가 문자가 없는지 확인합니다.

    스크린샷은 정책 탭과 강조 표시된 분기 정책 이름을 보여 하며 파이프라인 이름과 일치하는지 확인합니다.

  • PublishCodeCoverage V1 사용: 코드 검사 정책이 중단되고 주석이 생성되지 않습니다. 대신 PublishCodeCoverage V2 작업을 사용합니다.

  • PR에 파일이 너무 많습니다: PR에 100개 이상의 파일이 있는 경우 커버리지 정책이 멈춥니다.

  • 여러 검사 정책: 여러 검사 정책을 구성하는 경우 그 중 하나가 중단됩니다. 하나의 정책만 구성하고 다른 고정된 정책을 삭제합니다.

테스트를 추가한 후에도 내 PR의 변경 사항 적용 범위가 0%로 표시됩니다.

PR에서 수정된 코드 줄 또는 새로운 코드 줄을 포함하는 테스트를 추가했음에도 여전히 0% 변화 범위를 보여주는 경우:

  1. 새로 추가된 테스트가 빌드의 일부로 실행되는지 확인합니다.
  2. 테스트가 실행되지 않으면 커버리지를 계산할 수 없으므로 빌드에 포함되도록 구성을 확인하고 업데이트하세요.

커버리지 보고서를 볼 수 있는데도 불구하고 PR에 대한 diff 커버리지 주석이 표시되지 않습니다.

몇 가지 요인으로 인해 이 문제가 발생할 수 있습니다.

  • 작업 버전: 차이 범위 주석은 코드 범위 V2 게시에서만 지원됩니다.
  • 실행 가능한 변경 내용 없음: 실행 코드가 변경된 파일에 대해 Diff 검사 주석이 생성됩니다. PR에 구성 업데이트만 있는 경우 Azure DevOps는 빌드 중에 실행되는 모든 테스트에 따라 코드 검사를 표시할 수 있지만 계산할 차이 범위가 없을 수 있습니다.
  • 검사 형식: 기능 코드 변경 내용이 있고 주석이 생성되지 않는 경우 파이프라인이 이 문서의 시작 부분에 언급된 지원되는 형식 중 하나로 검사 보고서를 생성하는지 확인합니다.

코드 검사 탭에 올바른 HTML 보고서가 표시되지 않습니다.

보고서를 생성하는 데 .html 문제가 있는 경우 시스템은 간소화된 보기로 돌아갑니다.

스크린샷은 코드 검사 탭과 모듈 목록 및 검사 차트의 시각적 표시기(대체 간소화된 보기)를 보여 줍니다.

끌어오기 요청에서 코드 검사의 유효성을 검사하는 데 사용할 수 있는 검사 도구 및 결과 형식은 무엇입니까?

현재 Visual Studio 코드 커버리지(.coverage) 형식만 사용하여 끌어오기 요청에 대한 코드 커버리지를 확인할 수 있습니다. Visual Studio 테스트 태스크, .NET Core 태스크의 테스트 동사 및 테스트 결과 게시 태스크의 TRX 옵션을 사용하여 코드 검사를 게시하는 경우 이 형식을 사용합니다.

끌어오기 요청이 발생할 때 여러 파이프라인이 트리거되는 경우 범위가 파이프라인 전체에서 병합되나요?

끌어오기 요청이 발생할 때 여러 파이프라인이 트리거되는 경우 코드 검사는 병합되지 않습니다. 이 기능은 현재 끌어오기 요청에 대한 코드 검사를 수집하고 게시하는 단일 파이프라인용으로 설계되었습니다. 파이프라인 간에 검사 데이터를 병합해야 하는 경우 개발자 커뮤니티기능 요청을 제출합니다.