필수 중지 사항 회피

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

개발 부서는 유지 보수 정책을 유지하며, 이로 인해 3 개월 동안 이전 세 개의 릴리스에 대한 백포트 창이 유지됩니다. 그러나 GitLab은 버전 지원을 포함하여 현재 주요 버전 및 이전 두 주요 버전을 지원하는 훨씬 긴 윈도우를 유지합니다. 이전 주요 릴리스 일정을 고려하면 GitLab 고객은 현재 릴리스에서 최대 3년 동안 지연될 수 있으며 업그레이드 지원을 받을 수 있습니다.

예를 들어, 14.0.12에서 16.1로 업그레이드하는 GitLab 사용자는 최신 16.1.z 버전으로 업그레이드하기 전에 다음 필수 중지 사항을 가질 수 있습니다: 14.3.6, 14.9.5, 14.10.5, 15.0.5, 15.1.6, 15.4.6, 15.11.11.

과거의 필수 중지 사항은 종종 소개된 후 수개월 동안 발견되지 않았으며, 종종 확장된 문제 해결 및 지원 엔지니어, 고객 성공 관리자 및 개발 엔지니어의 지원을 통해 1-3 개 이상의 마이너 릴리스를 업그레이드하는 사용자가 있었습니다.

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

우리가 비정기적인 필수 중지 사항을 선언하는 것을 고려하는 경우, 분배 팀 제품 관리자에게 연락하여 다음 단계에 대해 상담하세요. 필수 중지 사항을 선언해야 하는지에 대한 불확실성이 있는 경우, 분배 제품 관리자는 GitLab 제품 리더십 (VP 또는 최고 제품 책임자)에게 최종 결정을 내리도록 업그레이드 사안을 에스컬레이션할 수 있습니다. 예를 들어, 변경 사항이 매우 큰 자체 설치에 중소 규모의 고객을 위한 중지를 요구하고 문제가 발생한 경우에는 명확한 해결책이 있는 경우에도 이런 사항이 발생할 수 있습니다.

예정된 필수 중지 사항은 주로 major 버전 릴리스 바로 전의 이전 major.minor 릴리스에 대해 구현되어 여러 계획된 폐기됨 및 알려진 중단 변경을 수용하기 위해 구현됩니다.

또한, GitLab 16부터 우리는 예정된 major.minor 필수 중지 사항을 도입했습니다:

GitLab 16.x에서 두 번 또는 세 번의 필수 업그레이드 중지 사항을 예정하고 있습니다.

필수 업그레이드 중지 사항을 예정할 때는 적어도 두 개의 마일스톤의 사전 통보를 제공할 것입니다. 첫 번째 예정된 필수 업그레이드 중지 사항은 GitLab 16.3에 예정되어 있습니다. 업그레이드 중지가 필요한 새로운 사안이 발생하지 않는다면 GitLab 16.3은 일반 업그레이드로 처리될 것입니다.

필수 중지 사항의 원인

완료된 마이그레이션에 대한 부정확한 가정

필수 중지 사항의 대부분은 주로 특정 릴리스에서 데이터 모델의 상태에 대한 가정으로 인해 발생하며, 일반적으로 상호의존하는 데이터베이스 마이그레이션 또는 코드 변경 형태로 나타납니다. 이전 마이그레이션에서 도입된 스키마 변경이 코드를 로드하는 시점에 완료되었다고 가정하는 것과 관련이 있습니다.

버전 간의 호환성을 위한 변경 사항 및 마이그레이션 설계는 지속적 또는 “제로 다운타임” 업그레이드에 대한 중지 우려를 완화시킬 수 있습니다. 그러나 계약 단계는 일반적으로 백그라운드 마이그레이션이 완료된 후에 실행 또는 로드해야 하는 마이그레이션/코드 변경이 도입될 때 필수 중지 사항을 도입할 가능성이 높습니다.

caution
만약 주어진 릴리스에서 백그라운드 마이그레이션을 추가하거나 제거하거나, 마이그레이션이 완료되었다고 가정하는 코드를 도입한다면 먼저 필수 중지 사항에 대한 데이터베이스 관련 문서를 검토하세요.

예시

  • GitLab 12.1: state 값에 따라 MergeRequests에서 merge_status를 변경하는 백그라운드 마이그레이션을 도입했습니다. state 속성은 12.10에서 제거되었습니다. 이 필수 중지 사항이 문서화되기까지 13.6까지 시간이 걸렸습니다.
  • GitLab 13.8: 중복 서비스 레코드 처리용 백그라운드 마이그레이션을 포함하고 있습니다. 13.9에서 다른 마이그레이션에서 중복 서비스 레코드용 고유 인덱스가 적용되었습니다. 이는 백그라운드 마이그레이션이 완료되길 기다렸다가 문서화가 14.3에서 이뤄졌습니다.
  • GitLab 14.3: merge_request_diff_commits에 대한 잠재적으로 오랜 시간이 걸리는 백그라운드 마이그레이션을 포함하고 있습니다. 이 변경 사항은 대형 GitLab 설치에 대해 상당한 다운타임을 야기했습니다. 이는 15.1에서 문서화되었습니다.
  • GitLab 14.9: namespacesprojects의 작업용 백그라운드 마이그레이션과 14.10에서 추가된 다른 작업용 백그라운드 마이그레이션을 완료하여 실행되기 전에 마무리해야 하는 백그라운드 마이그레이션을 포함하고 있어서 필수 중지가 생성됩니다. 이 마이그레이션은 대형 GitLab 설치에서 몇 시간이나 몇 일이 걸릴 수 있습니다.

관련 내용 및 관련된 이슈 및 MR에 대한 링크 등의 추가 정보는 다음에서 찾을 수 있습니다: 이슈: GitLab 업그레이드 경로 중지 추가/확산을 피하기 위한 조치

코드 해결책 및 완화 조치 제거

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

예시

  • GitLab 13.1: Rails 6.0.3.1에서 보안 수정으로 CSRF 토큰 변경이 발생했습니다 (캐너리 환경 사건 발생). 이전에 생성된 토큰을 계속 수용하기 위한 코드를 도입하고, 13.2에서 해당 코드를 제거하여 13.1에서 알려진 필수 중지 사항이 생성되었습니다.
  • GitLab 15.4: 작업 아티팩트에 대한 부정확한 expires_at 타임스탬프를 수정하는 마이그레이션을 소개했습니다. GitLab 14.9 이후로 코드를 완화한 것이었는데, 이 완화 코드가 15.6에서 제거되어 15.4가 필수 중지 사항이 되었습니다.

폐기 요소

폐기 요소, 특히 중단 변경은 긴 마이그레이션 지연을 도입하거나 GitLab 관리자가 매뉴얼 조치를 취해야 하는 경우에 필수 중지 사항을 유발할 수 있습니다.

이는 일반적으로 주요 릴리스 앞에 필수 중지 사항으로 받아들여지며, 새로운 major 릴리스 바로 전의 최신 major.minor 릴리스에서 중지하는 경우가 대부분이며, 현재까지 발견된 폐기 요소와 관련된 필수 중지 사항은 이러한 릴리스로 제한됩니다.

예시

Deprecation의 예시는 이곳에 모두 나열할 수 없지만, 버전별 폐기 및 제거 사항버전별 업그레이드 안내, GitLab 패키지(Omnibus)의 버전별 변경 사항, 그리고 GitLab 차트 업그레이드 노트에서 찾을 수 있습니다.

추가 자료