필수 중지 사항 회피하기

필수 중지 사항은 GitLab 컴포넌트나 의존성에 대한 변경으로 인해 GitLab 업그레이드 시 특정 major.minor 버전으로의 업그레이드 및 중지가 필요한 경우입니다.

개발은 유지 보수 정책을 유지하며 3개 릴리스(3개월) 역방향 지원 창을 가지고 있지만 - GitLab은 현재의 주요 버전과 이전 두 개의 주요 버전을 포함한 훨씬 긴 기간의 버전 지원을 유지합니다. 이전 주요 릴리스의 일정을 기반으로, GitLab 사용자는 최대 3년간 현재 릴리스에서 뒤쳐지고도 업그레이드 지원을 받을 것으로 기대할 수 있습니다.

예를 들어, GitLab 사용자가 GitLab 14.0.12에서 완전히 지원되는 업그레이드 경로인 GitLab 16.1로 업그레이드하는 경우, 다음과 같은 필수 중지 사항이 있을 수 있습니다: 14.3.6, 14.9.5, 14.10.5, 15.0.5, 15.1.6, 15.4.6, 15.11.11을 거친 후 최신 16.1.z 버전으로 업그레이드할 수 있습니다.

과거의 필수 중지 사항은 종종 자문엔지니어, 고객 성공 관리자 및 개발 엔지니어들의 지원을 통해 1-3개의 마이너 릴리스를 넘어 사용자가 업그레이드하는 동안 발견되지 않았습니다.

가능한 경우 필수 중지 사항을 피해야 합니다. 피할 수 없는 경우, 필수 중지 사항은 예정된 필수 중지 사항에 맞추어야 합니다.

우리가 비계획적으로 필수 중지 사항을 선언하는 것을 고려하는 경우, 다음 단계에 관해 조언하기 위해 유포 부문 제품 관리자에 연락해야 합니다. 필수 중지 사항을 선언해야 하는지에 대한 불확실성이 있다면, 배포 제품 관리자는 GitLab 제품 리더쉽 (부사장 또는 최고 제품 담당자)에 eskal할 수 있습니다. 예를 들어, 변경 사항이 매우 큰 일부 기업 자체 설치에서 중지를 필요로 하며 문제가 발생했을 때 명확한 해결책이 있는 경우에 발생할 수 있습니다.

일정에 맞춰진 필수 중지 사항은 주로 major 버전 릴리스 직전의 이전 major.minor 릴리스에 구현되어 여러 계획된 폐기와 알려진 파괴적인 변경을 처리하기 위해 구현됩니다.

또한, GitLab 16부터 예정된 major.minor 필수 중지 사항이 소개되었습니다:


GitLab 16.x 동안, 두 개또는 세 개의 필수 업그레이드 중지를 예정합니다.

필수 업그레이드 중지를 예정할 때 적어도 두 개의 마일스톤을 공지합니다. 첫 번째 예정된 필수 업그레이드 중지는 GitLab 16.3을 예정하고 있습니다. 만약 업그레이드 중지가 필요한 변경이 없다면, GitLab 16.3은 일반 업그레이드로 처리됩니다.

필수 중지 사항의 원인

완료된 마이그레이션에 대한 잘못된 가정

필수 중지 사항의 대부분은 주어진 릴리스의 데이터 모델에 대한 상태에 대한 가정으로 인해 발생하며, 이는 주로 종속된 데이터베이스 마이그레이션 혹은 코드 변경으로 발생합니다. 또는 이전 마이그레이션에서 소개된 스키마 변경이 코드 로드 시에 완료되었다는 가정.

버전 간 호환성을 위해 변경사항과 마이그레이션을 설계한다면 지속적이거나 다운타임 없는 업그레이드에 필수 중지 사항에 대해 완화할 수 있습니다. 그러나 계약 단계에서는 마이그레이션이 완료되었다는 가정하에 백그라운드 마이그레이션이 실행 또는 로딩되기 전에 필수 중지가 발생할 가능성이 있습니다.

caution
만약 주어진 릴리스에서 마이그레이션을 추가하거나 제거하거나 마이그레이션이 완료되었다고 가정하는 코드를 도입할 것을 고려하고 있다면, 먼저 필수 중지에 관한 데이터베이스 관련 문서를 리뷰하십시오.

예시

  • GitLab 12.1: state 값을 기준으로 MergeRequests의 merge_status를 변경하는 백그라운드 마이그레이션이 소개되었습니다. 12.10에는 state 속성이 제거되었습니다. 이것은 13.6까지 필수 중지 사항으로 문서화되지 않았습니다.
  • GitLab 13.8: 중복된 서비스 레코드를 처리하기 위한 백그라운드 마이그레이션이 포함되어 있습니다. 13.9에 다른 마이그레이션에서 중복된 서비스 레코드를 위한 고유한 인덱스가 적용되었습니다. 이는 백그라운드 마이그레이션이 완료될 때까지 발견/문서화되지 않았습니다. 이는 14.3에서 발견되었습니다.
  • GitLab 14.3: merge_request_diff_commits에 대한 잠재적으로 장기 실행되는 백그라운드 마이그레이션이 포함되어 있었으며, 이는 14.5에 foregrounded되었습니다. 이 변경으로 인해 대규모 GitLab 설치 사용자들에게 많은 다운타임을 초래했습니다. 이것은 15.1에서 발견되지 않았습니다.
  • GitLab 14.9: namespacesprojects에 대한 배치 백그라운드 마이그레이션이 다른 배치 백그라운드 마이그레이션을 실행하기 전에 완료되어야 했으며, 이는 필수 중지 사항을 강제했습니다. 이 마이그레이션은 대규모 GitLab 설치에서 수십 시간이나 일 수 있습니다.

관련 문제와 머지 요청에 대한 추가 세부 정보와 링크는 이슈: GitLab 업그레이드 경로 중지의 추가/확산을 피하기 위한 조치를 취하라에서 찾을 수 있습니다.

코드 회피 및 완화 조치의 제거

데이터 모델/스키마/마이그레이션 상태에 대한 가정과 유사하게, 이전에 발견된 문제를 해결하기 위해 구현된 코드의 의도적인 제거로 인해 필수 major.minor 중지가 도입되었습니다.

예시

  • GitLab 13.1: Rails 6.0.3.1에서 보안 수정이 CSRF 토큰 변경을 도입했습니다(캐너리 환경 사건을 유발). 이전에 생성된 토큰을 유지하기 위해 코드를 도입했고, 13.2에서 코드를 제거하여 13.1에 알려진 필수 중지를 만들었습니다.
  • GitLab 15.4: 삽화된 expires_at 타임스탬프를 수정하기 위한 마이그레이션을 14.9 이후부터 코드로 완화했으며, 이 완화 조치가 15.6에서 제거되어 15.4는 필수 중지가 되었습니다.

폐기

폐기, 특히 breaking change은 특정 주요 릴리스에 필수 중지를 유발할 수 있습니다. 새로운 major 릴리스 바로 전의 최신 major.minor 릴리스에서 중지하고, 장기 마이그레이션 지연이나 GitLab 관리자의 매뉴얼 조치가 필요할 경우 필수 중지가 발생합니다.

이것들은 일반적으로 새로운 major 릴리스 바로 전의 최신 major.minor 릴리스 및 가능한 경우 최신 major.0 패치 릴리스에서 필수 중지로 수용되며, 지금까지 발견된 폐기에 관련된 필수 중지는 이러한 릴리스로 제한되어 있습니다.

예시

폐기의 예시는 여기에 기재하기에 매우 많지만 버전별로의 폐기 및 제거버전별 GitLab 패키지(Omnibus)에 대한 변경, 그리고 GitLab 차트 업그레이드 노트에서 찾을 수 있습니다.

더 읽을거리