필수 중지 사항 피하기

필수 중지는 구성 요소나 종속성에 대한 변경으로 발생하는 것으로, GitLab 인상시 특정 major.minor 버전으로 업그레이드하고 중지해야하는 경우를 말합니다.

개발팀은 유지 보수 정책을 유지하며 세 가지 버전(3개월) 이전의 역백포트 기간을 통해 GitLab은 현재 주요 버전 및 이전 두 개의 주요 버전을 포함한 훨씬 긴 버전 지원을 유지합니다. 이전 주요 릴리스 일정에 따라 GitLab 고객은 최대 3년간 현재 릴리스를 늦추고도 업그레이드 지원을 받을 수 있습니다.

예를 들어, 전적으로 지원되는 업그레이드 경로인 GitLab 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 개의 마이너 릴리스를 뛰어넘는 업그레이드 과정에서 Support 엔지니어, 고객 성공 매니저 및 개발 엔지니어의 광범위한 문제 해결과 지원을 통해 발견되었습니다.

가능한 경우 필수 중지를 피해야 합니다. 피할 수 없는 경우, 필수 중지는 일정에 맞추어 조정되어야 합니다.

우리가 비계획적으로 필수 중지를 선언하는 것을 고려하고 있는 상황에서는 배포팀 제품 매니저에게 연락하여 다음 단계에 대해 상의해야 합니다. 필수 중지를 선언해야 할지에 대한 불확실성이 있는 경우, 배포 제품 매니저는 최종 결정을 내리기 위해 GitLab 제품 리더쉽(VP 또는 최고 제품 책임자)로 사안을 위임할 수 있습니다. 예를 들어, 특정 변경 사항이 매우 큰 자체 설치에 속하는 소수에게 중지를 요구하고 문제가 발생할 경우 명확한 해결책이 정의되어 있는 경우에 그렇게 할 수 있습니다.

일정에 맞춘 필수 중지는 주로 major.minor 릴리스를 위한 이전 릴리스 직전에 구현되며, 이는 계획된 폐기 및 알려진 파괴적 변경을 수용하기 위한 것입니다.

또한, GitLab 16부터 우리는 일정에 따라 일정에 맞춘 major.minor 필수 중지를 도입했습니다:

GitLab 16.x에서 두 번 또는 세 번의 일정에 맞는 업그레이드 중지를 예정했습니다.

필수 업그레이드 중지가 예정되면 적어도 두 개의 마일스톤의 예고를 합니다. 첫 번째 예정된 필수 업그레이드 중지는 GitLab 16.3에 예정되어 있습니다. 업그레이드 중지를 요구하는 새로운 사항이 소개되지 않았다면, GitLab 16.3은 일반적인 업그레이드로 처리됩니다.

필수 중지의 원인

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

필수 중지의 대부분은 특정 릴리스에서 데이터 모델 상태에 대한 가정 때문에 발생하며, 보통 상호 의존적인 데이터베이스 마이그레이션 형태나 스키마 변경이 코드 로드 시 완료되었다고 가정하는 코드 변경으로 인해 발생합니다.

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

경고: 특정 릴리스에서 마이그레이션을 추가하거나 제거하거나, 특정 마이그레이션이 완료되었다고 가정하는 코드를 도입하는 경우, 먼저 필수 중지에 대한 데이터베이스 관련 문서를 확인하세요.

예시

  • GitLab 12.1: MergeRequestsstate 값에 따라 merge_status를 변경하는 백그라운드 마이그레이션을 도입하였습니다. state 속성은 12.10에서 제거되었습니다. 필수 중지는 13.6에서 문서화되었습니다.
  • GitLab 13.8: 중복 서비스 레코드를 처리하기 위한 백그라운드 마이그레이션이 포함되어 있습니다. 13.9에서 또 다른 마이그레이션에 고유 인덱스가 적용되었는데 이는 백그라운드 마이그레이션이 완료되어야 했습니다. GitLab 14.3에서 발견 및 문서화되었습니다.
  • GitLab 14.3: merge_request_diff_commits에 대한 잠재적으로 오래 걸리는 백그라운드 마이그레이션이 포함되어 있었고, 14.5에서 포그라운드로 전환되었습니다. 이 변경으로 대규모 GitLab 설치에 대한 큰 다운타임이 발생했으며, 15.1에서 발견 및 문서화되었습니다.
  • GitLab 14.9: namespacesprojects에 대한 배치형 백그라운드 마이그레이션이 다른 배치형 백그라운드 마이그레이션의 실행이 완료되기 전에 완료되어야 하는 필수 중지가 발생했습니다. 이 마이그레이션은 대규모 GitLab 설치에서 시간 또는 일이 걸릴 수 있습니다.

관련 세부 정보 및 관련 이슈 및 MR에 대한 링크는 다음에서 찾을 수 있습니다: 이슈: GitLab 업그레이드 경로 중지 추가/증식을 피하기 위한 조치

코드 우회 및 완화 조치 제거

데이터 모델/스키마/마이그레이션 상태에 대한 가정과 유사하게 의도적으로 코드 우회를 제거하기 위해 필요한 major.minor 정지가 도입되었습니다.

예시

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

폐지된 기능

폐지된 기능, 특히 파괴적 변경은 긴 마이그레이션 지연을 도입하거나 GitLab 관리자의 수동 조치가 필요한 경우 필수 정지를 초래할 수 있습니다.

이러한 것들은 일반적으로 새로운 major 릴리스 바로 직전의 최신 major.minor 릴리스에서 정지하고, 지금까지 발견된 폐지된 기능과 관련된 필수 정지는 이러한 릴리스에 제한되었습니다.

예시

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

더 읽어보기