- 디버그 수준 로깅
- … (중략되었습니다)
- setuptools 프로젝트의 의존성 스캔이
use_2to3 is invalid
오류로 실패하는 문제 - psycopg2를 사용하는 프로젝트의 의존성 스캔이
pg_config executable not found
오류로 실패하는 문제 poetry config http-basic
과CI_JOB_TOKEN
을 사용할 때NoSuchOptionException
오류ERROR: Project has <number>
을 해결하는 데 사용되는 확인되지 않은 의존성의 오류- Go 프로젝트를 스캔할 때 빌드 제약 조건 설정
- Go 프로젝트의 의존성 스캔으로 인한 false positive
ssh
사용시Host key verification failed
오류ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE
ERROR: In --require-hashes mode, all requirements must have their versions pinned with ==
의존성 스캔 문제 해결
의존성 스캔 작업 중 다음과 같은 문제가 발생할 수 있습니다.
디버그 수준 로깅
문제 해결 시 디버그 수준 로깅이 유용할 수 있습니다. 자세한 내용은 디버그 수준 로깅을 참조하세요.
특정 언어 또는 패키지 관리자에 대한 지원 부재 해결 방법
“지원되는 언어” 섹션에서 언급한대로, 일부 의존성 정의 파일은 아직 지원되지 않습니다. 그러나 언어, 패키지 관리자 또는 제3자 도구가 정의 파일을 지원되는 형식으로 변환할 수 있다면 의존성 스캔이 가능합니다.
일반적인 접근 방법은 다음과 같습니다:
-
.gitlab-ci.yml
파일에 전용 변환 작업을 정의합니다. 적절한 Docker 이미지, 스크립트 또는 둘 다를 사용하여 변환을 용이하게 합니다. - 해당 작업이 변환된 지원 파일을 아티팩트로 업로드하도록 합니다.
- 변환된 정의 파일을 사용하기 위해
dependency_scanning
작업에dependencies: [<your-converter-job>]
를 추가합니다.
예를 들어, pyproject.toml
파일만 있는 Poetry 프로젝트는 다음과 같이 poetry.lock
파일을 생성할 수 있습니다.
include:
- template: Jobs/Dependency-Scanning.gitlab-ci.yml
stages:
- test
gemnasium-python-dependency_scanning:
# Work around https://gitlab.com/gitlab-org/gitlab/-/issues/32774
before_script:
- pip install "poetry>=1,<2" # 또는 다른 방법을 통해 설치: https://python-poetry.org/docs/#installation
- poetry update --lock # 분석할 수 있도록 lock 파일을 생성함
Error response from daemon: error processing tar file: docker-tar: relocation error
이 오류는 의존성 스캔 작업을 실행하는 Docker 버전이 19.03.0
일 때 발생합니다.
Docker를 19.03.1
이상으로 업데이트하는 것을 고려해보세요. 이전 버전에는 영향을 미치지 않습니다. 자세한 내용은 이슈를 참조하세요.
경고 메시지 gl-dependency-scanning-report.json: no matching files
획득
이에 대한 정보는 일반 애플리케이션 보안 문제 해결 섹션을 참조하세요.
… (중략되었습니다)
setuptools 프로젝트의 의존성 스캔이 use_2to3 is invalid
오류로 실패하는 문제
2to3의 지원이 setuptools
버전 v58.0.0
에서 제거되었습니다. Dependency Scanning은 python 3.9
를 실행하며 setuptools
버전 58.1.0+
를 사용하는데, 이는 2to3
를 지원하지 않습니다. 따라서 lib2to3
에 의존하는 setuptools
의존성은 다음과 같은 메시지로 실패합니다:
error in <dependency name> setup command: use_2to3 is invalid
이 오류를 해결하려면 분석 도구의 setuptools
버전을 다운그레이드하세요(예: v57.5.0
):
gemnasium-python-dependency_scanning:
before_script:
- pip install setuptools==57.5.0
psycopg2를 사용하는 프로젝트의 의존성 스캔이 pg_config executable not found
오류로 실패하는 문제
psycopg2
에 종속된 Python 프로젝트를 스캔하면 다음과 같은 메시지로 실패할 수 있습니다:
Error: pg_config executable not found.
psycopg2는 libpq-dev
Debian 패키지에 의존하는데, 이 패키지는 gemnasium-python
도커 이미지에 설치되어 있지 않습니다. 이 문제를 해결하려면 before_script
에서 libpq-dev
패키지를 설치하세요:
gemnasium-python-dependency_scanning:
before_script:
- apt-get update && apt-get install -y libpq-dev
poetry config http-basic
과 CI_JOB_TOKEN
을 사용할 때 NoSuchOptionException
오류
이 오류는 자동으로 생성된 CI_JOB_TOKEN
이 하이픈(-
)으로 시작될 때 발생할 수 있습니다. 이 오류를 피하려면 Poetry 구성 권장을 따르세요.
ERROR: Project has <number>
을 해결하는 데 사용되는 확인되지 않은 의존성의 오류
Project has <number> unresolved dependencies
오류 메시지는 gradle.build
또는 gradle.build.kts
파일에서 발생하는 의존성 해결 문제를 나타냅니다. 현재 릴리스에서 gemnasium-maven
은 확인되지 않은 의존성을 만나면 처리를 계속할 수 없습니다. 그러나 오픈 에픽에서 확인되지 않은 의존성 오류에서 복구하고 의존성 그래프를 생성할 수 있도록 gemnasium-maven
을 허용하기 위한 작업이 진행 중입니다. 이 에픽이 해결될 때까지 gradle.build
파일을 수정하는 방법에 대한 자세한 내용은 Gradle 의존성 해결 설명서를 참조하세요.
Go 프로젝트를 스캔할 때 빌드 제약 조건 설정
의존성 스캔은 linux/amd64
컨테이너 내에서 실행됩니다. 따라서 Go 프로젝트의 빌드 디렉터리에는 이 환경과 호환되는 의존성이 포함됩니다. 배포 환경이 linux/amd64
가 아닌 경우 최종 의존성 디렉터리에는 추가 호환되지 않는 모듈이 포함될 수 있습니다. 이 문제를 방지하려면 .gitlab-ci.yml
파일의 GOOS
및 GOARCH
환경 변수를 설정하여 빌드 프로세스를 배포 환경의 운영 체제 및 아키텍처를 대상으로 구성할 수 있습니다.
예:
variables:
GOOS: "darwin"
GOARCH: "arm64"
또한 GOFLAGS
변수를 사용하여 빌드 태그 제약을 지정할 수 있습니다:
variables:
GOFLAGS: "-tags=test_feature"
Go 프로젝트의 의존성 스캔으로 인한 false positive
go.sum
파일에는 프로젝트의 빌드 디렉터리 생성 시 고려된 각 모듈의 항목이 포함됩니다. go.sum
파일에는 모듈의 여러 버전이 포함되지만, go build
에서 사용하는 MVS 알고리즘은 하나만 선택합니다. 따라서 의존성 스캔이 go.sum
을 사용하면 false positive를 보고할 수 있습니다.
false positive를 방지하려면 go.sum
을 생성할 수 없는 경우에만 Gemnasium이 go.sum
을 사용합니다. go.sum
을 선택하면 다음 경고가 발생합니다:
[WARN] [Gemnasium] [2022-09-14T20:59:38Z] ▶ Selecting "go.sum" parser for "/test-projects/gitlab-shell/go.sum". False positives may occur. See https://gitlab.com/gitlab-org/gitlab/-/issues/321081.
ssh
사용시 Host key verification failed
오류
gemnasium
이미지에서 openssh-client
를 설치한 후 ssh
를 사용하면 Host key verification failed
메시지가 표시될 수 있습니다. 이미지 빌드 시 $HOME
을 /tmp
로 설정하는 경우 ~
를 사용하여 사용자 디렉터리를 나타내면 발생할 수 있습니다. 이 문제는 Cloning project over SSH fails when using gemnasium-python
image에서 설명되어 있습니다. openssh-client
는 /root/.ssh/known_hosts
를 찾을 것으로 예상하지만 해당 경로는 존재하지 않습니다. 대신 /tmp/.ssh/known_hosts
가 존재합니다.
이 문제는 gemnasium-python
에서 openssh-client
가 사전 설치되어 해결되었지만, 다른 이미지에서 처음부터 openssh-client
를 설치하는 경우에 발생할 수 있습니다. 이를 해결하려면 다음 중 하나를 수행할 수 있습니다:
- 키 및 호스트를 설정할 때 절대 경로(
/root/.ssh/known_hosts
대신~/.ssh/known_hosts
)를 사용하세요. - 관련
known_hosts
파일을 지정하는ssh
구성에UserKnownHostsFile
를 추가하세요. 예:echo 'UserKnownHostsFile /tmp/.ssh/known_hosts' >> /etc/ssh/ssh_config
.
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE
이 오류는 requirements.txt
파일의 패키지 해시가 다운로드된 패키지의 해시와 일치하지 않을 때 발생합니다. 보안상의 이유로 pip
는 패키지가 변조된 것으로 간주하고 설치를 거부할 것입니다. 이 문제를 해결하려면 요구 사항 파일에 포함된 해시가 올바른지 확인하세요. pip-compile
에서 생성된 요구 사항 파일의 경우 pip-compile --generate-hashes
를 실행하여 해시가 최신인지 확인하세요. pipenv
를 사용하는 경우 Pipfile.lock
에서 최신 패키지 해시가 포함되어 있는지 확인하려면 pipenv verify
를 실행하세요.
ERROR: In --require-hashes mode, all requirements must have their versions pinned with ==
이 오류는 요구 사항 파일이 GitLab Runner에서 사용하는 플랫폼과 다른 플랫폼에서 생성된 경우 발생합니다. 다른 플랫폼을 대상으로하는 지원은 issue 416376에서 추적됩니다.