- 일반적인 문제 해결 팁
- GitLab과 GitLab Runner 버전 확인
coordinator
란 무엇을 의미합니까?- Windows에서 서비스로 실행 중일 때 로그가 저장되는 위치는 어디입니까?
- 디버그 로깅 모드 활성화
- Docker 실행자 러너를 위한 DNS 구성
x509: unknown authority에 의해 서명된 인증서
가 표시됩니다/var/run/docker.sock
에 액세스 할 때Permission Denied
가 발생합니다- Docker-machine 오류:
Unable to query docker version: Cannot connect to the docker engine endpoint.
dialing environment connection: ssh: rejected: connect failed (open failed)
- autoscaled 러너에 AWS 인스턴스 프로필 추가하기
- Java 프로젝트 빌드 시 Docker 실행 시간이 초과됨
- 아티팩트를 업로드할 때 411 오류가 발생함
No URL provided, cache will not be download
/uploaded
- 오류:
warning: You appear to have cloned an empty repository.
- 오류:
zoneinfo.zip: no such file or directory
error when usingTimezone
orOffPeakTimezone
- 왜 GitLab Runner를 하나 이상 실행할 수 없을까요?
작업 실패(시스템 오류): 환경 준비 중:
- Runner가
정리 중
단계 후 갑자기 종료됨 - 작업이
원격 오류: tls: 잘못된 인증서 (exec.go:71:0s)
와 함께 실패함 - Helm 차트:
오류 .. 허가되지 않음
- Elasticsearch 서비스 컨테이너 시작 오류:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
docker+machine
실행자 준비 중 오류: 준비 실패: 종료 상태 1 3초 후 다시 시도될 것
GitLab Runner 문제 해결
자세한 내용은 거래처 문제 해결을 위해 도움을 줄 수 있습니다.
일반적인 문제 해결 팁
로그 보기:
-
tail -100 /var/log/syslog
(Debian) -
tail -100 /var/log/messages
(RHEL) -
docker logs gitlab-runner-container
(Docker) -
kubectl logs gitlab-runner-pod
(Kubernetes)
서비스 재시작:
service gitlab-runner restart
도커 머신 확인:
sudo docker-machine ls
sudo su - && docker-machine ls
모든 도커 머신 삭제:
docker-machine rm $(docker-machine ls -q)
config.toml
을 변경한 후:
service gitlab-runner restart
docker-machine rm $(docker-machine ls -q)
-
tail -f /var/log/syslog
(Debian) -
tail -f /var/log/messages
(RHEL)
GitLab과 GitLab Runner 버전 확인
GitLab은 역호환성을 보장하려고 합니다. 그러나 첫 번째 문제 해결 단계로, GitLab Runner 버전이 GitLab 버전과 동일한지 확인해야합니다.
coordinator
란 무엇을 의미합니까?
coordinator
는 작업이 요청된 GitLab 설치입니다.
다시 말하면, 러너는 coordinator
(GitLab 설치에서 GitLab API를 통해)에게 작업을 요청하는 격리된 에이전트입니다.
Windows에서 서비스로 실행 중일 때 로그가 저장되는 위치는 어디입니까?
- Windows에서 GitLab Runner가 서비스로 실행 중이면 시스템 이벤트 로그가 생성됩니다. 이를 보려면 이벤트 뷰어를 열고(실행 메뉴에서
eventvwr.msc
를 입력하거나 “이벤트 뷰어”를 검색하여) Windows Logs > Application로 이동하십시오. Runner 로그의 Source은gitlab-runner
입니다. Windows Server Core를 사용하는 경우 마지막 20개의 로그 항목을 가져오려면 다음 PowerShell 명령을 실행하십시오.get-eventlog Application -Source gitlab-runner -Newest 20 | format-table -wrap -auto
.
디버그 로깅 모드 활성화
명령줄에서
터미널에서 root로 로그인 한 상태에서 다음을 실행하십시오:
gitlab-runner stop
gitlab-runner --debug run
GitLab Runner config.toml
에서
global section of the config.toml
에서 log_level
설정을 debug
로 설정하여 디버그 로깅을 활성화할 수 있습니다. config.toml
의 맨 위에 다음 라인을 추가하십시오. concurrent 줄의 전후에 위치시키십시오.
log_level = "debug"
Helm Chart에서
만약 GitLab Runner가 GitLab Runner Helm Chart를 사용하여 Kubernetes 클러스터에 설치된 경우, values.yaml
customization에서 logLevel
옵션을 설정하여 디버그 로깅을 활성화할 수 있습니다.
## Configure the GitLab Runner logging level. Available values are: debug, info, warn, error, fatal, panic
## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section
##
logLevel: debug
Docker 실행자 러너를 위한 DNS 구성
Docker 실행자와 함께 GitLab Runner를 구성할 때, 호스트의 Runner 데몬이 GitLab에 액세스할 수 있지만 빌드된 컨테이너는 액세스할 수 없을 수 있습니다. 이는 호스트에서 DNS가 구성되었지만 해당 구성이 컨테이너로 전달되지 않은 경우 발생할 수 있습니다.
예시:
GitLab 서비스와 GitLab Runner가 두 가지 다른 네트워크에 존재하고 두 가지 방법으로 브릿지되는 경우 (예: 인터넷 및 VPN을 통해) (예: 인터넷 및 VPN을 통해) 러너가 GitLab 서비스를 찾기 위해 사용하는 라우팅 메커니즘이 DNS를 쿼리하는 경우 컨테이너의 DNS 구성은 VPN을 통해 DNS 서비스를 사용해야한다는 것을 알지 못하고 인터넷을 통해 제공된 DNS를 기본값으로 사용할 수 있습니다. 이 구성은 다음 메시지로 이어집니다.
Created fresh repository.
++ echo 'Created fresh repository.'
++ git -c 'http.userAgent=gitlab-runner 16.5.0 linux/amd64' fetch origin +da39a3ee5e6b4b0d3255bfef95601890afd80709:refs/pipelines/435345 +refs/heads/master:refs/remotes/origin/master --depth 50 --prune --quiet
fatal: Authentication failed for 'https://gitlab.example.com/group/example-project.git/'
이 경우 인증 실패는 인터넷과 GitLab 서비스 간에있는 서비스에 의해 발생합니다. 이 서비스는 러너가 VPN을 통해 DNS 서비스를 사용한다면 우회 할 수 있습니다.
config.toml
파일의 [runners.docker]
섹션에서 dns
구성을 사용하여 Docker에게 사용할 DNS 서버를 알릴 수 있습니다.
dns = ["192.168.xxx.xxx","192.168.xxx.xxx"]
x509: unknown authority에 의해 서명된 인증서
가 표시됩니다
자체 서명 된 인증서를 확인하십시오. self-signed certificates를 참조하십시오.
/var/run/docker.sock
에 액세스 할 때 Permission Denied
가 발생합니다
Docker 실행자를 사용하려고하고 서버에 설치된 Docker Engine에 연결하려고하는 경우 Permission Denied
오류가 표시됩니다. 가장 가능성이 높은 원인은 시스템이 SELinux를 사용하는 경우입니다 (기본적으로 CentOS, Fedora 및 RHEL에서 활성화됨). 가능한 거부 사항에 대해 시스템의 SELinux 정책을 확인하십시오.
Docker-machine 오류: Unable to query docker version: Cannot connect to the docker engine endpoint.
이 오류는 기계 프로비저닝과 관련이 있으며 다음과 같은 이유로 발생할 수 있습니다:
-
TLS 실패가 있을 수 있습니다.
docker-machine
을 설치하면 일부 인증서가 유효하지 않을 수 있습니다. 이 문제를 해결하려면 인증서를 제거하고 러너를 다시 시작하세요:sudo su - rm -r /root/.docker/machine/certs/* service gitlab-runner restart
러너를 다시 시작한 후에는 인증서가 비어 있는 것으로 확인되고 다시 생성됩니다.
-
프로비저닝된 머신의 호스트명이 지원되는 길이보다 길 수 있습니다. 예를 들어, Ubuntu 머신의
HOST_NAME_MAX
에는 64자 제한이 있습니다. 호스트명은docker-machine ls
에 의해 보고됩니다. 러너 구성에서MachineName
을 확인하고 필요하면 호스트명 길이를 줄이세요.
dialing environment connection: ssh: rejected: connect failed (open failed)
이 오류는 Docker 오토스케일러가 SSH 터널을 통해 대상 시스템의 Docker 데몬에 연결하지 못할 때 발생할 수 있습니다. 대상 시스템에 SSH로 연결하고 docker info
와 같은 Docker 명령을 성공적으로 실행할 수 있는지 확인하세요.
autoscaled 러너에 AWS 인스턴스 프로필 추가하기
AWS IAM 역할을 작성한 후 IAM 콘솔에서 역할에는 역할 ARN 및 인스턴스 프로필 ARN이 있습니다. 인스턴스 프로필 이름을 사용해야 하며 역할 이름을 사용하면 안 됩니다.
다음 값을 [runners.machine]
섹션에 추가하세요:
"amazonec2-iam-instance-profile=<instance-profile-name>",
Java 프로젝트 빌드 시 Docker 실행 시간이 초과됨
이는 아마도 중단된 AUFS 스토리지 드라이버 때문일 가능성이 가장 높습니다: Java process hangs on inside container. 가장 좋은 해결책은 오버레이FS(빠름) 또는 DeviceMapper(느림) 중 하나로 스토리지 드라이버를 변경하는 것입니다.
도커 구성 및 실행에 대한 이 기사 또는 systemd로 제어 및 구성에 대한 이 기사를 확인하세요.
아티팩트를 업로드할 때 411 오류가 발생함
이는 GitLab 러너가 이전 버전의 NGINX에서 깨진 Transfer-Encoding: chunked
를 사용하기 때문에 발생합니다 (https://serverfault.com/questions/164220/is-there-a-way-to-avoid-nginx-411-content-length-required-errors).
NGINX를 새 버전으로 업그레이드하세요. 자세한 내용은 이 이슈를 참조하세요: https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1031
No URL provided, cache will not be download
/uploaded
작업에 대해 캐싱이 구성되어 있지만 GitLab 러너 도우미에게 액세스할 수있는 원격 캐시용 사전 서명 된 URL이나 잘못된 URL이 없을 때 발생합니다. 각 캐시 관련 config.toml
항목 및 공급자별 키와 값을 검토하세요.
유효하지 않은 URL은 URL 구문 요구 사항을 준수하지 않는 항목에서 생성될 수 있습니다.
또한 도우미 image
및 helper_image_flavor
가 일치하고 최신 상태인지 확인하세요.
자격 증명 구성에 문제가 있는 경우 GitLab 러너 프로세스 로그에 진단 오류 메시지가 추가됩니다.
오류: warning: You appear to have cloned an empty repository.
HTTP(s)를 사용하여 git clone
을 실행할 때(예: GitLab 러너 또는 테스트를 위해 매뉴얼으로) 다음 출력이 표시되면:
$ git clone https://git.example.com/user/repo.git
Cloning into 'repo'...
warning: You appear to have cloned an empty repository.
GitLab 서버 설치의 HTTP 프록시 구성이 올바르게 수행되었는지 확인하세요. 특히 HTTP 프록시를 사용하는 경우 GitLab 요청이 GitLab Workhorse 소켓이 아니라 GitLab Unicorn 소켓으로 프록시되지 않도록 하세요.
Git 프로토콜을 HTTP(S)를 통해 전달하면 GitLab Workhorse가 이를 해결하기 때문에 이것은 GitLab의 주요 엔트리포인트입니다.
Linux 패키지 설치를 사용하지만 번들로 묶인 NGINX 서버를 사용하고 싶지 않은 경우 번들로 묶이지 않은 웹 서버 사용 방법를 참조하세요.
GitLab 레시피 리포지터리에는 Apache 및 NGINX를 위한 웹 서버 구성 예제가 있습니다.
소스에서 설치한 GitLab을 사용하는 경우 위의 문서와 예제를 읽고 모든 HTTP(S) 트래픽이 GitLab Workhorse를 통해 전송되도록 하세요.
이 사용자 이슈 예제를 참조하세요.
오류: zoneinfo.zip: no such file or directory
error when using Timezone
or OffPeakTimezone
[[docker.machine.autoscaling]]
기간에서 시간대를 구성할 수 있습니다. 대부분의 Unix 시스템에서 기본적으로 작동해야하지만 특정 Unix 시스템 및 (Windows와 같이 GitLab Runner 이진 파일을 제공하는) 대부분의 비-Unix 시스템에서 시작 시 러너가 유사한 오류와 함께 중단될 수 있습니다.
이 오류는 Go의 time
패키지에서 발생합니다. Go는 지정된 시간대의 구성을로드하기 위해 IANA 시간대 데이터베이스를 사용합니다. 대부분의 Unix 시스템에서는이 데이터베이스가 이미 알려진 경로 중 하나에 있습니다 (/usr/share/zoneinfo
, /usr/share/lib/zoneinfo
, /usr/lib/locale/TZ/
). Go의 time
패키지는 세 경로 모두에서 시간대 데이터베이스를 찾습니다. 어느 것도 찾지 못하면 기계에 구성된 Go 개발 환경이 있으면 $GOROOT/lib/time/zoneinfo.zip
파일로 되돌아갑니다.
이 경로 중 어느 것도 존재하지 않는 경우(예: 본격적인 Windows 호스트) 위의 오류가 발생합니다.
시스템이 이 데이터베이스를 기본 제공하지 않는 경우를 대비하여 설치할 수 있습니다. Linux 시스템의 경우 다음과 같이 수행할 수 있습니다:
# Debian/Ubuntu 기반의 시스템에서
sudo apt-get install tzdata
# RPM 기반의 시스템에서
sudo yum install tzdata
# Linux Alpine에서
sudo apk add -U tzdata
시스템이 이 데이터베이스를 네이티브 방식으로 제공하지 않는 경우 아래 단계를 따라 OffPeakTimezone
을 작동시킬 수 있습니다:
-
zoneinfo.zip
을 다운로드하세요. 버전 v9.1.0부터는태그 된 경로에서 파일을 다운로드할 수 있습니다. 이 경우latest
를 tag 이름(예:v9.1.0
)으로 바꿔서zoneinfo.zip
다운로드 URL에 사용하세요. -
이 파일을 잘 알려진 디렉터리에 저장하세요. 예를 들어, Windows 기계에서 Runner를 호스팅하고 구성 파일이
C:\gitlab-runner\config.toml
에 저장되어 있는 경우zoneinfo.zip
을C:\gitlab-runner\zoneinfo.zip
에 저장하세요. -
ZONEINFO
환경 변수를 설정하여 전체 경로가 포함된zoneinfo.zip
파일을 설정하세요.run
명령을 사용하여 Runner를 시작하는 경우:ZONEINFO=/etc/gitlab-runner/zoneinfo.zip gitlab-runner run <other options ...>
또는 Windows를 사용하는 경우:
C:\gitlab-runner> set ZONEINFO=C:\gitlab-runner\zoneinfo.zip C:\gitlab-runner> gitlab-runner run <other options ...>
시스템 서비스로 GitLab Runner를 시작하는 경우 서비스 구성을 업데이트하거나 재정의하여 서비스 관리자 소프트웨어(유닉스 시스템)에서 또는 System Settings(Windows)을 통해 GitLab Runner 사용자를 위한 환경 변수 디렉터리에
ZONEINFO
변수를 추가하세요.
왜 GitLab Runner를 하나 이상 실행할 수 없을까요?
가능합니다. 그러나 동일한 config.toml
파일을 공유하지는 마십시오.
동일한 구성 파일을 사용하여 GitLab Runner를 여러 개 실행하면 예상치 못한 결과 및 디버그하기 어려운 동작이 발생할 수 있습니다. 특정 config.toml
파일을 한 번에 하나의 GitLab Runner 인스턴스만 사용할 수 있습니다.
작업 실패(시스템 오류): 환경 준비 중:
이 오류는 종종 쉘에서 프로필을 로드하고 스크립트 중 하나가 실패하는 경우에 발생합니다.
실패의 원인이 되는 dotfiles의 예시:
.bash_logout
.condarc
.rvmrc
또한 이 오류의 원인으로 SELinux가 있을 수 있습니다. SELinux 감사 로그를 확인하여 확인할 수 있습니다.
sealert -a /var/log/audit/audit.log
Runner가 정리 중
단계 후 갑자기 종료됨
“CrowdStrike Falcon Sensor”가 “컨테이너 드리프트 감지” 설정이 활성화되어 있을 때 작업의 파일 정리
단계 이후에 pod를 종료시킨다고 보고되었습니다. 작업이 완료될 수 있도록 이 설정을 비활성화해야 합니다.
작업이 원격 오류: tls: 잘못된 인증서 (exec.go:71:0s)
와 함께 실패함
이 오류는 작업 중에 시스템 시간이 크게 변경될 때 발생할 수 있습니다. 시스템 시간이 변경됨에 따라 SSL 인증서가 만료되어 실행자가 아티팩트를 업로드하려 할 때 오류가 발생합니다.
SSL 확인이 아티팩트 업로드 중에 성공하도록 하려면, 작업을 마칠 때 시스템 시간을 유효한 날짜와 시간으로 변경하세요. 아티팩트 파일의 생성 시간도 변경되었기 때문에, 이들은 자동으로 아카이브됩니다.
Helm 차트: 오류 .. 허가되지 않음
Helm으로 배포된 실행자(runner)를 제거하기 전에 GitLab에서 일시 중지하고 작업이 완료될 때까지 기다리세요.
작업이 실행 중인 동안 helm uninstall
또는 helm upgrade
로 실행자 pod를 제거하면,
다음과 같은 허가되지 않음
오류가 발생할 수 있습니다.
오류: Pod 정리 중에 오류 발생: 허가되지 않음
오류: 보안 정보 정리 중에 오류 발생: 허가되지 않음
작업 실패(시스템 오류): 허가되지 않음
이는 실행자가 제거되면 역할 바인딩도 제거될 수 있기 때문입니다. 작업이 완료되기 전까지 실행자 pod는 계속됩니다. 그리고 실행자가 이를 삭제하려고 합니다. 역할 바인딩이 없으면 실행자 pod는 더 이상 접근할 수 없습니다.
세부 정보는 이 이슈를 확인하세요.
Elasticsearch 서비스 컨테이너 시작 오류: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Elasticsearch는 실행 중인 인스턴스에 설정해야 하는 vm.max_map_count
요구사항이 있습니다.
플랫폼에 따라이 값을 올바르게 설정하는 방법은 Elasticsearch 문서를 참조하세요.
docker+machine
실행자 준비 중 오류: 준비 실패: 종료 상태 1 3초 후 다시 시도될 것
이 오류는 Docker 머신이 실행자 가상 머신을 성공적으로 만들지 못했을 때 발생할 수 있습니다. 오류에 대한 자세한 내용을 확인하려면 설정한 MachineOptions
와 동일한 가상 머신을 매뉴얼으로 만듭니다.
예:
docker-machine create --driver=google --google-project=GOOGLE-PROJECT-ID --google-zone=GOOGLE-ZONE ...
.