마이그레이션 순서

GitLab 17.1부터 마이그레이션은 GitLab 릴리스 주기에 맞춘 사용자 지정 순서 체계로 실행됩니다. 이 변경 사항은 업그레이드 프로세스를 간소화하고 유지 관리 및 지원을 용이하게 합니다.

17.1 이전 로직

마이그레이션은 파일 이름에 주어진 14자리 타임스탬프에 따라 순서대로 실행됩니다. 이 동작은 Rails 애플리케이션의 기본값입니다.

GitLab은 또한 다음과 같은 중요한 방식으로 표준 마이그레이션 동작을 확장하는 로직을 제공합니다:

  1. 추가 폴더에서 마이그레이션을 로드할 수 있습니다. 예를 들어, 마이그레이션은 db/post_migrate 폴더와 db/migrate 폴더 모두에서 로드됩니다. 이는 배포 후 마이그레이션을 사용할 때 필요합니다.
  2. 환경 변수 SKIP_POST_DEPLOYMENT_MIGRATIONS를 설정하면, post_migrate 폴더에서 마이그레이션이 로드되지 않습니다.
  3. 모든 새로운 마이그레이션에는 GitLab 마이너 버전 또는 “마일스톤”을 제공해야 합니다.

17.1 이상 로직

마이그레이션은 다음과 같은 순서로 실행됩니다:

  1. milestone이 정의되지 않은 마이그레이션이 먼저 실행되며, 이는 타임스탬프에 따라 순서가 정해집니다.
  2. milestone이 정의된 마이그레이션은 마일스톤 순서로 실행됩니다:
    1. 일반 마이그레이션은 배포 후 마이그레이션보다 먼저 실행됩니다.
    2. 동일한 유형 및 마일스톤의 마이그레이션은 타임스탬프에 따라 순서가 정해집니다.

예시:

  1. milestone이 정의되지 않은 모든 마이그레이션.
  2. 17.1 일반 마이그레이션.
  3. 17.1 배포 후 마이그레이션.
  4. 17.2 일반 마이그레이션.
  5. 17.2 배포 후 마이그레이션.
  6. 업그레이드의 각 마일스톤에 대해 반복합니다.

배포 후 마이그레이션에 대한 새로운 동작

이 변경 사항은 배포 후 마이그레이션이 항상 특정 마일스톤의 끝에 정렬되도록 합니다. 이전에는 배포 후 마이그레이션이 일반 마이그레이션과 섞여 실행되었으며, SKIP_POST_DEPLOYMENT_MIGRATIONS가 설정되지 않은 경우에 해당했습니다. SKIP_POST_DEPLOYMENT_MIGRATIONS가 설정되면, 배포 후 마이그레이션은 실행되지 않습니다.