db:migrate:multi-version-upgrade 작업

  • GitLab 16.11에서 도입됨.

이 작업은 병합 요청 파이프라인의 테스트 단계에서 실행됩니다.

이 작업은 최신 필요한 업그레이드 정지에서 저자의 작업 브랜치까지의 다중 버전 업그레이드에 대해 마이그레이션이 통과하는지 확인합니다.

이를 위해, 테스트 데이터를 사용하여 최신으로 알려진 GitLab 버전 정지로부터 생성된 PostgreSQL 덤프에 대해 gitlab:db:configure를 실행합니다.

데이터베이스 덤프는 PostgreSQL 덤프 생성기를 사용하여 생성되고 유지됩니다.

데이터로 데이터베이스를 시드하기 위해, 이 도구는 Data Seeder를 사용하며 bulk_data.rb 구성을 사용하여 모든 팩토리를 시드하고 db:seed_fu를 사용하여 모든 db/fixtures를 시드합니다.

최신 덤프는 필요한 정지의 최신 패치 릴리스를 위해 예정된 파이프라인에서 자동으로 생성됩니다.

문제 해결

데이터베이스 재구성 실패

이 실패는 일반적으로 작업 중인 브랜치의 실제 마이그레이션 오류로 인해 발생합니다.

로컬에서 실패를 재현하려면 마이그레이션 업그레이드 테스트 가이드를 따르세요.

이 가이드는 최신 PostgreSQL 덤프를 로컬 GitLab 개발 키트 또는 GitLab Docker 인스턴스에 가져오는 방법을 설명합니다.

실제 사례를 참조하려면 이 실패한 작업을 확인하세요.

깨진 마스터

새로운 필요한 업그레이드 정지가 추가될 때 (3개 또는 4개 이정표마다), 새로운 PostgreSQL 덤프의 빌드를 촉발합니다.

이 경우, db:migrate:multi-version-upgrade 작업이 master 파이프라인에서 실패할 수 있습니다.

예를 들어, 새로 추가된 테이블이 시드되는 경우, 이는 이러한 시드된 테이블이 포함되지 않은 이전 덤프에서 놓쳤을 수도 있는 마이그레이션 오류를 감지하는 데 도움이 됩니다.

깨진 마스터 사례의 워크플로우:

  1. 오류를 일으킨 마이그레이션을 검색하여 루트 원인 MR을 식별합니다. 예를 들어, 실패한 작업의 db/migrate/20240416123401_add_security_policy_management_project_id_to_security_policies.rb
  2. 마이그레이션을 도입한 관련 팀에 연락하여 MR을 되돌려야 하는지 또는 수정 작업이 진행될 것인지 논의합니다.
    • 팀이 없는 경우, #database Slack 채널에 게시합니다.
  3. 수정 작업이나 되돌리기가 진행되는 동안, CI/CD 설정 페이지에서 DISABLE_DB_MULTI_VERSION_UPGRADE=true를 설정하여 master 파이프라인의 차단을 해제할 수 있습니다.
    • 작업을 비활성화 할 때, #master-broken Slack 채널에 이를 알립니다.
  4. 작업 안정성 추적 이슈#458402에 주석을 추가합니다.

  5. CI/CD 설정에서 DISABLE_DB_MULTI_VERSION_UPGRADE를 제거하여 작업을 복구합니다.

데이터베이스 가져오기 실패

작업이 gitlab:db:configure 전에 외부 종속성으로 인해 설정 단계에서 실패하는 경우,

DISABLE_DB_MULTI_VERSION_UPGRADE=true를 GitLab 프로젝트 CI 변수에 설정하여 작업을 비활성화할 수 있습니다

손상된 마스터를 차단 해제하십시오.

디버깅을 신속하게 진행하려면 Self-Managed Platform 팀에 문의하세요.