솔루션
풀 리퀘스트마다 미리 보기 데이터베이스
풀 리퀘스트가 열리면 데이터베이스 브랜치를 만들고, 닫히면 삭제하세요. 각 미리 보기는 실제 데이터에서 시작해 전용 컴퓨트에서 실행되므로 마이그레이션과 테스트가 기본 브랜치에 영향을 주지 않습니다.
작동 방식
01
풀 리퀘스트가 열리면 브랜치 만들기
CI 작업이 API 키로 Open API를 호출해 기본 브랜치에서 브랜치를 만듭니다. 브랜치는 부모 브랜치를 쓰기 시 복사 방식으로 분기한 것이며, 데이터베이스 크기와 상관없이 몇 초 안에 준비됩니다.
curl -X POST "https://relyt.one/api/v1/projects/$PROJECT_ID/branches" \ -H "Authorization: Bearer $RELYT_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"name\":\"pr-$PR_NUMBER\",\"parentBranchSlug\":\"$MAIN_BRANCH_SLUG\"}"02
미리 보기를 브랜치에 연결하기
브랜치마다 전용 기본 컴퓨트가 있습니다. 프로젝트의 브랜치 목록을 조회해 새 컴퓨트의 상태가 READY가 될 때까지 기다린 다음, 그 host를 미리 보기의 마이그레이션, 테스트, 앱에 사용하세요.
curl "https://relyt.one/api/v1/projects/$PROJECT_ID/branches" \ -H "Authorization: Bearer $RELYT_API_KEY"03
풀 리퀘스트가 닫히면 삭제하기
한 번 더 호출하면 브랜치와 그 컴퓨트가 삭제됩니다. 기본 브랜치는 바뀌지 않습니다.
curl -X DELETE "https://relyt.one/api/v1/projects/$PROJECT_ID/branches/$BRANCH_SLUG" \ -H "Authorization: Bearer $RELYT_API_KEY"
지금 바로 쓸 수 있는 기능
픽스처가 아닌 실제 데이터
브랜치는 부모 브랜치의 전체 데이터를 가진 상태로 시작합니다. 바뀌지 않은 데이터는 부모와 공유하므로 미리 보기에서 생긴 변경분만 새 스토리지를 사용합니다.
전용 컴퓨트
미리 보기의 쿼리는 기본 브랜치의 컴퓨트가 아니라 해당 브랜치의 컴퓨트에서 실행됩니다. 유휴 컴퓨트는 일시 중지되었다가 다음 연결 시 다시 시작될 수 있으며, 데이터에는 영향이 없습니다.
어떤 CI에서든 스크립트로
REST Open API와 API 키로 브랜치를 만들고, 조회하고, 이름을 바꾸고, 삭제할 수 있습니다. 브랜치 이름은 프로젝트 안에서 고유하므로 같은 풀 리퀘스트의 작업이 두 번 실행되면 두 번째는 409를 받고 브랜치가 하나 더 생기지 않습니다.
알아 둘 점
- Relyt One은 저장소에 아무것도 설치하지 않습니다. 호출은 GitHub Actions 작업 같은 사용자의 CI 워크플로에서 실행되며, API 키는 시크릿으로 저장합니다.
- 하위 브랜치가 남아 있는 브랜치는 삭제할 수 없고, 기본 브랜치는 아예 삭제할 수 없습니다. 미리 보기는 기본 브랜치에서 만들고, 부모 브랜치보다 먼저 삭제하세요.