- 코드를 찾을 수 없으며 파이프라인이 항상 기본 구성으로 실행됩니다
- 기본 구성을 변경해도 효과가 없습니다
- 병합 요청에서 코드 품질 보고서가 표시되지 않습니다
- 단일 코드 품질 보고서만 표시되지만 더 많은 보고서가 정의되어 있습니다
- RuboCop 오류
- 사용자 지정 도구를 사용할 때 병합 요청에 코드 품질이 표시되지 않음
- 오류:
코드 품질을 분석할 수 없습니다
- Kubernetes CI 실행기에서 코드 품질 사용
-
오류:
x509: 인증 기관에 의해 서명된 인증서가 알 수 없음
- Code Quality 보고서 로드 실패
- 보고서 아티팩트가 생성되지 않음
코드 품질 문제 해결
코드 품질 작업을 할 때 다음과 같은 문제에 직면할 수 있습니다.
코드를 찾을 수 없으며 파이프라인이 항상 기본 구성으로 실행됩니다
아마도 Docker-in-Docker 소켓 바인딩 구성으로 개인 러너를 사용하고 있을 것입니다.
Worker에서 코드 품질 검사를 실행하도록 구성해야 하며, 이에 대한 문서는 다음을 참고하세요.
사설 러너로 코드 품질 성능 개선하기.
기본 구성을 변경해도 효과가 없습니다
일반적인 문제는 Code Quality
(GitLab 전용)와 Code Climate
(GitLab에서 사용하는 엔진)의 용어가 매우 유사하다는 것입니다. 기본 구성을 변경하려면 .codeclimate.yml
파일을 추가해야 하며, .codequality.yml 파일은 사용하지 않아야 합니다. 잘못된 파일 이름을 사용하면 기본 .codeclimate.yml
가 계속 사용됩니다.
병합 요청에서 코드 품질 보고서가 표시되지 않습니다
소스 또는 대상 브랜치의 코드 품질 보고서가 병합 요청에서 비교 위해 누락될 수 있으므로 정보가 표시되지 않을 수 있습니다.
소스 브랜치에서 보고서가 누락된 것은 다음 때문일 수 있습니다:
-
REPORT_STDOUT
환경 변수를 사용하면 보고서 파일이 생성되지 않으며 병합 요청에 아무 것도 표시되지 않습니다.
대상 브랜치에서 보고서가 누락된 것은 다음 때문일 수 있습니다:
-
.gitlab-ci.yml
에 추가된 새 코드 품질 작업. - 파이프라인이 코드 품질 작업을 대상 브랜치에서 실행하도록 설정되지 않았습니다.
- 코드 품질 작업이 실행되지 않는 기본 브랜치에 커밋이 이루어졌습니다.
-
artifacts:expire_in
CI/CD 설정으로 인해 코드 품질 아티팩트가 원래보다 더 빨리 만료될 수 있습니다.
기본 커밋에서 보고서의 존재를 확인하려면 병합 요청 API를 사용하여 base_sha
를 얻고, 파이프라인 API와 sha
속성을 사용하여 파이프라인이 실행되었는지 확인하세요.
단일 코드 품질 보고서만 표시되지만 더 많은 보고서가 정의되어 있습니다
코드 품질은 여러 보고서를 자동으로 결합합니다.
GitLab 15.6 이전 버전에서는 코드 품질이 최신으로 생성된 작업(가장 큰 작업 ID)의 아티팩트만 사용했습니다. 이전 작업의 코드 품질 아티팩트는 무시되었습니다.
RuboCop 오류
Ruby 프로젝트에서 코드 품질 작업을 사용할 때 RuboCop 실행에 문제가 발생할 수 있습니다.
예를 들어, 다음과 같은 오류가 발생할 수 있습니다. 최근 버전 또는 매우 오래된 버전의 Ruby를 사용할 때:
/usr/local/bundle/gems/rubocop-0.52.1/lib/rubocop/config.rb:510:in `check_target_ruby':
Unknown Ruby version 2.7 found in `.ruby-version`. (RuboCop::ValidationError)
Supported versions: 2.1, 2.2, 2.3, 2.4, 2.5
이는 체크 엔진에서 사용하는 기본 RuboCop 버전이 사용 중인 Ruby 버전을 지원하지 않기 때문에 발생합니다.
프로젝트에서 사용하는 Ruby 버전을 지원하는 사용자 지정 RuboCop 버전을 사용하려면,
프로젝트 리포지토리에서 생성된 .codeclimate.yml
파일을 통해 구성을 재정의할 수 있습니다.
예를 들어, RuboCop의 릴리즈 0.67을 사용하도록 지정하려면:
version: "2"
plugins:
rubocop:
enabled: true
channel: rubocop-0-67
사용자 지정 도구를 사용할 때 병합 요청에 코드 품질이 표시되지 않음
사용자 지정 도구를 사용할 때 병합 요청에 코드 품질 변경 사항이 표시되지 않는 경우, JSON의 모든 라인 속성이 integer
인지 확인하세요.
오류: 코드 품질을 분석할 수 없습니다
다음과 같은 오류가 발생할 수 있습니다:
error: (CC::CLI::Analyze::EngineFailure) engine pmd ran for 900 seconds and was killed
Could not analyze code quality for the repository at /code
코드 클라이밋 플러그인을 사용하고 있으며 코드 품질 CI/CD 작업이 이 오류 메시지와 함께 실패하는 경우, 기본 타임아웃인 900초보다 작업이 더 오래 걸리는 것일 수 있습니다:
이 문제를 해결하기 위해, .gitlab-ci.yml
파일에서 TIMEOUT_SECONDS
를 더 높은 값으로 설정하세요.
예를 들어:
code_quality:
variables:
TIMEOUT_SECONDS: 3600
Kubernetes CI 실행기에서 코드 품질 사용
코드 품질을 작동시키기 위해 Docker in Docker 설정이 필요합니다. Kubernetes 실행기는 이미 이를 지원합니다.
Kubernetes 실행기에서 코드 품질 작업이 실행될 수 있도록 하려면:
- Docker 데몬과 통신하기 위해 TLS를 사용하는 경우, 실행기는 특권 모드에서 실행되어야 합니다. 또한, 인증서 디렉터리는 볼륨 마운트로 지정되어야 합니다.
- 코드 품질 작업이 시작되기 전에 DinD 서비스가 완전히 시작되지 않을 수 있습니다. 이는 Kubernetes 실행기 문제 해결에서 문서화된 제한 사항입니다.
오류: x509: 인증 기관에 의해 서명된 인증서가 알 수 없음
CODE_QUALITY_IMAGE
를 신뢰되지 않는 TLS 인증서를 사용하는 Docker 레지스트리에 호스팅된 이미지로 설정한 경우, 예를 들어 자가 서명된 인증서, 다음과 같은 오류가 발생할 수 있습니다:
$ docker pull --quiet "$CODE_QUALITY_IMAGE"
Error response from daemon: Get https://gitlab.example.com/v2/: x509: certificate signed by unknown authority
이를 수정하려면 /etc/docker/certs.d
디렉터리에 인증서를 넣어 Docker 데몬이 인증서를 신뢰하도록 구성하세요.
이 Docker 데몬은 GitLab 코드 품질 템플릿에서 이후의 코드 품질 Docker 컨테이너에 노출되며, 인증서 구성을 적용할 다른 모든 컨테이너에도 노출되어야 합니다.
Docker
GitLab 러너 구성에 접근할 수 있는 경우, 해당 디렉터리를 볼륨 마운트로 추가하세요.
gitlab.example.com
을 레지스트리의 실제 도메인으로 교체하세요.
예시:
[[runners]]
...
executor = "docker"
[runners.docker]
...
privileged = true
volumes = ["/cache", "/etc/gitlab-runner/certs/gitlab.example.com.crt:/etc/docker/certs.d/gitlab.example.com/ca.crt:ro"]
Kubernetes
GitLab Runner 구성 및 Kubernetes 클러스터에 접근할 수 있는 경우,
ConfigMap을 마운트할 수 있습니다.
gitlab.example.com
을 레지스트리의 실제 도메인으로 교체하세요.
-
인증서로 ConfigMap을 생성합니다:
kubectl create configmap registry-crt --namespace gitlab-runner --from-file /etc/gitlab-runner/certs/gitlab.example.com.crt
-
ConfigMap을 지정하기 위해 GitLab Runner
config.toml
을 업데이트합니다:[[runners]] ... executor = "kubernetes" [runners.kubernetes] image = "alpine:3.12" privileged = true [[runners.kubernetes.volumes.config_map]] name = "registry-crt" mount_path = "/etc/docker/certs.d/gitlab.example.com/ca.crt" sub_path = "gitlab.example.com.crt"
Code Quality 보고서 로드 실패
Code Quality 보고서는 아티팩트 파일에서 데이터를 분석하는 데 문제가 있을 경우 로드되지 않을 수 있습니다.
오류에 대한 통찰력을 얻으려면, 다음 단계를 사용하여 GraphQL 쿼리를 실행할 수 있습니다:
-
파이프라인 세부 정보 페이지로 이동합니다.
-
URL에
.json
을 추가합니다. -
파이프라인의
iid
를 복사합니다. -
인터랙티브 GraphQL 탐색기로 이동합니다.
-
다음 쿼리를 실행합니다:
{ project(fullPath: "<fullpath-to-your-project>") { pipeline(iid: "<iid>") { codeQualityReports { count nodes { line description path fingerprint severity } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } } } } }
보고서 아티팩트가 생성되지 않음
특정 Runner 구성에서는 Code Quality 스캔 작업이 소스 코드에 접근할 수 없을 수 있습니다.
이 경우 gl-code-quality-report.json
아티팩트가 생성되지 않습니다.
이 문제를 해결하려면, 다음 중 하나를 사용하세요:
- Docker 소켓 바인딩 대신 특권 모드를 사용하는 Docker-in-Docker에 대한 문서화된 Runner 구성을 사용하세요.
- Docker 소켓 바인딩을 계속 사용하려면 문서 32027의 커뮤니티 해결 방법을 적용하세요.