데이터베이스 마이그레이션 파이프라인
- GitLab 14.2에서 도입되었습니다.
자동화된 마이그레이션 테스트 파이프라인을 사용하여 우리는 프로덕션과 유사한 환경( Database Lab 사용)에서 마이그레이션을 자동으로 테스트할 수 있습니다. 이는 아키텍처 설계에 기반을 두고 있습니다.
새로운 데이터베이스 마이그레이션을 추가하는 변경에 대해 GitLab 프로젝트에서 마이그레이션 테스트가 활성화되어 있습니다. 이 작업은 test
단계 내에서 매뉴얼으로 db:gitlabcom-database-testing
작업을 실행하여 트리거할 수 있습니다. 자원을 낭비하지 않으려면 MR이 리뷰를 위해 준비된 상태일 때만 이 작업을 실행하십시오. 또한 파이프라인이 테스트 단계에 나타나려면 MR에 “database” 라벨이 있는지 확인하십시오.
작업은 오퍼레이션 GitLab 인스턴스에서 파이프라인을 시작합니다. 보안상의 이유로, 파이프라인에 대한 액세스는 데이터베이스 유지보수자로 제한됩니다.
파이프라인이 시작되면 로봇이 MR에 대한 코멘트로 알립니다. 완료되면 코멘트가 테스트 결과로 업데이트됩니다.
코멘트에는 main
과 ci
데이터베이스에 대한 테스팅 정보가 포함되어 있습니다. 각 테스트된 데이터베이스에는 아래에서 설명하는 네 가지 섹션이 있습니다.
요약
코멘트의 첫 번째 섹션에는 다음과 같은 테스트 결과에 대한 요약 정보가 포함되어 있습니다:
- 경고 - 예외나 실행 시간이 긴 쿼리와 같은 중요한 이슈를 강조합니다.
- 마이그레이션 - 각 마이그레이션이 완료된데 걸린 시간, 성공 여부 및 데이터베이스 크기 증가량입니다.
- 실행 시간 히스토그램 - 모든 마이그레이션의 쿼리 실행 시간에 대한 히스토그램을 보려면 이 섹션을 확장하십시오.
마이그레이션 세부 정보
코멘트의 다음 섹션에는 각 마이그레이션에 대한 상세 정보가 포함되어 있습니다:
- 세부 정보 - 마이그레이션 종류, 총 소요 시간 및 데이터베이스 크기 변경이 포함됩니다.
- 쿼리 - 각 마이그레이션 중 실행된 모든 쿼리와 호출 횟수, 실행 시간 및 변경된 행 수가 포함됩니다.
- 실행 시간 히스토그램 - 마이그레이션의 쿼리 실행 시간 분포를 나타냅니다.
데이터베이스 크기 증가
가끔 마이그레이션은 데이터베이스 크기 증가가 예상되지 않았더라도 +8.00 KiB 크기가 증가로 표시됩니다. 모든 마이그레이션을 완료하면 schema_migrations
테이블에 한 행이 추가되는데, 이로 인해 새로운 디스크 페이지를 만들어야 할 수 있습니다. 새로운 디스크 페이지가 생성된다면 데이터베이스 크기는 정확히 8 KiB만큼 증가합니다.
백그라운드 마이그레이션 세부 정보
코멘트의 다음 섹션에는 각 batched 백그라운드 마이그레이션의 상세 정보가 포함되어 있습니다:
- 샘플링 정보 - 이 테스트 실행 중 샘플링된 배치 수입니다. 샘플링된 배치는 테이블의 ID 범위 전체를 균일하게 선택합니다. 샘플링은 각 백그라운드 마이그레이션에서 30분 동안 분할하여 실행됩니다.
- 집계된 쿼리 정보 - 각 샘플링된 배치 전체에서 실행된 모든 쿼리에 대한 집계 데이터와 호출 횟수, 실행 시간 및 변경된 행 수가 포함됩니다.
- 배치 실행 시간 히스토그램 - 백그라운드 마이그레이션의 각 샘플링된 배치에 대한 실행 시간에 대한 히스토그램입니다.
- 쿼리 실행 시간 히스토그램 - 이 백그라운드 마이그레이션의 모든 배치에서 실행된 쿼리에 대한 실행 시간 히스토그램입니다.
복제본 세부 정보 및 아티팩트
코멘트의 하단에는 몇 가지 추가 정보가 포함되어 있습니다:
- GitLab.com에 대기 중인 마이그레이션 - 아직 GitLab.com에 배포되지 않은 마이그레이션에 대한 요약 정보입니다. 이 정보는 이미 Merge된 배포되지 않은 마이그레이션을 테스트하는 경우 유용합니다.
-
복제본 세부 정보 - 이 테스트 파이프라인용으로 생성된
Postgres.ai
씬 클론에 대한 링크와 그 유효기간에 대한 정보가 포함됩니다. 이를 통해 마이그레이션 실행 결과를 더 자세히 살펴볼 수 있습니다. 데이터베이스 유지보수자 또는 액세스 요청을 통해서만 액세스할 수 있습니다. -
아티팩트 - 파이프라인의 아티팩트에 대한 링크입니다. 각 마이그레이션의 전체 쿼리 로그(확장자
.log
)로 이루어진 로그들이 있으며, 데이터베이스 유지보수자 또는 액세스 요청을 통해서만 액세스할 수 있습니다. 특정 배치된 백그라운드 마이그레이션 샘플링의 세부 정보도 이용할 수 있습니다.
데이터베이스 테스트 파이프라인의 변경 테스트
데이터베이스 테스트 파이프라인을 변경 테스트 하려면 다음이 필요합니다:
- GitLab Org에 대한 Merge Request.
- 테스트할 변경 사항은 GitLab Ops의 브랜치에 존재해야 합니다.
GitLab Org의 Merge Request을 GitLab Ops의 임의의 브랜치에 대해 테스트하려면 다음과 같이 자체 문서화된 스크립트를 사용하십시오:
#! /usr/bin/env bash
# 다음은 각 호출마다 설정해야 하는 것들입니다:
TESTING_TRIGGER_TOKEN='[REDACTED]' # 프로젝트의 CI 섹션에서 생성된 테스트 트리거 토큰
CI_COMMIT_REF_NAME='55-post-notice-on-failure' # 실행하려는 ops의 브랜치
CI_MERGE_REQUEST_IID='117901' # 테스트하려는 gitlab.com의 MR ID
SHA="fed6dd8a58d75a0e053a4972765b4fc08c5814a3" # 테스트하려는 gitlab-org/gitlab 브랜치의 HEAD의 커밋 SHA
# 다음은 호출 사이에 변경되지 않아야 합니다:
CI_JOB_URL='https://gitlab.com/gitlab-org/database-team/gitlab-com-database-testing/-/jobs/1590162939'
# 파이프라인이 성공적으로 실행되려면 일반적으로 CI_JOB_URL을 특정 값으로 설정할 필요가 없는 것 같습니다.
# 하지만 기본적으로는 이것은 DB 테스트 파이프라인을 호출하는 상위 작업의 URL일 것입니다.
CI_MERGE_REQUEST_PROJECT_ID='278964' # gitlab-org/gitlab의 숫자 ID. 변경되어서는 안 됩니다.
CI_PROJECT_ID="gitlab-org/gitlab" # gitlab-org/gitlab을 식별하는 슬러그입니다.
curl --verbose --request POST \
--form "token=$TESTING_TRIGGER_TOKEN" \
--form "ref=$CI_COMMIT_REF_NAME" \
--form "variables[TOP_UPSTREAM_MERGE_REQUEST_IID]=$CI_MERGE_REQUEST_IID" \
--form "variables[TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID]=$CI_MERGE_REQUEST_PROJECT_ID" \
--form "variables[TOP_UPSTREAM_SOURCE_JOB]=$CI_JOB_URL" \
--form "variables[TOP_UPSTREAM_SOURCE_PROJECT]=$CI_PROJECT_ID" \
--form "variables[VALIDATION_PIPELINE]=true" \
--form "variables[GITLAB_COMMIT_SHA]=$SHA" \
--form "variables[TRIGGER_SOURCE]=$CI_JOB_URL" \
"https://ops.gitlab.net/api/v4/projects/429/trigger/pipeline"