db:migrate:multi-version-upgrade 작업

이 작업은 Merge Request 파이프라인의 테스트 단계에서 실행됩니다. 최신 필수 업그레이드 중지점에서 작성자의 작업 브랜치로의 멀티 버전 업그레이드에 대한 마이그레이션이 통과하는지 확인합니다. 이를 위해 최신 알려진 GitLab 버전 중지점에서 생성된 PostgreSQL 덤프에 대해 gitlab:db:configure를 실행하여 이를 테스트 데이터와 함께 달성합니다.

데이터베이스 덤프는 PostgreSQL 덤프 생성기로 생성되고 유지됩니다. 데이터베이스를 데이터로 채우기 위해 이 도구는 모든 팩토리를 씨드하고 db:seed_fu를 사용하여 모든 db/fixtures를 씨드하기 위해 bulk_data.rb 구성을 사용합니다. 최신 덤프는 필수 중지점의 최신 패치 릴리스에 대해 자동으로 예약된 파이프라인에서 자동으로 생성됩니다.

문제 해결

데이터베이스 다시 구성 실패

이 실패는 보통 작업 브랜치에서 실제 마이그레이션 오류로 인해 발생합니다. 로컬에서 실패를 재현하려면 마이그레이션 업그레이드 테스트 지침을 따르세요. 이는 최신 PostgreSQL 덤프를 로컬 GitLab 개발 키트 또는 GitLab 도커 인스턴스에 가져오는 단계를 안내합니다.

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

망가진 마스터

새로운 필수 업그레이드 중지점이 추가될 때(마다 3~4개의 마일스톤), 새로운 PostgreSQL 덤프의 빌드가 트리거됩니다. 이 경우에는 새로운 추가 테이블이 씨드되면 master 파이프라인에서 db:migrate:multi-version-upgrade 작업이 실패할 수 있습니다. 예를 들어, 새로운 추가 테이블이 씨드되면 이러한 씨드 테이블이 없었던 이전 덤프에서 놓친 마이그레이션 오류를 감지하는 데 도움이 됩니다.

망가진 마스터 사례의 워크플로:

  1. 오류를 발생시킨 마이그레이션을 찾기 위해 MR의 원인을 확인합니다. 예를 들어, 실패한 작업의 db/migrate/20240416123401_add_security_policy_management_project_id_to_security_policies.rb를 찾습니다.
  2. 오류를 발생시킨 마이그레이션을 도입한 관련 팀에 연락하여 MR을 되돌려야 하는지 또는 수정이 진행될 것인지에 대해 논의합니다.
    • 팀이 사용 가능하지 않은 경우 #database Slack 채널에 관련 정보를 게시합니다.
  3. 수정이나 되돌리기가 진행 중일 때 master 파이프라인을 일시적으로 차단하기 위해 CI/CD 설정 페이지에서 DISABLE_DB_MULTI_VERSION_UPGRADE=true를 설정합니다.
    • 작업 비활성화 시 #master-broken Slack 채널에서 발표합니다.
  4. 작업 안정성 추적 이슈#458402에 참고 사항을 추가합니다.
  5. CI/CD 설정에서 DISABLE_DB_MULTI_VERSION_UPGRADE를 제거하여 작업을 복구합니다.

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

작업이 외부 의존성으로 인해 설정 단계에서 실패하는 경우 작업을 차단해야 합니다. 망가진 마스터를 해결하기 위해 프로젝트 CI 변수에서 DISABLE_DB_MULTI_VERSION_UPGRADE=true를 설정합니다.

문제 해결을 가속화하기 위해 Self-Managed Platform 팀에 연락하세요.