마이그레이션 스쿼싱
GitLab v19.1마이그레이션 스쿼싱은 여러 데이터베이스 마이그레이션을 단일 스키마 정의로 결합하여 데이터베이스 설정 성능을 향상시키고 관리 가능한 마이그레이션 히스토리를 유지합니다. 마이그레이션 스쿼싱은 GitLab Housekeeper를 통해 자동화됩니다.
마이그레이션 스쿼싱#
히스토리
- GitLab 16.3에서 도입됨.
- GitLab 18.9에서 자동화됨.
마이그레이션 스쿼싱은 여러 데이터베이스 마이그레이션을 단일 스키마 정의로 결합하여 데이터베이스 설정 성능을 향상시키고 관리 가능한 마이그레이션 히스토리를 유지합니다.
자동화#
마이그레이션 스쿼싱은 GitLab Housekeeper를 통해 자동화됩니다. Keeps::SquashMigrations keep은 예정된 마일스톤에서 자동으로 머지 리퀘스트를 생성합니다.
자동화는 Engineering Productivity 팀의 CI 구성에 있는 예약된 파이프라인 job을 통해 실행됩니다.
스케줄#
스쿼싱은 .2, .5, .8, .11로 끝나는 마일스톤에서 발생합니다. 이는 필수 중지점과 일치합니다.
타깃 브랜치는 현재 마일스톤보다 두 개의 필수 중지점 이전입니다:
| 현재 마일스톤 | 스쿼싱 대상 |
|---|---|
| X.2 | (X-1).8 |
| X.5 | (X-1).11 |
| X.8 | X.2 |
| X.11 | X.5 |
예를 들어, 18.8 필수 중지점에서 마이그레이션은 origin/18-2-stable-ee까지 스쿼싱됩니다.
수동 실행#
이전 버전(예: 16.10)에서 수동으로 마이그레이션을 스쿼싱하려면 다음을 실행하세요:
bundle exec rake "gitlab:db:squash[origin/16-10-stable-ee]"
이 Rake 태스크는 다음을 수행합니다:
-
이전 버전의 모든 마이그레이션을 제거합니다
-
스쿼싱된 스키마로
db/init_structure.sql을 업데이트합니다 -
관련 파일의 스키마 버전 참조를 업데이트합니다
-
연관된 마이그레이션 스펙 및 RuboCop TODO를 제거합니다
-
완료된 배치 백그라운드 마이그레이션을 정리합니다
파라미터#
| 파라미터 | 설명 |
|---|---|
| [origin/16-10-stable-ee] | 마이그레이션 스쿼싱의 기준선으로 사용할 Git 참조. 타깃 버전의 안정 브랜치여야 합니다. |
문제 해결#
누락된 스키마 참조#
누락된 스키마 참조와 관련된 오류가 발생하면 다음을 확인하세요:
-
이전 마이그레이션을 참조할 수 있는 마이그레이션 스펙 파일
-
수동 업데이트가 필요할 수 있는 백그라운드 마이그레이션 파일
-
특정 마이그레이션 버전을 참조하는 문서