- 티어별 기능
- 코드 품질 결과 보기
- Code Quality 활성화
- 코드 품질 비활성화
- 스캔 설정 사용자 정의
- 사용 가능한 CI/CD 변수
- 출력
- Merge Request 파이프라인에서 코드 품질 사용
- 개인 컨테이너 이미지 레지스트리 사용
- 인증을 사용하여 DockerHub 사용
- 의존성 프록시 사용
- 사용자 지정 도구 구현
- 여러 도구 통합
- 분석 플러그인 사용
코드 품질
- 이동됨 13.2에서 GitLab Free로.
소스 코드의 품질과 복잡성을 분석하는 데 Code Quality를 사용합니다. 이를 통해 프로젝트의 코드를 간단하고 가독성 있게 유지하고 유지보수를 쉽게 할 수 있습니다. Code Quality는 다른 리뷰 프로세스를 보완하여 대체하지 않아야 합니다.
Code Quality는 CI/CD 파이프라인에서 실행되며 코드의 품질을 저하시킬 수 있는 변경 사항을 Merge하는 것을 피할 수 있도록 도와줍니다.
Code Quality는 오픈 소스 Code Climate 도구와 선택된 플러그인을 사용하여 소스 코드를 분석합니다. 코드의 언어가 Covered 되었는지 확인하려면 Code Climate의 유지 가능성을 위한 지원되는 언어 디렉터리을 참조하세요. Code Coverage를 확장하려면 Code Climate Analysis Plugins이나 사용자 정의 도구를 사용할 수 있습니다.
티어별 기능
다른 GitLab 티어에서 사용 가능한 기능은 다음 표와 같습니다.
기능 | Free에서 사용 가능 | Premium에서 사용 가능 | Ultimate에서 사용 가능 |
---|---|---|---|
스캐너 구성 | 가능 | 가능 | 가능 |
사용자 정의 스캐너 통합 | 가능 | 가능 | 가능 |
JSON 또는 HTML 보고서 아티팩트 생성 | 가능 | 가능 | 가능 |
Merge Request 위젯에 결과 표시 | 가능 | 가능 | 가능 |
파이프라인에서 결과 표시 | 불가능 | 가능 | 가능 |
Merge Request 변경 보기에서 결과 표시 | 불가능 | 불가능 | 가능 |
프로젝트 품질 보기 요약 | 불가능 | 불가능 | 가능 |
코드 품질 결과 보기
코드 품질 결과는 다음에서 표시됩니다:
- Merge Request 위젯
- Merge Request 변경 보기
- 파이프라인 상세 보기
- 프로젝트 품질 보기
Merge Request 위젯
- 이동됨 13.2에서 GitLab Free로.
코드 품질 분석 결과는 Merge Request 위젯 영역에 표시됩니다. 대상 브랜치의 보고서가 비교할 수 있을 때 Merge Request 위젯에 코드 품질 발견사항과 변경 내용으로 인한 해결책이 표시됩니다. 동일한 지문을 가진 여러 코드 품질 발견 사항은 Merge Request 위젯에서 단일 항목으로 표시되며 각 개별 발견 사항은 파이프라인 상세 보기에서 사용 가능한 전체 보고서에서 볼 수 있습니다.
Merge Request 변경 보기
- 소개됨 in GitLab 13.11,
codequality_mr_diff
피처 플래그에서 기본값으로 비활성화됨.- 기본값으로 활성화됨 GitLab 13.12에서.
- 이 문제로 인해 GitLab 14.0에서 기본값으로 비활성화됨.
- 인라인 주석 추가됨 및 피처 플래그 제거됨 GitLab 14.1에서.
코드 품질 결과는 Merge Request 변경 보기에 표시됩니다. 코드 품질 문제가 있는 라인은 gutter 옆에 표시됩니다. 문제 디렉터리을 보려면 해당 기호를 선택한 다음 세부정보를 보려면 해당 문제를 선택하세요.
파이프라인 상세 보기
파이프라인에서 생성된 모든 Code Quality 위반 사항 디렉터리이 파이프라인 세부 페이지의 Code Quality 탭에 표시됩니다. 파이프라인 상세 보기에는 실행된 브랜치에서 발견된 모든 Code Quality 발견 사항이 표시됩니다.
프로젝트 품질 보기
프로젝트 품질 보기에서 코드 품질 발견의 개요가 표시됩니다. 이 보기는 분석 > CI/CD 분석 아래에서 찾을 수 있으며 이 특정 프로젝트에 대해 project_quality_summary_page 피처 플래그가 활성화되어 있어야 합니다.
Code Quality 활성화
사전 조건:
- GitLab CI/CD 구성(
.gitlab-ci.yml
)에test
단계가 포함되어 있어야 합니다. - 인스턴스 러너를 사용하는 경우 코드 품질 작업은 Docker-in-Docker 워크플로에 대해 구성되어야 합니다.
- 프라이빗 러너를 사용하는 경우 Code Quality 분석을 더 효율적으로 실행하기 위해 권장되는 대체 구성을 사용해야 합니다.
- 러너는 생성된 Code Quality 파일을 저장할 충분한 디스크 공간이 있어야 합니다. 예를 들어, GitLab 프로젝트의 파일은 약 7GB입니다.
Code Quality를 활성화하려면 다음을 수행하세요:
-
Auto DevOps를 활성화합니다. 이에는 Auto Code Quality가 포함됩니다.
-
.gitlab-ci.yml
파일에 Code Quality 템플릿을 포함시킵니다.예시:
include: - template: Jobs/Code-Quality.gitlab-ci.yml
이제 Code Quality가 파이프라인에서 실행됩니다.
개인 러너로 코드 품질 성능 향상
개인 러너를 사용하는 경우 코드 품질의 성능을 향상시키기 위해 이 구성을 사용해야 합니다. 이는 다음과 같은 이유 때문입니다:
- 특권 모드를 사용하지 않음.
- Docker-in-Docker를 사용하지 않음.
- Docker 이미지(모든 CodeClimate 이미지 포함)가 캐시되어 다음 작업에서 다시 가져오지 않음.
이 대체 구성은 소켓 바인딩을 사용하여 러너의 Docker 데몬을 작업 환경과 공유하는 방식입니다. 이 구성을 구현하기 전에 다음의 제한 사항을 고려해 주세요.
개인 러너를 사용하려면:
-
새 러너를 등록합니다:
$ gitlab-runner register --executor "docker" \ --docker-image="docker:latest" \ --url "https://gitlab.com/" \ --description "cq-sans-dind" \ --tag-list "cq-sans-dind" \ --locked="false" \ --access-level="not_protected" \ --docker-volumes "/cache"\ --docker-volumes "/builds:/builds"\ --docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \ --registration-token="<project_token>" \ --non-interactive
-
선택 사항이지만 권장됨: 빌드 디렉터리를
/tmp/builds
로 설정하여 작업 결과물이 주기적으로 러너 호스트에서 삭제되도록 합니다. 이 단계를 건너뛴 경우 기본 빌드 디렉터리(/builds
)를 직접 정리해야 합니다. 이를 위해 이전 단계의gitlab-runner register
에 다음 두 플래그를 추가할 수 있습니다.--builds-dir "/tmp/builds" --docker-volumes "/tmp/builds:/tmp/builds" # 이것 대신에 사용 가능: --docker-volumes "/builds:/builds"
결과 구성:
[[runners]] name = "cq-sans-dind" url = "https://gitlab.com/" token = "<project_token>" executor = "docker" builds_dir = "/tmp/builds" [runners.docker] tls_verify = false image = "docker:latest" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock", "/tmp/builds:/tmp/builds"] shm_size = 0 [runners.cache] [runners.cache.s3] [runners.cache.gcs]
-
템플릿에 의해 생성된
code_quality
작업에 두 가지 오버라이드를 적용합니다:include: - template: Jobs/Code-Quality.gitlab-ci.yml code_quality: services: # Docker-in-Docker를 비활성화 tags: - cq-sans-dind # 새로운 전문 러너에서만 이 작업을 실행하도록 설정
이제 코드 품질이 표준 Docker 모드에서 실행됩니다.
개인 러너에서 루트리스(Code Quality)로 실행
개인 러너를 사용하고 루트리스 Docker 모드에서 코드 품질 스캔을 실행하려는 경우, 코드 품질이 올바르게 실행되도록 특별한 변경이 필요합니다. 소켓 바인딩을 변경하면 다른 작업에서 문제가 발생할 수 있기 때문에 코드 품질 작업만 실행하는 전용 러너를 갖는 것이 필요할 수 있습니다.
루트리스 개인 러너를 사용하려면:
-
새 러너를 등록합니다:
/run/user/<gitlab-runner-user>/docker.sock
을gitlab-runner
사용자의 로컬docker.sock
경로로 대체합니다.$ gitlab-runner register --executor "docker" \ --docker-image="docker:latest" \ --url "https://gitlab.com/" \ --description "cq-rootless" \ --tag-list "cq-rootless" \ --locked="false" \ --access-level="not_protected" \ --docker-volumes "/cache" \ --docker-volumes "/tmp/builds:/tmp/builds" \ --docker-volumes "/run/user/<gitlab-runner-user>/docker.sock:/run/user/<gitlab-runner-user>/docker.sock" \ --token "<project_token>" \ --non-interactive \ --builds-dir "/tmp/builds" \ --env "DOCKER_HOST=unix:///run/user/<gitlab-runner-user>/docker.sock" \ --docker-host "unix:///run/user/<gitlab-runner-user>/docker.sock"
결과 구성:
[[runners]] name = "cq-rootless" url = "https://gitlab.com/" token = "<project_token>" executor = "docker" builds_dir = "/tmp/builds" environment = ["DOCKER_HOST=unix:///run/user/<gitlab-runner-user>/docker.sock"] [runners.docker] tls_verify = false image = "docker:latest" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache", "/run/user/<gitlab-runner-user>/docker.sock:/run/user/<gitlab-runner-user>/docker.sock", "/tmp/builds:/tmp/builds"] shm_size = 0 host = "unix:///run/user/<gitlab-runner-user>/docker.sock" [runners.cache] [runners.cache.s3] [runners.cache.gcs]
-
템플릿에 의해 생성된
code_quality
작업에 다음과 같은 오버라이드를 적용합니다:code_quality: services: variables: DOCKER_SOCKET_PATH: /run/user/997/docker.sock tags: - cq-rootless
이제 코드 품질이 표준 Docker 모드 및 루트리스에서 실행됩니다.
루트리스 Podman을 사용하여 Docker를 실행하려는 경우, 코드 품질에서도 동일한 구성이 필요합니다. 시스템에서 올바른 podman.sock
경로로 /run/user/<gitlab-runner-user>/podman/podman.sock
등을 대체해야 합니다.
코드 품질 비활성화
$CODE_QUALITY_DISABLED
CI/CD 변수가 있으면 code_quality
작업이 실행되지 않습니다. 변수를 정의하는 방법에 대한 자세한 정보는 GitLab CI/CD 변수를 참조하세요.
코드 품질을 비활성화하려면 다음 중 하나에 해당하는 사용자 정의 CI/CD 변수인 CODE_QUALITY_DISABLED
를 만드세요:
스캔 설정 사용자 정의
CI/CD 변수를 사용하여 코드 품질 스캔 설정을 변경할 수 있습니다.
코드 품질 작업을 구성하려면 다음을 수행하세요:
- 템플릿 포함 후 동일한 이름으로 작업을 선언합니다.
- 작업 스탠자에 추가 키를 지정하세요.
예는 HTML 형식의 출력 다운로드를 참조하세요.
사용 가능한 CI/CD 변수
코드 품질은 다음과 같은 사용 가능한 CI/CD 변수를 정의하여 사용자 정의할 수 있습니다:
CI/CD 변수 | 설명 |
---|---|
CODECLIMATE_DEBUG
| Code Climate 디버그 모드를 활성화하려면 설정합니다. |
CODECLIMATE_DEV
| CLI에서 알 수 없는 엔진을 실행할 수 있는 --dev 모드를 활성화하려면 설정합니다.
|
CODECLIMATE_PREFIX
| CodeClimate 엔진의 모든 docker pull 명령에 사용할 접두사를 설정합니다. 오프라인 스캔에 유용합니다. 자세한 내용은 개인 컨테이너 레지스트리 사용를 참조하세요.
|
CODECLIMATE_REGISTRY_USERNAME
|
CODECLIMATE_PREFIX 에서 구문 분석된 레지스트리 도메인의 사용자 이름을 지정합니다.
|
CODECLIMATE_REGISTRY_PASSWORD
|
CODECLIMATE_PREFIX 에서 구문 분석된 레지스트리 도메인의 암호를 지정합니다.
|
CODE_QUALITY_DISABLED
| 코드 품질 작업을 실행하지 않습니다. |
CODE_QUALITY_IMAGE
| 완전히 접두사가 붙은 이미지 이름을 설정합니다. 이미지는 작업 환경에서 액세스할 수 있어야 합니다. |
ENGINE_MEMORY_LIMIT_BYTES
| 엔진의 메모리 제한을 설정합니다. 기본값: 1,024,000,000바이트. |
REPORT_STDOUT
| 보고서를 일반적인 보고서 파일을 생성하는 대신 STDOUT 에 인쇄하도록 설정합니다.
|
REPORT_FORMAT
| 생성된 보고서 파일의 형식을 제어하도록 설정합니다. json 또는 html 중 하나입니다.
|
SOURCE_CODE
| 스캔할 소스 코드의 경로를 설정합니다. 복제된 소스가 저장된 디렉터리의 절대 경로여야 합니다. |
TIMEOUT_SECONDS
|
codeclimate analyze 명령의 엔진 컨테이너용 사용자 정의 타임아웃을 설정합니다. 기본값: 900초 (15분).
|
출력
코드 품질은 발견된 문제의 세부 정보를 포함하는 보고서를 출력합니다. 이 보고서의 내용은 내부적으로 처리되며 결과는 UI에서 표시됩니다. 보고서는 code_quality
작업의 작업 artifact로 출력되며 gl-code-quality-report.json
로 명명됩니다. 선택적으로 보고서를 HTML 형식으로 출력할 수도 있습니다. 예를 들어, HTML 형식 파일을 GitLab Pages에 게시하여 더 쉽게 검토할 수 있습니다.
JSON 및 HTML 형식으로 출력
코드 품질 보고서를 JSON 및 HTML 형식으로 출력하려면 추가 작업을 만듭니다. 이를 위해 코드 품질을 각각 파일 형식으로 한 번씩 실행해야 합니다.
HTML 형식으로 코드 품질 보고서를 출력하려면 extends: code_quality
를 사용하여 템플릿에 다른 작업을 추가하세요:
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
code_quality_html:
extends: code_quality
variables:
REPORT_FORMAT: html
artifacts:
paths: [gl-code-quality-report.html]
JSON 및 HTML 파일은 모두 작업 artifact로 출력됩니다. HTML 파일은 artifacts.zip
작업 artifact에 포함됩니다.
오직 HTML 형식으로 출력
코드 품질 보고서를 오직 HTML 형식으로 다운로드하려면 REPORT_FORMAT
을 html
로 설정하여 code_quality
작업의 기본 정의를 재정의합니다.
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
code_quality:
variables:
REPORT_FORMAT: html
artifacts:
paths: [gl-code-quality-report.html]
HTML 파일은 작업 artifact로 출력됩니다.
Merge Request 파이프라인에서 코드 품질 사용
기본 코드 품질 구성은 Merge Request 파이프라인에서 code_quality
작업을 실행하지 않습니다.
Merge Request 파이프라인에서 코드 품질을 실행하려면 현재 rules
와 일치하도록 코드 품질 rules
또는 workflow: rules
를 덮어씁니다.
예:
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
code_quality:
rules:
- if: $CODE_QUALITY_DISABLED
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event" # Merge Request 파이프라인에서 코드 품질 작업 실행
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # 기본 브랜치의 파이프라인에서 코드 품질 작업 실행 (다른 브랜치 파이프라인에서는 실행되지 않음)
- if: $CI_COMMIT_TAG # 태그용 파이프라인에서 코드 품질 작업 실행
개인 컨테이너 이미지 레지스트리 사용
개인 컨테이너 이미지 레지스트리를 사용하면 이미지 다운로드에 걸리는 시간이 줄어들고 외부 의존성도 줄일 수 있습니다. CodeClimate의 후속 docker pull
명령에 전달할 레지스트리 접두사를 구성해야 하므로 컨테이너 실행의 중첩된 방법 때문에 이것이 필요합니다.
다음 변수들은 필요한 이미지 풀을 모두 처리할 수 있습니다:
-
CODE_QUALITY_IMAGE
: 작업 환경에서 액세스할 수 있는 완전히 접두사가 붙은 이미지 이름입니다. 여기에는 GitLab 컨테이너 레지스트리를 사용하여 자체 사본을 호스팅할 수 있습니다. -
CODECLIMATE_PREFIX
: 원하는 컨테이너 이미지 레지스트리의 도메인입니다. 이는 CodeClimate CLI에서 지원되는 구성 옵션입니다.- 슬래시 (
/
)를 뒤에 포함해야 합니다. -
https://
와 같은 프로토콜 접두사를 포함해서는 안 됩니다.
- 슬래시 (
-
CODECLIMATE_REGISTRY_USERNAME
:CODECLIMATE_PREFIX
에서 구문 분석된 레지스트리 도메인의 사용자 이름을 지정하는 선택적 변수입니다. -
CODECLIMATE_REGISTRY_PASSWORD
:CODECLIMATE_PREFIX
에서 구문 분석된 레지스트리 도메인의 암호를 지정하는 선택적 변수입니다.
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
code_quality:
variables:
CODE_QUALITY_IMAGE: "my-private-registry.local:12345/codequality:0.85.24"
CODECLIMATE_PREFIX: "my-private-registry.local:12345/"
이 예제는 GitLab 코드 품질에 특화되어 있습니다. Docker-in-Docker 서비스용 레지스트리 미러를 구성하는 자세한 지침에 대해서는 Docker-in-Docker 서비스에 대한 레지스트리 미러 사용를 참조하십시오.
필요한 이미지
다음 이미지는 기본 .codeclimate.yml
에 필요합니다:
codeclimate/codeclimate-structure:latest
codeclimate/codeclimate-csslint:latest
codeclimate/codeclimate-coffeelint:latest
codeclimate/codeclimate-duplication:latest
codeclimate/codeclimate-eslint:latest
codeclimate/codeclimate-fixme:latest
codeclimate/codeclimate-rubocop:rubocop-0-92
사용자 정의 .codeclimate.yml
구성 파일을 사용하는 경우 프로젝트의 개인 컨테이너 레지스트리에 지정된 플러그인을 추가해야 합니다.
인증을 사용하여 DockerHub 사용
코드 품질 이미지의 대체 소스로 DockerHub를 사용할 수 있습니다.
전제 조건:
- 프로젝트 내에서 보호된 CI/CD 변수로 사용자 이름과 비밀번호 추가
DockerHub를 사용하려면 .gitlab-ci.yml
파일에서 다음 변수를 구성하세요:
CODECLIMATE_PREFIX
CODECLIMATE_REGISTRY_USERNAME
CODECLIMATE_REGISTRY_PASSWORD
예시:
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
code_quality:
variables:
CODECLIMATE_PREFIX: "registry-1.docker.io/"
CODECLIMATE_REGISTRY_USERNAME: $DOCKERHUB_USERNAME
CODECLIMATE_REGISTRY_PASSWORD: $DOCKERHUB_PASSWORD
의존성 프록시 사용
의존성 프록시를 사용하여 의존성 다운로드에 소요된 시간을 줄일 수 있습니다.
전제 조건:
- 프로젝트 그룹에서 의존성 프록시 활성화됨
의존성 프록시를 참조하려면 .gitlab-ci.yml
파일에서 다음 변수를 구성하세요:
CODE_QUALITY_IMAGE
CODECLIMATE_PREFIX
CODECLIMATE_REGISTRY_USERNAME
CODECLIMATE_REGISTRY_PASSWORD
예시:
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
code_quality:
variables:
## `$CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX`에 슬래시 추가해야 합니다.
CODECLIMATE_PREFIX: $CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX/
CODECLIMATE_REGISTRY_USERNAME: $CI_DEPENDENCY_PROXY_USER
CODECLIMATE_REGISTRY_PASSWORD: $CI_DEPENDENCY_PROXY_PASSWORD
사용자 지정 도구 구현
GitLab에 사용자 지정 도구를 통합하여 코드 품질 보고서를 제공할 수 있습니다.
코드 품질 보고서 아티팩트 JSON 파일에는 다음과 같은 속성을 가진 객체 배열이 포함되어야 합니다.
이름 | 설명 |
---|---|
description
| 코드 품질 위반에 대한 설명 |
check_name
| 이 문제를 발생시킨 정적 분석 확인을 나타내는 고유한 이름 |
fingerprint
| 코드 품질 위반이나 식별하기 위한 고유한 지문. 예: MD5 해시 |
severity
| 심각도 문자열 (info , minor , major , critical , 또는 blocker 가능)
|
location.path
| 코드 품질 위반이 포함된 파일의 상대 경로 |
location.lines.begin 또는 location.positions.begin.line
| 코드 품질 위반이 발생한 줄 |
사용자 지정 코드 품질 도구를 구현하려면:
-
.gitlab-ci.yml
파일에 코드 품질 보고서 아티팩트 생성하는 작업 정의 - 도구를 구성하여 코드 품질 보고서 아티팩트를 JSON 파일로 생성하도록 구현
예시:
[
{
"description": "'unused' is assigned a value but never used.",
"check_name": "no-unused-vars",
"fingerprint": "7815696ecbf1c96e6894b779456d330e",
"severity": "minor",
"location": {
"path": "lib/index.js",
"lines": {
"begin": 42
}
}
}
]
여러 도구 통합
코드 품질은 파이프라인의 모든 작업에서 gl-code-quality-report.json
파일로 결과를 결합합니다. 결과적으로 여러 개별 도구를 지원되는 Code-Quality.gitlab-ci.yml
템플릿과 함께 또는 대신하여 사용할 수 있습니다.
다음은 필요한 형식의 ESLint 출력을 반환하는 예시입니다:
eslint:
image: node:18-alpine
script:
- npm ci
- npx eslint --format gitlab .
artifacts:
reports:
codequality: gl-code-quality-report.json
분석 플러그인 사용
코드 품질 기능을 확장하려면 Code Climate 분석 플러그인을 사용할 수 있습니다.
예를 들어 SonarJava analyzer를 사용하려면:
- 리포지터리 루트에
.codeclimate.yml
파일 추가 -
플러그인을 활성화하는 코드를
.codeclimate.yml
파일에 추가version: "2" plugins: sonar-java: enabled: true
이렇게 하면 프로젝트에 포함된 기본 .codeclimate.yml
의 plugins:
섹션에 SonarJava가 추가됩니다.
plugins:
섹션의 변경 사항은 기본 .codeclimate.yml
의 exclude_patterns
섹션에 영향을 주지 않습니다. 자세한 내용은 Code Climate 문서의 파일 및 폴더 제외를 참조하세요.