GitLab 18 업그레이드 참고 사항
GitLab v19.5Offering: GitLab Self-Managed
요약
이 페이지에는 GitLab 18의 마이너 버전과 패치 버전에 대한 업그레이드 정보가 있습니다. Helm 차트 설치에 대한 추가 정보는 Helm 차트 9.0 업그레이드 노트를 참고합니다. 인스턴스 관리자에게 예측 가능한 업그레이드 일정을 제공하기 위해, 다음 버전에 필수 업그레이드 경유 지점이 있습니다.
이 페이지에는 GitLab 18의 마이너 버전과 패치 버전에 대한 업그레이드 정보가 있습니다. 다음 항목에 해당하는 지침을 반드시 확인합니다.
- 사용 중인 설치 유형.
- 현재 버전과 타깃 버전 사이의 모든 버전.
Helm 차트 설치에 대한 추가 정보는 Helm 차트 9.0 업그레이드 노트를 참고합니다.
필수 업그레이드 경유 지점#
인스턴스 관리자에게 예측 가능한 업그레이드 일정을 제공하기 위해, 다음 버전에 필수 업그레이드 경유 지점이 있습니다.
18.218.518.818.11
업그레이드 노트 참조#
다음은 GitLab 마이너 버전별 업그레이드 노트 참조 목록입니다. 각 목록 항목은 자세한 내용이 담긴 섹션으로 연결됩니다.
(Geo) 나 (Linux package)처럼 설치 방식이 표시된 항목은
해당 방식에만 적용됩니다. 그 외 항목은 모든 설치 방식에 적용됩니다.
18.11로 업그레이드#
GitLab 18.11로 업그레이드하기 전에 다음을 검토합니다.
- [18.11.0 - 18.11.2] - 파일 스토리지에서
log_errorNoMethodError로 Geo blob 동기화 실패 (Geo) - [18.11.0 - 18.11.4] - Geo 컨테이너 리포지터리 동기화가 OCI 이미지 인덱스 태그를 조용히 건너뜀 (Geo)
- [18.11.0 - 18.11.1] - 내부·공개 프로젝트에서 컨테이너 이미지를 가져올 때 발생하는 CI job 토큰 회귀
- [18.11.0] - 18.11로 업그레이드하면 PostgreSQL 17.7 버전 업그레이드가 수행됨 (Linux package, Docker, Geo)
- [18.11.0] - SLES 12.5 패키지에서 Mattermost와 Spamcheck 제거 (Linux package)
- [18.11.0] - 컴파일된 job 별 설정에 1 MiB 크기 제한 적용
18.10으로 업그레이드#
GitLab 18.10으로 업그레이드하기 전에 다음을 검토합니다.
- [18.10.0 - 18.10.3] - SLES 12.5 RPM 패키지 설치 실패 (Linux package)
- [18.10.0 - 18.10.5] - 파일 스토리지에서
log_errorNoMethodError로 Geo blob 동기화 실패 (Geo) - [18.10.0 - 18.10.7] - Geo 컨테이너 리포지터리 동기화가 OCI 이미지 인덱스 태그를 조용히 건너뜀 (Geo)
- [18.10.0 - 18.10.3] - 아웃바운드 필터링 사용 시 Geo 사이트 URL 차단 (Geo)
- [18.10.0 - 18.10.4] - Geo blob 다운로드 실패 (Geo)
- [18.10.0 - 18.10.3] - Geo 세컨더리에서 스로틀된 job 이 소진되지 않음 (Geo)
- [18.10.0 - 18.10.3] - Helm 차트·Operator 배포에서 Sidekiq 동시성 제한기가 job 적체를 유발 (Helm chart, Operator)
- [18.10.0] - 모든 프로젝트에서 시크릿 탐지 거짓 양성 탐지가 기본 활성화
- [18.10.0] - 따옴표 없는 플레이스홀더가 있는 커스텀 웹훅 템플릿을 저장할 수 없음
- [18.10.0] - 파이프라인 실행 정책의 dotenv 변수가
variables_override를 따름
18.9로 업그레이드#
GitLab 18.9로 업그레이드하기 전에 다음을 검토합니다.
- [18.9.1 - 18.9.5] - SLES 12.5 RPM 패키지 설치 실패 (Linux package)
- [18.9.0 - 18.9.5] - 아웃바운드 필터링 사용 시 Geo 사이트 URL 차단 (Geo)
- [18.9.0 - 18.9.5] - Geo 세컨더리에서 스로틀된 job 이 소진되지 않음 (Geo)
- [18.9.0 - 18.9.5] - Helm 차트·Operator 배포에서 Sidekiq 동시성 제한기가 job 적체를 유발 (Helm chart, Operator)
- [18.9.0] - PostgreSQL CheckViolation으로 18.9 업그레이드 실패
- [18.9.0] - 따옴표 없는 플레이스홀더가 있는 커스텀 웹훅 템플릿을 저장할 수 없음
18.8로 업그레이드#
GitLab 18.8로 업그레이드하기 전에 다음을 검토합니다.
- [18.8.2] - 차단된 사용자의 배포 키와 개인 액세스 토큰 무효화
- [18.8.0] - 머지 리퀘스트 머지 데이터 배치 백그라운드 마이그레이션
- [18.8.0] - ClickHouse 딕셔너리 생성 오류
- [18.8.0] - CI 데이터 배치 백그라운드 마이그레이션 재도입
- [18.8.0] - 따옴표 없는 플레이스홀더가 있는 커스텀 웹훅 템플릿을 저장할 수 없음
18.7로 업그레이드#
GitLab 18.7로 업그레이드하기 전에 다음을 검토합니다.
- [18.7.2] - 차단된 사용자의 배포 키와 개인 액세스 토큰 무효화
- [18.7.0] - CI 빌드 메타데이터 마이그레이션
- [18.7.0] - Geo ActionCable 허용 오리진 설정 (Geo)
18.6으로 업그레이드#
GitLab 18.6으로 업그레이드하기 전에 다음을 검토합니다.
- [18.6.5] - Geo VerificationStateBackfillWorker 느린 쿼리 수정 (Geo)
- [18.6.4] - 차단된 사용자의 배포 키와 개인 액세스 토큰 무효화
- [18.6.2] - Commits·Files API 크기 및 속도 제한
- [18.6.2] - Duo Agent Platform 러너 제한
18.5로 업그레이드#
GitLab 18.5로 업그레이드하기 전에 다음을 검토합니다.
- [18.5.4] - Commits·Files API 크기 및 속도 제한
- [18.5.0 - 18.5.1] - Geo 로그 커서 마이그레이션 수정 (Geo)
- [18.5.0] - 디자인 관리 designs 백필 완료 처리
- [18.5.0] - NGINX 라우팅 변경으로 404 오류 발생 (Linux package)
18.4로 업그레이드#
GitLab 18.4로 업그레이드하기 전에 다음을 검토합니다.
- [18.4.6] - Commits·Files API 크기 및 속도 제한
- [18.4.2 - 18.4.3] - 배치 백그라운드 마이그레이션 nil 오류
- [18.4.1] - 서비스 거부 방지를 위한 JSON 입력 제한
- [18.4.0 - 18.4.3] - Geo 로그 커서 마이그레이션 수정 (Geo)
- [18.4.0 - 18.4.1] - Geo 복제 TypeError (Geo)
18.3으로 업그레이드#
GitLab 18.3으로 업그레이드하기 전에 다음을 검토합니다.
- [18.3.3] - 서비스 거부 방지를 위한 JSON 입력 제한
- [18.3.0] - LdapAddOnSeatSyncWorker가 Duo 좌석을 제거
- [18.3.0] - Geo Rake 점검 수정 (Geo)
- [18.3.0 - 18.3.2] - Geo Pages 파일명 수정 (Geo)
18.2로 업그레이드#
GitLab 18.2로 업그레이드하기 전에 다음을 검토합니다.
- [18.2.7] - 서비스 거부 방지를 위한 JSON 입력 제한
- [18.2.0] - 18.1과 18.2 사이 무중단 업그레이드 푸시 오류
- [18.2.0 - 18.2.1] - Geo VerificationStateBackfillService
ci_job_artifact_states(Geo) - [18.2.0 - 18.2.6] - Geo Pages 파일명 수정 (Geo)
18.1로 업그레이드#
GitLab 18.1로 업그레이드하기 전에 다음을 검토합니다.
- [18.1.0] - Elasticsearch
strict_dynamic_mapping_exception - [18.1.0 - 18.1.1] - PostgreSQL
ci_job_artifacts오류 - [18.1.0] - 머지 리퀘스트 almost ready 버그
- [18.1.0] - Geo HTTP 500 프록시 오류 (Geo)
- [18.1.0 - 18.1.3] - Geo VerificationStateBackfillService
ci_job_artifact_states(Geo) - [18.1.0] - Geo Pages 파일명 수정 (Geo)
18.0으로 업그레이드#
GitLab 18.0으로 업그레이드하기 전에 다음을 검토합니다.
- [18.0.0] - PostgreSQL 14 미지원
- [18.0.0] -
pg_dump바이너리 호환성 - [18.0.0] - 17.11에서 무중단 업그레이드 시 파이프라인 실패
- [18.0.0] - Gitaly 설정을
git_data_dirs에서 storage로 마이그레이션 (Linux package) - [18.0.0 - 18.0.1] - Geo CE에서 EE로 되돌릴 때 마이그레이션 오류 (Geo)
- [18.0.0 - 18.0.2] - Geo HTTP 500 프록시 오류 (Geo)
- [18.0.0 - 18.0.5] - Geo VerificationStateBackfillService
ci_job_artifact_states(Geo) - [18.0.0] - Docker 설치에서 PRNG is not seeded 오류 (Docker)
- [17.11.0] - Bitnami PostgreSQL·Redis 이미지 지원 중단 (Helm chart)
업그레이드 노트#
GitLab 18의 개별 업그레이드 노트입니다.
파이프라인 실행 정책의 dotenv 변수가 variables_override를 따름#
-
영향 대상: 파이프라인 실행 정책
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 18.10 18.10.0 이상
GitLab 18.10 이상에서는 dotenv 아티팩트
(artifacts:reports:dotenv)의 변수도 파이프라인 실행 정책의 다른 변수와 동일하게
variables_override 규칙을 적용받습니다(기본값이 안전한 설정입니다).
이전에는 dotenv 변수가 variables_override 제한을 우회할 수 있어
정책의 보안 통제가 약해졌습니다.
파이프라인이 dotenv 변수로 정책에 정의된 변수를 덮어쓰는 방식에 의존했다면
variables_override.allowed: false가 설정된 경우 해당 동작은 더 이상
작동하지 않습니다. 이전 동작으로 되돌리려면 새로 추가된 dotenv 옵션을
allow_override로 설정합니다.
variables_override:
allowed: false
exceptions: []
dotenv: allow_override
자세한 내용은 파이프라인 실행 정책 과 머지 리퀘스트 214991을 참고합니다.
파일 스토리지에서 log_error NoMethodError로 Geo blob 동기화 실패#
-
영향 대상: Geo(파일 스토리지 전용)
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.11 18.11.0 - 18.11.2 18.11.3 18.10 18.10.0 - 18.10.5 18.10.6 18.0 - 18.9 모든 패치 릴리스 수정되지 않음
오브젝트 스토리지가 아니라 파일 스토리지에 blob을 저장하는 Geo 보조 사이트에서는 blob 복제(파이프라인 아티팩트, LFS 객체, 업로드, job 아티팩트 등)가 오해를 부르는 다음 오류로 실패할 수 있습니다.
Error while attempting to sync: undefined method `log_error' for an instance of Gitlab::Geo::Replication::BlobDownloader
자세한 내용은 이슈 598565를 참고합니다.
Geo 컨테이너 리포지터리 동기화가 OCI 이미지 인덱스 태그를 조용히 건너뜀#
-
영향 대상: Geo(컨테이너 레지스트리)
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.11 18.11.0 - 18.11.4 18.11.5 18.10 18.10.0 - 18.10.7 18.10.8 18.0 - 18.9 모든 패치 릴리스 수정되지 않음
Geo 보조 사이트에서 컨테이너 리포지터리 동기화가 매니페스트가 OCI 이미지
인덱스(application/vnd.oci.image.index.v1+json)인 태그를 조용히 건너뛰었습니다.
멀티 아키텍처 이미지와 BuildKit 캐시 태그가 이 매니페스트 유형을 흔히 사용합니다.
오류는 발생하지 않고 태그 수도 일치했지만, 세컨더리에서 해당 태그를 docker pull
하면 manifest unknown 이 반환되었습니다. 같은 원인으로 동기화가 제거하지 못하는
고아 태그도 세컨더리에 남았습니다.
기본 사이트와 보조 사이트를 모두 수정된 버전으로 업그레이드하면 이후 새로 동기화되는 태그는 정상입니다. 기존에 영향을 받은 리포지터리는 다음 검증 주기에 맞춰 정상화되며, 재검증 주기(기본값 90일)만큼 걸릴 수 있습니다. 영향을 받은 리포지터리를 즉시 복구하려면 보조 사이트에서 컨테이너 리포지터리를 다시 동기화합니다.
자세한 내용은 이슈 600486을 참고합니다.
내부·공개 프로젝트에서 컨테이너 이미지를 가져올 때 발생하는 CI job 토큰 회귀#
-
영향 대상: 모든 설치 방식
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.11 18.11.0 - 18.11.1 18.11.2
CI job 이 CI_JOB_TOKEN으로 내부 또는 공개 프로젝트에서 컨테이너 이미지를
가져오는 경우 GitLab 18.11.0 또는 18.11.1로 업그레이드하지 않습니다.
GitLab 18.11.0의 회귀로 CI job 이 CI_JOB_TOKEN을 사용해 내부 또는 공개
프로젝트에서 컨테이너 이미지를 가져오지 못합니다. 영향을 받는 파이프라인은
denied: requested access to the resource is denied 오류로 실패합니다. 수정 사항은
18-11-stable-ee에 백포트되었으나 18.11.1 태그가 생성된 뒤에 반영되어
18.11.0과 18.11.1 모두 영향을 받습니다.
이미 업그레이드한 운영자가 사용할 수 있는 우회 방법은 다음과 같습니다.
- 이미지를 사용하는 각 프로젝트를 소스 프로젝트의 CI job 토큰 허용 목록에 추가합니다. CI/CD job 토큰 보안을 참고합니다.
CI_JOB_TOKEN대신 개인, 그룹 또는 프로젝트 액세스 토큰으로 컨테이너 가져오기를 인증합니다.- GitLab 인스턴스에 백포트 커밋
e3c0f308을 적용합니다.
자세한 내용은 이슈 597223을 참고합니다.
SLES 12.5 RPM 패키지 설치 실패#
-
영향 대상: Linux package
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 설치 가능한 패치 레벨 18.10 18.10.0 - 18.10.3 18.10.4 - 18.10.5 18.9 18.9.1 - 18.9.5 18.9.0, 18.9.6
SLES 12.5에서는 GitLab 18.9.0, 18.10.4, 18.11.2만 정상적으로 설치됩니다. 영향 범위에 있는 나머지 패치 릴리스는 설치에 실패합니다.
SLES 12.5 용 GitLab Linux 패키지는 rpm 또는 zypper 명령으로 설치할 때
error: install failed 오류로 실패합니다. 원인은 SLES 12 SP5에 포함된 버전인
RPM 4.11.2의 16 MiB RPM 헤더 데이터 크기 제한(HEADER_DATA_MAX)입니다.
GitLab 패키지의 파일 수가 늘어나면서 직렬화된 RPM 헤더가 이 제한을 초과했고,
그 결과 설치 중 RPM 데이터베이스 트랜잭션이 아무 메시지 없이
실패했습니다.
이 문제는 Linux 패키지의 파일 수를 줄여 특정 패치 릴리스에서 해결되었습니다 (자세한 내용은 머지 리퀘스트 9215를 참고합니다). 다만 파일 수가 다시 늘어나면 이후 패치 릴리스에서 재발할 수 있습니다. SLES 12.5에 GitLab을 설치하려면 위에 나열된 설치 가능한 패치 레벨만 사용합니다.
SUSE 배포판은 GitLab 18.9에서 지원이 중단되었고 GitLab 19.0에서 제거될 예정입니다. 지원되는 운영체제로 마이그레이션하는 방안을 검토합니다.
자세한 내용은 이슈 9647을 참고합니다.
SLES 12.5 패키지에서 Mattermost와 Spamcheck 제거#
- 영향 대상: Linux package
- 영향받는 버전: 18.11.0 이상
RPM 패키지 크기 제약으로 인해 SLES 12.5 Linux 패키지에서 Mattermost와 Spamcheck가 제거되었습니다.
SUSE 배포판은 GitLab 18.9에서 지원이 중단되었고 GitLab 19.0에서 제거될 예정이며, Mattermost와 Spamcheck도 GitLab 19.0에서 모든 배포판에서 제거될 예정입니다.
SLES 12.5에서 Mattermost를 사용하고 있다면 Mattermost를 독립 배포로 마이그레이션할 수 있습니다. SLES 12.5에서 Spamcheck를 사용하고 있다면 Docker로 배포할 수 있습니다.
Geo 세컨더리에서 스로틀된 job 이 소진되지 않음#
-
영향 대상: Geo
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.10 18.10.0 - 18.10.3 18.10.4 18.9 18.9.0 - 18.9.5 18.9.6
Geo 보조 사이트가 ConcurrencyLimit::ResumeWorker를 비활성화해, 스로틀된
Geo::EventWorker와 Geo::SyncWorker job 이 소진되지 않고 Redis에
쌓였습니다. 이로 인해 Geo 복제가 멈추고 Redis 메모리 사용량이 늘 수 있습니다.
자세한 내용은 이슈 595824를 참고합니다.
아웃바운드 필터링 사용 시 Geo 사이트 URL 차단#
-
영향 대상: Geo
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.10 18.10.0 - 18.10.3 18.10.4 18.9 18.9.0 - 18.9.5 18.9.6
아웃바운드 요청 필터링을 활성화하면 Geo 사이트 URL 이 잘못 차단됩니다.
이 때문에 Geo 사이트를 저장할 때
Url is blocked: Requests to hosts and IP addresses not on the Allow List are denied 같은 메시지와 함께 검증 오류가 발생합니다.
아웃바운드 필터링을 구성할 때 Geo 사이트 URL 이 아웃바운드 로컬 요청 허용 목록에 자동으로 추가되지 않기 때문에 발생하는 문제입니다.
자세한 내용은 이슈 544821을 참고합니다.
Geo blob 다운로드 타임아웃 설정#
- 영향 대상: Geo
- 영향받는 버전: 18.10.0
현재 8시간(28,800초)으로 하드코딩된 Geo blob 다운로드 타임아웃 때문에 전송에 더 긴 시간이 필요한 초대형 LFS 객체(5GB 이상)의 동기화가 실패하고 "started" 상태에 멈춰 있게 됩니다. 새로 추가된 blob_download_timeout 설정은 blob 복제(LFS 객체, 업로드, job 아티팩트 등)의 사이트별 타임아웃을 초 단위로 제어합니다. Geo Sites API로 구성할 수 있습니다.
- 기본값:
28800(8시간). - 최대값:
86400(24시간).
Geo blob 다운로드 실패#
-
영향 대상: Geo
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.10 18.10.0 - 18.10.4 18.10.5
모든 Geo blob 유형(업로드, LFS 객체, job 아티팩트 등)이 세컨더리에서
지속적으로 동기화에 실패할 수 있습니다. 일시적인 네트워크 오류와 달리
이 실패는 모든 blob 레코드에 영향을 주고 재시도해도 복구되지 않습니다.
영향을 받은 세컨더리에서는 blob 이 "failed" 상태로 표시되고, Sidekiq 로그에
segfault, HPE_USER Span callback error in on_header_field
오류 또는 예상치 못한 HTTP 상태 코드(예: status_code: 32
또는 status_code: 34)가 기록될 수 있습니다.
원인은 rugged 1.9.0(GitLab 18.10에서 업그레이드)과 llhttp-ffi gem
사이의 심벌 충돌입니다. rugged.so에 정적으로 링크된 llhttp
심벌이 llhttp-ffi 콜백을 덮어써 HTTP 응답 파싱이
손상됩니다. 자세한 내용은
이슈 598564를 참고합니다.
GitLab 18.10.5에서는 rugged가 충돌 심벌이 없는 1.7.2로
다운그레이드됩니다. 업그레이드 후 별도의 조치는 필요하지 않습니다.
GitLab 18.10.4 용 기능 플래그 우회 방법#
GitLab 18.10.4를 사용 중이고 GitLab 18.10.5로 업그레이드할 수 없다면
geo_blob_download_with_gitlab_http 기능 플래그를 활성화합니다. 이 플래그는
blob 다운로드가 FFI에 의존하는 http gem 대신
Gitlab::HTTP(Net::HTTP)를 사용하도록 전환합니다.
-
기능 플래그를 활성화합니다.
sudo gitlab-rails console Feature.enable(:geo_blob_download_with_gitlab_http) exit -
Sidekiq를 재시작합니다.
sudo gitlab-ctl restart sidekiq
이 기능 플래그 우회 방법에는 알려진 제한이 있습니다.
자세한 내용은 이슈 595139를 참고합니다.
PostgreSQL CheckViolation으로 18.9 업그레이드 실패#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.9.0, 18.9.1
GitLab Self-Managed 인스턴스를 GitLab 18.9.0 또는 18.9.1로 업그레이드하면 데이터베이스 마이그레이션 중 다음 오류로 업그레이드가 실패합니다.
PG::CheckViolation: ERROR: check constraint "check_xxxxxxxx" of relation "tablename" is violated by some row
이 문제는 GitLab 18.10에서 수정된 버그로 인해 발생했습니다(머지 리퀘스트 224446 참고). 해당 수정은 백포트되었으며 다음 GitLab 18.9 패치 릴리스에 포함될 예정입니다(머지 리퀘스트 225026 참고).
다만 이 버그는 단일 레코드 문제로 인해 배치 백그라운드 마이그레이션이 조용히 건너뛰어지게 만들 수 있습니다. v18.8로 업그레이드할 때, 레코드가 하나뿐인 테이블을 대상으로 하는 배치 백그라운드 마이그레이션이 한 번도 실행되지 않은 채 finished로 잘못 표시되었습니다. 그 결과 데이터가 백필되지 않은 채 남아 GitLab Self-Managed 인스턴스에서 업그레이드 실패를 일으켰습니다.
제안된 수정(머지 리퀘스트 225461 참고)은 영향을 받은 배치 백그라운드 마이그레이션을 finished/finalized에서 paused로 되돌려 스케줄러가 다시 실행하도록 합니다. 적용 대상은 queued_migration_version 이 18.5에서 18.8 사이이면서 min_value = max_value 또는 min_cursor = max_cursor 인 마이그레이션입니다.
선택지는 두 가지입니다.
- 지금 우회 방법을 적용해 업그레이드를 즉시 완료합니다.
- 완전한 수정을 기다렸다가 해당 수정이 포함된 릴리스 이후에 업그레이드합니다.
다음 기술 자료 문서에서 알려진 다섯 가지 증상의 우회 방법을 설명합니다.
PG::CheckViolation: ERROR: check constraint "check_96233d37c0" of relation "pool_repositories" is violated by some rowPG::CheckViolation: ERROR: check constraint "check_f6590fe2c1" of relation "gpg_key_subkeys" is violated by some rowPG::CheckViolation: ERROR: check constraint "check_17a3a18e31" of relation "user_agent_details" is violated by some rowPG::CheckViolation: ERROR: check constraint "check_ddd6f289f4" of relation "commit_user_mentions" is violated by some rowPG::CheckViolation: ERROR: check constraint "check_e69372e45f" of relation "suggestions" is violated by some row
차단된 사용자의 배포 키 및 개인 액세스 토큰 무효화#
-
영향 범위: 모든 설치 방식
-
영향받는 버전:
릴리스 영향받는 패치 레벨 수정된 패치 레벨 18.8 18.8.2 이상 해당 없음(의도된 변경) 18.7 18.7.2 이상 해당 없음(의도된 변경) 18.6 18.6.4 이상 해당 없음(의도된 변경)
GitLab 18.8.2, 18.7.2, 18.6.4는 차단된 사용자와 연결된 배포 키를 사용하는 API 요청을 거부합니다. 차단된 사용자와 연결된 배포 키가 있다면 앞서 언급한 버전으로 업그레이드한 후에는 더 이상 동작하지 않습니다. 이는 차단된 사용자가 자신의 키와 토큰으로 GitLab 리소스에 접근하지 못하도록 막는 보안 수정입니다.
다음을 수행해야 합니다.
- 차단된 사용자가 소유한 배포 키 또는 개인 액세스 토큰(PAT)을 식별합니다.
- 이를 과금 대상 사용자에게 재할당하거나, 삭제한 후 과금 대상 사용자 또는 서비스 계정으로 새 키·토큰을 생성합니다.
다음 쿼리로 차단된 계정과 연결되어 있고 지난 365일 동안 한 번 이상 사용된 모든 배포 키를 식별할 수 있습니다.
SELECT
k.id,
k.user_id,
u.username,
u.state as user_state,
k.title,
k.fingerprint,
k.fingerprint_sha256,
k.usage_type,
k.last_used_at,
k.created_at,
k.updated_at
FROM keys k
INNER JOIN users u ON k.user_id = u.id
WHERE u.state IN ('blocked', 'ldap_blocked', 'blocked_pending_approval', 'banned')
AND k.type = 'DeployKey'
AND k.last_used_at >= NOW() - INTERVAL '365 days'
ORDER BY u.state, u.username, k.last_used_at DESC;
ClickHouse 딕셔너리 생성 오류#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.8.0
ClickHouse 통합을 활성화한 GitLab Self-Managed 고객은 권한 누락으로 인해
업그레이드 과정에서 ClickHouse 데이터베이스 마이그레이션 오류
(DB::Exception: gitlab: Not enough privileges)를 만날 수 있습니다. 이 오류를 해결하려면
데이터베이스 딕셔너리 읽기 지원 문제 해결 문서를 참고합니다.
CI 데이터용 배치 백그라운드 마이그레이션 재도입#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.8.0
CI 빌드 메타데이터 마이그레이션에서 도입된 배치 백그라운드 마이그레이션은 데이터 구조의 엣지 케이스를 처리하고 마이그레이션이 완료되도록 보장하기 위해 다시 도입되었습니다.
따옴표 없는 플레이스홀더가 포함된 사용자 지정 웹훅 템플릿 저장 불가#
-
영향 범위: 모든 설치 방식
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.10 모든 패치 릴리스 수정되지 않음 18.9 모든 패치 릴리스 수정되지 않음 18.8 모든 패치 릴리스 수정되지 않음
GitLab 18.8부터 18.10 까지는 따옴표로 감싸지 않은 페이로드 필드가 포함된 사용자 지정 웹훅 템플릿을 저장할 수 없습니다. 이 문제는 GitLab 18.11에서 해결되었습니다.
우회 방법으로 필드를 따옴표로 감쌉니다. 예를 들어
{"value": {{id}}}는 {"value": "{{id}}"}가 됩니다.
따옴표로 감싼 필드는 숫자 값 대신 문자열 값을 생성합니다. 이 방식이 웹훅과 호환되지 않는다면 GitLab 18.11 이상으로 업그레이드합니다.
자세한 내용은 웹훅 문제 해결 문서를 참고합니다.
CI 빌드 메타데이터 마이그레이션#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.7.0
배포 후 마이그레이션이
CI 빌드 메타데이터를 새로운 최적화 테이블(p_ci_job_definitions)로 복사하는 배치
백그라운드 마이그레이션을 예약합니다. 이 마이그레이션은 최종적으로
CI 데이터베이스 크기를 줄이기 위한 계획의 일부입니다(에픽 13886 참고).
수백만 개의 job 이 있는 인스턴스에서 마이그레이션 속도를 높이려면
마이그레이션할 데이터를 선택할 수 있습니다.
Geo ActionCable 허용 오리진 설정#
- 영향 범위: Geo
- 영향받는 버전: 18.7.0
ActionCable 웹소켓 요청의 허용 오리진을 구성하는 action_cable_allowed_origins 설정이 새로 추가되었습니다.
사이트 간 WebSocket 연결이 정상 동작하도록 기본 사이트를 구성할 때 허용할 URL을 지정합니다.
Geo VerificationStateBackfillWorker 느린 쿼리 수정#
- 영향 범위: Geo
- 영향받는 버전: 18.6.5
Geo::VerificationStateBackfillWorker가 merge_request_diff_details 테이블에 대해 대량의 느린 쿼리를 생성하던 Geo 이슈 587407이 수정되었습니다.
Commits 및 Files API 크기·속도 제한#
-
영향 범위: 모든 설치 방식
-
영향받는 버전:
릴리스 영향받는 패치 레벨 수정된 패치 레벨 18.6 18.6.2 이상 해당 없음(의도된 변경) 18.5 18.5.4 이상 해당 없음(의도된 변경) 18.4 18.4.6 이상 해당 없음(의도된 변경)
GitLab 18.6.2, 18.5.4, 18.4.6은 다음 엔드포인트로 보내는 요청에 크기 제한과 속도 제한을 도입했습니다.
POST /projects/:id/repository/commits- 커밋 생성POST /projects/:id/repository/files/:file_path- 리포지터리에 파일 생성PUT /projects/:id/repository/files/:file_path- 리포지터리의 파일 업데이트
GitLab은 크기 제한을 초과한 요청에 413 Entity Too large 상태를, 속도 제한을 초과한 요청에 429 Too Many Requests 상태를 반환합니다. 자세한 내용은 Commits 및 Files API 제한을 참고합니다
Duo Agent Platform 러너 제한#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.6.2
Duo Agent Platform에서 사용할 수 있는 러너와 관련해 일부 러너 제한이 도입되었습니다.
Geo 로그 커서 마이그레이션 수정#
-
영향 범위: Geo
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.5 18.5.0 - 18.5.1 18.5.2 18.4 18.4.0 - 18.4.3 18.4.4
보조 사이트에서 Geo 로그 커서가 시작되지 못하게 하던 누락된 Geo 마이그레이션이 수정되었습니다.
디자인 관리 디자인 백필 완료 처리#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.5.0
배포 후 마이그레이션
20250922202128_finalize_correct_design_management_designs_backfill은 18.4에서 예약된
배치 백그라운드 마이그레이션을 완료 처리합니다.
업그레이드 경로에서 18.4를 건너뛰었다면 배포 후 마이그레이션을 실행할 때
이 마이그레이션이 전부 실행됩니다.
실행 시간은 design_management_designs 테이블의 크기에 직접 좌우됩니다.
대부분의 인스턴스에서는 2분을 넘지 않지만, 규모가 큰 일부 인스턴스에서는
최대 10분이 걸릴 수 있습니다.
마이그레이션 과정을 중단하지 말고 완료될 때까지 기다립니다.
NGINX 라우팅 변경으로 인한 404 오류#
- 영향 범위: Linux 패키지
- 영향받는 버전: 18.5.0
GitLab 18.5.0에서 도입된 NGINX 라우팅 변경으로 인해 localhost 나 대체 도메인 이름처럼 일치하지 않는 호스트 이름을 사용하면 서비스에 접근할 수 없게 될 수 있습니다.
이 문제는 다음을 유발합니다.
/-/health같은 상태 확인 엔드포인트가 정상 응답 대신404오류를 반환합니다.- 구성된 FQDN 이 아닌 호스트 이름으로 접근하면 GitLab 웹 인터페이스에
404오류 페이지가 표시됩니다. - GitLab Pages가 다른 서비스로 향하는 트래픽을 받을 수 있습니다.
- 이전에는 정상 동작하던 대체 호스트 이름 요청에 문제가 발생합니다.
이 문제는 Linux 패키지에서 머지 리퀘스트 8805로 해결되었으며, 수정 사항은 GitLab 18.5.2 및 18.6.0에서 제공됩니다.
clone, push, pull 같은 Git 작업은 이 문제의 영향을 받지 않습니다.
배치 백그라운드 마이그레이션 nil 오류#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.4.2, 18.4.3
18.4.2 또는 18.4.3으로 업그레이드할 때 다음 배치 백그라운드 마이그레이션에서 no implicit conversion of nil into String 오류로 실패할 수 있습니다.
FixIncompleteInstanceExternalAuditDestinationsFinalizeAuditEventDestinationMigrations
이 문제를 해결하려면 최신 패치 릴리스로 업그레이드하거나 이슈 578938의 우회 방법을 사용합니다.
Geo 복제 TypeError#
-
영향 범위: Geo
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.4 18.4.0 - 18.4.1 18.4.2
세컨더리 Geo 사이트에서는 버그로 인해 복제 이벤트가 no implicit conversion of String into Array (TypeError) 오류 메시지와 함께 실패합니다. 재검증 같은 이중화 장치가 최종 일관성을 보장하지만 RPO는 크게 늘어납니다.
서비스 거부 공격 방지를 위한 JSON 입력 제한#
-
영향 범위: 모든 설치 방식
-
영향받는 버전:
릴리스 영향받는 패치 레벨 수정된 패치 레벨 18.4 18.4.1 이상 해당 없음(의도된 변경) 18.3 18.3.3 이상 해당 없음(의도된 변경) 18.2 18.2.7 이상 해당 없음(의도된 변경)
GitLab 18.4.1, 18.3.3, 18.2.7은 서비스 거부 공격을 방지하기 위해 JSON 입력에 제한을 도입했습니다.
GitLab은 이 제한을 초과한 HTTP 요청에 400 Bad Request 상태를 반환합니다.
자세한 내용은 HTTP 요청 제한을 참고합니다.
LdapAddOnSeatSyncWorker의 Duo 시트 제거#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.3.0
새 워커 LdapAddOnSeatSyncWorker가 도입되었으며, LDAP가 활성화된 경우 매일 밤 GitLab Duo 시트에서
모든 사용자를 의도치 않게 제거할 수 있었습니다. 이 문제는 GitLab 18.4.0과 18.3.2에서 수정되었습니다. 자세한 내용은
이슈 565064를 참고합니다.
Geo Rake 점검 수정#
- 영향 범위: Geo
- 영향받는 버전: 18.3.0
Geo 보조 사이트를 설치할 때 rake gitlab:geo:check가 실패를 잘못 보고하던 이슈가 18.3.0에서 수정되었습니다.
Geo Pages 파일 이름 수정#
-
영향 범위: Geo
-
영향받는 버전:
릴리스 영향받는 패치 레벨 수정된 패치 레벨 18.3 18.3.0 - 18.3.2 18.3.3 18.2 18.2.0 - 18.2.6 18.2.7 18.1 18.1.0 이상 18.1에서 수정 안 됨
GitLab 18.3.3 및 18.2.7 이상에는 파일 이름이 긴 Pages 배포에서 Geo 검증이 실패할 수 있던 이슈 559196에 대한 수정이 포함되어 있습니다. 이 수정은 복제 및 검증 과정에서 일관성을 유지하도록 Geo 보조 사이트에서 파일 이름이 잘리지 않게 합니다.
18.1과 18.2 사이 무중단 업그레이드 시 푸시 오류#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.2.0
18.1.x와 18.2.x 사이의 업그레이드는 업그레이드 중 기존 프로젝트로 코드를 푸시할 때 오류를 일으키는 알려진 이슈 567543의 영향을 받습니다. 18.1.x와 18.2.x 버전 사이의 업그레이드에서 중단이 발생하지 않도록 하려면 수정이 포함된 18.2.6 버전으로 바로 업그레이드합니다.
Geo VerificationStateBackfillService ci_job_artifact_states#
-
영향 범위: Geo
-
영향받는 버전:
릴리스 영향받는 패치 레벨 수정된 패치 레벨 18.2 18.2.0 - 18.2.1 18.2.2 18.1 18.1.0 - 18.1.3 18.1.4 18.0 18.0.0 - 18.0.5 18.0.6
영향받는 버전에는 ci_job_artifact_states의 기본 키 변경으로 인해 VerificationStateBackfillService가 실행될 때 발생하는 알려진 문제가 있습니다. 해결하려면 수정된 패치 레벨 릴리스로 업그레이드합니다.
Elasticsearch strict_dynamic_mapping_exception#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.1.0
Elasticsearch 7 버전에서는 인덱싱이 strict_dynamic_mapping_exception 오류로 실패할 수 있습니다. 해결하려면 이슈 566413의 "Possible fixes" 절을 참고합니다.
PostgreSQL ci_job_artifacts 오류#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.1.0, 18.1.1
GitLab 18.1.0과 18.1.1 버전은 PostgreSQL 로그에 ERROR: relation "ci_job_artifacts" does not exist at ... 같은 오류를 표시합니다.
이 로그 오류는 무시해도 안전하지만 Geo 사이트를 포함해 모니터링 알림을 발생시킬 수 있습니다. 이 문제를 해결하려면 GitLab 18.1.2 이상으로 업데이트합니다.
머지 리퀘스트 almost ready 버그#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.1.0
일부 사용자의 커밋이 포함된 머지 리퀘스트가 진행되지 않고 Your merge request is almost ready를 계속 표시할 수 있습니다. 이슈 554613을 참고합니다.
또한 sidekiq/current 로그에 merge_request_diff_commit.rb에 대한 undefined method 'id' for nil:NilClass 오류가 표시됩니다.
이 문제를 해결하려면 다음을 수행합니다.
-
데이터베이스 콘솔을 시작합니다.
-
다음 명령을 실행합니다.
REINDEX TABLE CONCURRENTLY public.merge_request_diff_commit_users; -
영향을 받은 머지 리퀘스트를 닫았다가 다시 엽니다.
Geo HTTP 500 프록시 오류#
-
영향 범위: Geo
-
영향받는 버전:
릴리스 영향받는 패치 릴리스 수정된 패치 레벨 18.1 18.1.0 18.1.1 18.0 18.0.0 - 18.0.2 18.0.3
위 표의 GitLab 버전에는 세컨더리 Geo 사이트에서 프록시된 Git 작업이 HTTP 500 오류로 실패하는 알려진 문제가 있습니다. 해결하려면 수정된 패치 레벨 릴리스로 업그레이드합니다.
PostgreSQL 14 미지원#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.0.0
GitLab 18부터 PostgreSQL 14는 지원되지 않습니다. GitLab 18.0 이상으로 업그레이드하기 전에 PostgreSQL을 최소 16.5 버전으로 업그레이드합니다. 자세한 내용은 설치 요구 사항을 참고합니다.
자동 데이터베이스 버전 업그레이드는 Linux 패키지를 사용하는 단일 노드 인스턴스에만 적용됩니다. Geo 인스턴스, Linux 패키지를 사용하는 고가용성 PostgreSQL, 외부 PostgreSQL 데이터베이스(Amazon RDS 등)를 사용하는 경우 등 그 밖의 모든 상황에서는 PostgreSQL을 직접 업그레이드해야 합니다. 자세한 단계는 Geo 인스턴스 업그레이드를 참고합니다.
pg_dump 바이너리 호환성#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.0.0
GitLab은 pg_dump 바이너리를 번들로 제공합니다. 외부 PostgreSQL 서버를 사용할 때는 GitLab 데이터베이스 백업 생성과 복원 모두에서 pg_dump 클라이언트 버전이 PostgreSQL 서버와 호환되는지 확인합니다.
Bitnami PostgreSQL 및 Redis 이미지 지원 중단#
- 영향 범위: Helm 차트
- 영향받는 버전: 17.11.0 이하
2025년 9월 29일부터 Bitnami는 태그가 지정된 PostgreSQL 및 Redis 이미지 제공을 중단합니다. 번들 Redis 또는 Postgres를 사용하는 GitLab 차트로 GitLab 17.11 이하를 배포한다면, 예기치 않은 다운타임을 방지하기 위해 레거시 리포지터리를 사용하도록 values를 직접 수정해야 합니다. 자세한 내용은 이슈 6089를 참고합니다.
17.11에서 무중단 업그레이드 시 파이프라인 실패#
- 영향 범위: 모든 설치 방식
- 영향받는 버전: 18.0.0
ci_only_one_persistent_ref_creation 기능 플래그는 Rails는 업그레이드되었지만 Sidekiq 이 17.11 버전에 남아 있는 무중단 업그레이드 중에 파이프라인 실패를 일으킵니다(자세한 내용은 이슈 558808 참고).
예방: 업그레이드 전에 Rails 콘솔을 열고 기능 플래그를 활성화합니다.
$ sudo gitlab-rails console
Feature.enable(:ci_only_one_persistent_ref_creation)
이미 영향을 받은 경우: 다음 명령을 실행하고 실패한 파이프라인을 다시 시도합니다.
$ sudo gitlab-rails console
Rails.cache.delete_matched("pipeline:*:create_persistent_ref_service")
Gitaly 구성을 git_data_dirs에서 storage로 마이그레이션#
- 영향 범위: Linux 패키지
- 영향받는 버전: 18.0.0
GitLab 18.0 이상에서는 git_data_dirs 설정으로 Gitaly 스토리지 위치를 구성할 수 없습니다.
여전히 git_data_dirs를 사용하고 있다면 GitLab 18.0으로 업그레이드하기 전에
Gitaly 구성을 마이그레이션해야 합니다.
Geo에서 EE를 CE로 되돌릴 때 발생하는 마이그레이션 오류#
- 영향 범위: Geo
- 영향받는 버전: 18.0.0
GitLab Enterprise Edition을 배포한 뒤 GitLab Community Edition으로 되돌렸다면 데이터베이스 스키마가 GitLab 애플리케이션이 기대하는 스키마와 달라져 마이그레이션 오류가 발생할 수 있습니다. 18.0.0으로 업그레이드할 때 특정 오류 네 가지가 발생할 수 있는데, 해당 버전에서 이 칼럼들의 기본값을 변경하는 마이그레이션이 추가되었기 때문입니다.
오류는 다음과 같습니다.
No such column: geo_nodes.verification_max_capacityNo such column: geo_nodes.minimum_reverification_intervalNo such column: geo_nodes.repos_max_capacityNo such column: geo_nodes.container_repositories_max_capacity
이 마이그레이션은 GitLab 18.0.2에서 해당 칼럼이 없으면 추가하도록 패치되었습니다. 이슈 #543146을 참고합니다.
영향받는 릴리스:
| 영향받는 마이너 릴리스 | 영향받는 패치 릴리스 | 수정 버전 |
|---|---|---|
| 18.0 | 18.0.0 - 18.0.1 | 18.0.2 |
Docker 설치 시 PRNG is not seeded 오류#
- 영향 대상: Docker
- 영향 받는 버전: 18.0.0
FIPS가 활성화된 호스트에서 Docker 설치로 GitLab을 실행하는 경우,
SSH 키 생성 또는 OpenSSH 서버(sshd) 시작이 다음 오류 메시지와 함께
실패할 수 있습니다:
PRNG is not seeded
GitLab 18.0은 기본 이미지를 Ubuntu 22.04에서 24.04로 업데이트했습니다. Ubuntu 24.04가 더 이상 FIPS 호스트의 비 FIPS OpenSSL 공급자 사용을 허용하지 않기 때문에 이 오류가 발생합니다.
이 문제를 해결하는 방법은 다음과 같습니다:
- 호스트 시스템에서 FIPS를 비활성화합니다.
- GitLab Docker 컨테이너에서 FIPS 기반 커널 자동 감지를 비활성화합니다.
GitLab 18.0.2 이상에서
OPENSSL_FORCE_FIPS_MODE=0환경 변수를 설정하면 됩니다. - GitLab Docker 이미지 대신 호스트에 네이티브 FIPS 패키지를 설치합니다.
FIPS 요구 사항을 충족하려면 마지막 방법을 권장합니다. 레거시 설치에서는 처음 두 방법을 임시 조치로 사용할 수 있습니다.
CI builds 메타데이터 마이그레이션 세부 정보#
- 영향 대상: 모든 설치 방법
- 영향 받는 버전: 18.7.0
GitLab 18.6부터 새 파이프라인은 새 형식으로만 데이터를 기록합니다 (이슈 552065 참고). 이 마이그레이션은 기존 데이터를 이전 형식에서 새 형식으로 복사하기만 합니다. 삭제되는 데이터는 없습니다.
마이그레이션되지 않은 데이터는 향후 릴리스에서 제거됩니다(에픽 18271 참고).
마이그레이션 소요 시간은 인스턴스의 전체 CI job 수에 정비례합니다. 최근 데이터를 우선 처리하기 위해 job은 최신 파티션부터 오래된 파티션 순으로 처리됩니다.
업그레이드 전에 규모가 큰 프로젝트에서 자동 파이프라인 정리를 활성화해 오래된 파이프라인을 삭제하면 마이그레이션 대상 job 수를 줄일 수 있습니다.
이 마이그레이션은 두 종류의 데이터를 복사합니다:
- Job 처리 데이터:
.gitlab-ci.yml에 정의된 job 실행 구성(script,variables등)으로, UI나 API가 아니라 job을 실행하는 러너에만 필요합니다. - 사용자에게 보이는 job 데이터: 전체 job 데이터 중 이 마이그레이션이 영향을 주는 것은 job 타임아웃 값, job 종료 코드 값, 노출된 아티팩트, 환경 연결뿐입니다.
CI 데이터가 많은 GitLab Self-Managed 및 GitLab Dedicated 인스턴스에서는 마이그레이션 대상 데이터의 범위를 줄여 마이그레이션 속도를 높일 수 있습니다. 범위는 아래에 설명된 설정으로 제어합니다.
Job 처리 데이터의 범위 제어#
기본적으로 마이그레이션은 기존 모든 job의 처리 데이터를 복사합니다. 아래에 설명된 설정 중 하나를 사용해 범위를 줄일 수 있습니다.
이 설정 값은 job 처리 데이터를 어느 정도까지 유지할지 결정합니다.
예를 들어 최근 6개월 내에 생성된 job만 (재시도,
수동 job 실행,
환경 자동 중지를 통해)
실행될 것으로 예상한다면 6mo로 설정합니다.
GitLab은 다음 우선순위에 따라 설정을 확인합니다:
-
파이프라인 아카이브 설정(권장 모범 사례). 파이프라인이 아카이브되었다는 것은 해당 job을 수동으로 재시도하거나 다시 실행할 수 없다는 뜻입니다. 이 설정이 활성화되어 있으면 아카이브된 job의 처리 데이터는 마이그레이션할 필요가 없습니다.
[!note] 이후 파이프라인 아카이브 범위를 늘리면 처리 데이터가 없는 job은 계속 실행할 수 없는 상태로 남습니다.
-
파이프라인 아카이브를 구성하지 않았거나 이 마이그레이션에서 재정의해야 한다면
GITLAB_DB_CI_JOBS_PROCESSING_DATA_CUTOFF환경 변수를 사용합니다.1y(1년),6mo(6개월),90d(90일) 같은 기간 문자열을 받습니다. -
위 두 가지가 모두 설정되지 않았다면
GITLAB_DB_CI_JOBS_MIGRATION_CUTOFF환경 변수를 사용합니다.1y(1년),6mo(6개월),90d(90일) 같은 기간 문자열을 받습니다. 사용자에게 보이는 job 데이터의 범위 제어를 참고합니다. -
설정을 찾지 못하면 모든 데이터를 복사합니다.
사용자에게 보이는 job 데이터의 범위 제어#
GITLAB_DB_CI_JOBS_MIGRATION_CUTOFF 환경 변수는 어떤 job의 노출 데이터를
마이그레이션할지 결정합니다.
예를 들어 GITLAB_DB_CI_JOBS_MIGRATION_CUTOFF=1y는 최근 1년간 생성된 job에 대해
영향을 받는 노출 데이터(타임아웃 값, 환경, 종료 코드, 노출된 아티팩트의 메타데이터)를
복사합니다.
기본적으로 기준 날짜는 없으며 모든 job의 데이터가 마이그레이션됩니다.
마이그레이션 영향 추정#
참고로 GitLab.com에서는 약 2개월에 걸쳐 4억 행을 마이그레이션할 것으로 예상합니다.
인스턴스에서 마이그레이션 영향을 추정하려면 다음 쿼리를 PostgreSQL 콘솔에서 실행할 수 있습니다:
SELECT n.nspname AS schema_name, c.relname AS partition_name,
pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size
FROM pg_inherits i
JOIN pg_class c ON c.oid = i.inhrelid
JOIN pg_namespace n ON n.oid = c.relnamespace
JOIN pg_class p ON p.oid = i.inhparent
WHERE p.relname = 'p_ci_builds_metadata'
ORDER BY pg_total_relation_size(c.oid) DESC;
새 테이블은 이 공간의 약 20%를 사용합니다.
PostgreSQL 통계 테이블에서 얻은 추정치입니다.
SELECT SUM(c.reltuples)::bigint AS estimated_jobs_count
FROM pg_class c
JOIN pg_inherits i ON c.oid = i.inhrelid
WHERE i.inhparent = 'p_ci_builds'::regclass;
특정 기간에 생성된 job 수를 확인하려면 다음과 같이 테이블을 조회해야 합니다:
SELECT COUNT(*) FROM p_ci_builds WHERE created_at >= now() - '1 year'::interval;
쿼리가 타임아웃되면 Rails 콘솔에서 데이터를 배치 단위로 처리합니다:
counts = []
CommitStatus.each_batch(of: 25000) do |batch|
counts << batch.where(created_at: 1.year.ago...).count
end
counts.sum
머지 리퀘스트 머지 데이터의 배치 백그라운드 마이그레이션#
- 영향 대상: 모든 설치 방법
- 영향 받는 버전: 18.8.0
배치 백그라운드 마이그레이션이 머지 리퀘스트의 머지 관련 데이터를
merge_requests 테이블에서 새 전용 테이블인 merge_requests_merge_data로 복사합니다.
이 마이그레이션은 머지 관련 속성을 별도 테이블로 정규화해 쿼리 성능과 유지보수성을 높이는 데이터베이스 스키마 최적화 작업의 일부입니다.
마이그레이션되는 데이터#
이 마이그레이션은 merge_requests의 다음 칼럼을 merge_requests_merge_data로 복사합니다:
merge_commit_shamerged_commit_shamerge_ref_shasquash_commit_shain_progress_merge_commit_shamerge_statusauto_merge_enabledsquashmerge_user_idmerge_paramsmerge_errormerge_jid
마이그레이션은 merge_requests 테이블을 처리하면서 merge_requests_merge_data에 대응하는 항목이
아직 없는 머지 리퀘스트의 데이터만 복사합니다.
GitLab 18.7부터 새 머지 리퀘스트는 애플리케이션 계층의 이중 쓰기 방식으로 두 테이블 모두에 데이터를 기록합니다(이슈 참고). 이 마이그레이션은 이중 쓰기 도입 이후 생성되거나 변경되지 않은 기존 데이터만 복사합니다.
이 마이그레이션 중에 merge_requests 테이블에서 삭제되는 데이터는 없습니다.
이 마이그레이션은 GitLab 18.9에서 완료될 예정입니다. 자세한 내용은 이슈를 참고합니다.
마이그레이션 소요 시간 추정#
마이그레이션 소요 시간은 인스턴스의 머지 리퀘스트 수에 정비례합니다.
영향을 추정하는 방법은 다음과 같습니다:
PostgreSQL 쿼리:
-- Count total merge requests
SELECT COUNT(*) FROM merge_requests;
-- Estimate table size
SELECT pg_size_pretty(pg_total_relation_size('merge_requests')) AS table_size;
Rails 콘솔:
# Count total merge requests
MergeRequest.count
# Count remaining merge requests to migrate
MergeRequest.left_joins(:merge_data)
.where(merge_requests_merge_data: { merge_request_id: nil })
.count
마이그레이션은 머지 리퀘스트를 배치 단위로 처리하며 대부분의 인스턴스에서 수 시간에서 수일 안에 완료됩니다.
GitLab 18.11의 PostgreSQL 17.7 업그레이드#
- 영향 대상: Linux package, Docker, Geo
- 영향 받는 버전: 18.11.0
GitLab 18.11로 업그레이드하면 단일 노드 Linux package 설치에서 PostgreSQL 17.7로 자동 업그레이드가 수행됩니다.
데이터베이스 버전 자동 업그레이드는 Linux package를 사용하는 단일 노드 인스턴스에만 적용됩니다. Geo 배포에서는 메이저 버전 업그레이드 시 Geo 보조 사이트로의 PostgreSQL 복제를 다시 초기화해야 하므로 PostgreSQL 업그레이드를 의도적으로 일정에 반영해 계획해야 합니다. 그 결과 예상보다 긴 다운타임이 발생할 수 있습니다.
Helm chart 및 Operator 배포에서 Sidekiq 동시성 제한기가 job 백로그를 유발#
-
영향 대상: Helm chart, Operator
-
영향 받는 버전:
Release 영향 받는 패치 릴리스 수정된 패치 레벨 18.10 18.10.0 - 18.10.3 18.10.4 18.9 18.9.0 - 18.9.5 18.9.6
GitLab 18.9에서 GitLab Helm chart가 기본적으로 GITLAB_SIDEKIQ_MAX_REPLICAS를 설정하기 시작했습니다
(charts/GitLab 머지 리퀘스트 4348).
KEDA 기반 오토스케일링을 사용하지 않는 GitLab Self-Managed 및 GitLab Dedicated 환경에서는
이로 인해 Sidekiq 동시성 제한기가 예기치 않게 활성화되어 job이 Redis 기반 스로틀 큐로
지연됩니다.
그 결과 다음과 같은 현상이 나타날 수 있습니다:
- Sidekiq job 백로그.
- Redis 메모리 증가.
- job 실행 지연.
WebHookWorker,AuditEvents::AuditEventStreamingWorker, Geo 복제 워커(Geo::EventWorker,Geo::SyncWorker) 등 워커에 대한 영향.
영향을 받는 경우 수정된 버전으로 업그레이드할 때까지 다음 임시 조치 중 하나를 사용할 수 있습니다:
-
기능 플래그를 활성화해 특정 워커의 동시성 제한기를 비활성화합니다. Sidekiq pod에서
exec를 실행해 Rails 콘솔을 엽니다:kubectl exec -it <sidekiq-pod-name> -- gitlab-rails console그런 다음 영향을 받는 워커에 대해 플래그를 활성화합니다:
Feature.enable(:"disable_sidekiq_concurrency_limit_middleware_")를 영향을 받는 워커 이름(예:WebHookWorker)으로 바꿉니다. -
Sidekiq pod 환경 구성에서
GITLAB_SIDEKIQ_MAX_REPLICAS=0을 설정해 모든 기본 동시성 제한을 비활성화합니다. 이렇게 하면 기본 동시성 제한 계산이 전부 비활성화됩니다.
Geo를 사용하는 경우 ConcurrencyLimit::ResumeWorker가 Geo 보조 사이트에서 실행되지 않기 때문에
보조 사이트에서 이미 스로틀된 job이 자동으로 비워지지 않을 수 있습니다. 스로틀 큐를
수동으로 비워야 할 수 있습니다.
기본 동시성 제한 계산을 기능 플래그 뒤에 두는 수정 사항이 머지 리퀘스트 230713에 병합되었고, 18.10.4(머지 리퀘스트 231085)와 18.9.6(머지 리퀘스트 231297)에 백포트되었습니다.
시크릿 탐지 오탐 탐지가 모든 프로젝트에서 기본 활성화#
- 영향 대상: 모든 설치 방법
- 영향 받는 버전: 18.10.x
시크릿 오탐 탐지의 파운데이셔널 플로를 활성화하려면 일반적으로 두 단계가 필요합니다:
- 그룹에 파운데이셔널 플로를 허용합니다.
- 개별 프로젝트에서 파운데이셔널 플로를 활성화합니다.
그러나 GitLab 18.10의 어떤 버전으로든 업그레이드하면 모든 프로젝트에서 시크릿 오탐 탐지의 파운데이셔널 플로가 활성화됩니다. 그룹에 파운데이셔널 플로가 허용되면 그룹 내 모든 프로젝트에서 이미 활성화된 상태가 됩니다.
그룹에 시크릿 오탐 탐지의 파운데이셔널 플로를 허용하기 전에 그룹 내 프로젝트의 설정을 확인해야 합니다.
컴파일된 job별 구성에 1 MiB 크기 제한 적용#
-
영향 대상: 모든 설치 방법
-
영향 받는 버전:
Release 영향 받는 패치 릴리스 수정된 패치 레벨 18.11 18.11.x 수정되지 않음 19.0 19.0.0 ~ 19.0.5 19.0.6 19.1 19.1.0 ~ 19.1.3 19.1.4 19.2 19.2.0 ~ 19.2.1 19.2.2
JSON 스키마 검증을 강제하는 변경으로 컴파일된 job별 구성에도 1 MiB 크기 제한이 적용됩니다. job의 컴파일된 구성(옵션, YAML 변수, 토큰, 시크릿 등)이 이 제한을 초과하면 파이프라인 생성이 Failed to persist the pipeline: Validation failed: Config is too large. Maximum size allowed is 1 MiB 오류와 함께 실패합니다. 해결 방법은 job 구성 크기를 1 MiB 미만으로 줄이는 것입니다.
수정된 버전으로 업그레이드한 후에는 ci_max_total_yaml_size_bytes 애플리케이션 설정으로 크기 제한을 구성할 수 있습니다.