SR Spec — SonarQube 품질 게이트 실패 해결
[ SR 내용 분석 ]
SR 정보
| 항목 | 값 |
|---|
| Issue Key | TEST-6 |
| Pipeline | counter-app-dirty-pipeline 빌드 #10 |
| 실패 분류 | case2 |
SR 요약
SonarQube 품질 게이트가 실패하여 빌드가 정적 품질 기준을 충족하지 못했습니다. 이는 코드 자체 오류가 아니라 커버리지 부족·규칙 위반 등 정적 분석 결과에 기인합니다. Jenkins 파이프라인은 catchError 로 오류를 잡아 전체 빌드 결과를 SUCCESS로 처리했지만, 품질 게이트 실패는 여전히 보고됩니다.
[ 현황 분석 ]
AS-IS 현황
- 파이프라인은
SonarQube Analysis 단계에서 docker run ... sonarsource/sonar-scanner-cli 를 실행하고, -Dsonar.qualitygate.wait=true 옵션으로 품질 게이트 결과를 대기합니다.
- 로그에
ERROR QUALITY GATE STATUS: FAILED 와 script returned exit code 2 가 기록되어 단계가 실패했음이 확인됩니다.
- 이후
Docker Build, Deploy to Target 단계는 정상 수행되어 컨테이너가 배포되었지만, 품질 게이트 실패는 최종 보고서에 남습니다.
문제 원인 분석
- 근본 원인: SonarScanner 실행 중 품질 게이트 검증 단계에서 FAIL 상태가 반환되었습니다.
- 문제 발현 맥락:
sonar.coverage.jacoco.xmlReportPaths 가 정의되지 않아 JaCoCo 커버리지 리포트가 없으며, Python 파일 1개만 분석된 상황에서 커버리지·규칙 위반이 기준에 미달했습니다.
- 변경 필요 이유: 품질 게이트를 통과하지 못하면 릴리즈 품질 보증 정책에 위배되며, 향후 자동 배포 파이프라인에서 차단됩니다.
- 코드 근거:
[ 변경 내용 ]
변경 대상 파일 목록
| # | 유형 | 파일 경로 | 역할 요약 | 변경 유형 | 변경 이유 |
|---|
| 1 | 추정 대상 | (로그에서 특정 불가) | SonarQube 품질 게이트 기준(커버리지, 규칙) | 코드·테스트 보강 | 품질 게이트 통과를 위해 커버리지·규칙 위반 해소 |
수정 지시
- SonarQube 대시보드(
https://sonar.architecture-service-center.cloud/dashboard?id=counter-app-dirty)에 접속하여 Quality Gate 상세 항목을 확인한다.
- Coverage 항목이 0% 로 표시되면,
requirements.txt 에 명시된 테스트 프레임워크(예: pytest)와 coverage 패키지를 이용해 테스트 코드를 작성한다.
- 테스트 실행 후
coverage xml -o coverage.xml 와 같은 명령으로 JaCoCo XML 형식(또는 SonarQube가 지원하는 형식) 리포트를 생성하고, sonar-project.properties 에
sonar.coverage.jacoco.xmlReportPaths=coverage.xml
를 추가한다.
- Rule Violations(예: 변수명, 코드 스멜) 항목이 존재하면, 해당 Python 파일(
app.py 등)에서 SonarQube가 제시하는 권고사항을 반영해 변수명·함수명을 수정한다.
- 변경 후 로컬에서
docker run --rm -e SONAR_HOST_URL=... -e SONAR_TOKEN=... -v $(pwd):/usr/src sonarsource/sonar-scanner-cli -Dsonar.qualitygate.wait=true 를 실행해 품질 게이트가 PASS 되는지 확인한다.
- 검증이 완료되면 커밋·푸시 후 Jenkins 파이프라인을 재실행한다.
변경 금지 영역
- Jenkinsfile 및 파이프라인 전체 흐름: 현재 파이프라인 로직은 정상 동작하므로 건드리지 말 것.
- Dockerfile: 이미지 빌드와 배포에 직접적인 영향이 없으므로 현재 상태 유지.
수정 후 검증 기준
- SonarQube Quality Gate 상태가 PASSED 로 전환된다.
SonarScanner 실행 로그에 ERROR QUALITY GATE STATUS: FAILED 가 나타나지 않으며, 종료 코드가 0 이다.
- Jenkins 파이프라인 전체가
SUCCESS 로 종료되고, Deploy to Target 단계 이후에도 배포된 컨테이너가 정상 동작한다.
- 커버리지 리포트가 정상 업로드되어
Coverage 수치가 프로젝트 설정(예: 80% 이상) 기준을 만족한다.
[ 참조 ]