리뷰 앱
리뷰 앱 (Review apps)
리뷰 앱은 각 브랜치나 머지 리퀘스트에 대해 자동으로 생성되는 임시 테스트 환경이에요. 로컬 개발 환경을 설정하지 않고도 변경 사항을 미리 보고 검증할 수 있어요.
동적 환경(dynamic environments) 위에 구축된 리뷰 앱은 각 브랜치나 머지 리퀘스트에 고유한 환경을 제공해요. 이런 환경은 개발 워크플로를 이렇게 개선해 줘요.
- 변경 사항을 테스트하기 위해 로컬 설정이 필요 없음.
- 모든 팀원에게 일관된 환경 제공.
- 이해관계자가 URL로 변경 사항을 미리 볼 수 있게 함.
- 변경 사항이 프로덕션에 도달하기 전에 더 빠른 피드백 주기 가능.
Kubernetes 클러스터가 있다면 Auto DevOps로 리뷰 앱을 자동으로 설정할 수 있어요.
출처: 문서
본문
리뷰 앱 워크플로
리뷰 앱 워크플로는 대략 이렇게 생겼어요.
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: Review app workflow
accDescr: Diagram showing how review apps fit into the GitLab development workflow.
subgraph Development["Development"]
TopicBranch["Create topic branch"]
Commit["Make code changes"]
CreateMR["Create merge request"]
end
subgraph ReviewAppCycle["Review app cycle"]
direction LR
Pipeline["CI/CD pipeline runs"]
ReviewApp["Review app deployed"]
Testing["Review and testing"]
Feedback["Feedback provided"]
NewCommits["Address feedback
with new commits"]
end
subgraph Deployment["Deployment"]
Approval["Merge request approved"]
Merge["Merged to default branch"]
Production["Deployed to production"]
end
TopicBranch --> Commit
Commit --> CreateMR
CreateMR --> Pipeline
Pipeline --> ReviewApp
ReviewApp --> Testing
Testing --> Feedback
Feedback --> NewCommits
NewCommits --> Pipeline
Testing --> Approval
Approval --> Merge
Merge --> Production
리뷰 앱 구성하기
각 브랜치나 머지 리퀘스트에 대한 애플리케이션 미리보기 환경을 제공하려면 리뷰 앱을 구성해요.
전제 조건:
- 프로젝트에 대한 Developer, Maintainer 또는 Owner 역할이 있어야 해요.
- 프로젝트에 CI/CD 파이프라인이 있어야 해요.
- 리뷰 앱을 호스팅하고 배포할 인프라를 설정해야 해요.
프로젝트에서 리뷰 앱을 구성하려면:
-
상단 바에서 Search or go to를 선택하고 프로젝트를 찾아요.
-
왼쪽 사이드바에서 Build > Pipeline editor를 선택해요.
-
.gitlab-ci.yml파일에 동적 환경을 만드는 잡을 추가해요. 각 환경을 구분하려면 사전 정의 CI/CD 변수를 사용할 수 있어요. 예를 들어CI_COMMIT_REF_SLUG사전 정의 변수를 사용하면:
review_app:
stage: deploy
script:
- echo "Deploy to review app environment"
# Add your deployment commands here
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://$CI_COMMIT_REF_SLUG.example.com
rules:
- if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
-
(선택) 리뷰 앱을 수동으로만 배포하려면 잡에
when: manual을 추가해요. -
(선택) 더 이상 필요 없을 때 리뷰 앱을 중지하는 잡을 추가해요.
-
커밋 메시지를 입력하고 Commit changes를 선택해요.
리뷰 앱 템플릿 사용하기
GitLab은 기본적으로 머지 리퀘스트 파이프라인에 맞게 구성된 내장 템플릿을 제공해요.
이 템플릿을 사용하고 커스터마이즈하려면:
-
상단 바에서 Search or go to를 선택하고 프로젝트를 찾아요.
-
왼쪽 사이드바에서 Operate > Environments를 선택해요.
-
Enable review apps를 선택해요.
-
나타나는 Enable Review Apps 대화 상자에서 YAML 템플릿을 복사해요.
deploy_review:
stage: deploy
script:
- echo "Add script here that deploys the code to your infrastructure"
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_ENVIRONMENT_SLUG.example.com
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
-
Build > Pipeline editor를 선택해요.
-
템플릿을
.gitlab-ci.yml파일에 붙여넣어요. -
배포 요구 사항에 맞게 템플릿을 커스터마이즈해요.
- 배포 스크립트와 환경 URL을 인프라에 맞게 수정해요.
- 머지 리퀘스트 없이도 브랜치에 리뷰 앱을 배포하려면 rules 섹션을 조정해요.
예를 들어 Heroku로 배포하면:
deploy_review:
stage: deploy
image: ruby:latest
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_API_KEY
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$HEROKU_APP_NAME.herokuapp.com
on_stop: stop_review_app
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
이 구성은 머지 리퀘스트에 대해 파이프라인이 실행될 때마다 Heroku에 자동 배포를 설정해요. Ruby의 dpl 배포 도구로 프로세스를 처리하고, 지정된 URL로 접근할 수 있는 동적 리뷰 환경을 만들어요.
- 커밋 메시지를 입력하고 Commit changes를 선택해요.
리뷰 앱 중지하기
리소스를 절약하기 위해 리뷰 앱을 수동 또는 자동으로 중지하도록 구성할 수 있어요.
리뷰 앱 환경 중지에 대한 자세한 내용은 환경 중지를 참고해요.
머지 시 리뷰 앱 자동 중지
관련 머지 리퀘스트가 병합되거나 브랜치가 삭제되면 리뷰 앱이 자동으로 중지되도록 구성하려면:
- 배포 잡에
[on_stop](/ci/yaml/#environmenton_stop)키워드를 추가해요. [environment:action: stop](/ci/yaml/#environmentaction)으로 중지 잡을 만들어요.- (선택) 언제든 수동으로 리뷰 앱을 중지하려면 중지 잡에
[when: manual](/ci/yaml/#when)을 추가해요.
예를 들어:
# In your .gitlab-ci.yml file
deploy_review:
# Other configuration...
environment:
name: review/${CI_COMMIT_REF_NAME}
url: https://${CI_ENVIRONMENT_SLUG}.example.com
on_stop: stop_review_app # References the stop_review_app job
stop_review_app:
stage: deploy
script:
- echo "Stop review app"
# Add your cleanup commands here
environment:
name: review/${CI_COMMIT_REF_NAME}
action: stop
when: manual # Makes this job manually triggerable
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
시간 기반 자동 중지
일정 시간이 지나면 리뷰 앱이 자동으로 중지되도록 구성하려면 배포 잡에 [auto_stop_in](/ci/yaml/#environmentauto_stop_in) 키워드를 추가해요.
# In your .gitlab-ci.yml file
review_app:
script: deploy-review-app
environment:
name: review/$CI_COMMIT_REF_SLUG
auto_stop_in: 1 week # Stops after one week of inactivity
rules:
- if: $CI_MERGE_REQUEST_ID
리뷰 앱 보기
리뷰 앱을 배포하고 접근하려면:
- 머지 리퀘스트로 이동해요.
- (선택) 리뷰 앱 잡이 수동이면 Run을 선택해 배포를 시작해요.
- 파이프라인이 끝나면 View app을 선택해 브라우저에서 리뷰 앱을 열어요.
예시 구현
다음 프로젝트들이 다양한 리뷰 앱 구현을 보여줘요.
| 프로젝트 | 구성 파일 |
|---|---|
| NGINX | .gitlab-ci.yml |
| OpenShift | .gitlab-ci.yml |
| HashiCorp Nomad | .gitlab-ci.yml |
| GitLab Documentation | build.gitlab-ci.yml |
| https://about.gitlab.com/ | .gitlab-ci.yml |
| GitLab Insights | .gitlab-ci.yml |
다른 리뷰 앱 예시:
라우트 맵 (Route maps)
라우트 맵을 사용하면 소스 파일에서 리뷰 앱 환경의 해당 공개 페이지로 바로 이동할 수 있어요. 이 기능은 머지 리퀘스트에서 특정 변경 사항을 미리 보는 것을 더 쉽게 만들어 줘요.
구성하면 라우트 맵이 매핑 패턴과 일치하는 파일의 리뷰 앱 버전을 볼 수 있게 하는 컨텍스트 링크를 추가해요. 이 링크는 다음에 나타나요.
- 머지 리퀘스트 위젯.
- 커밋 및 파일 보기.
라우트 맵 구성하기
라우트 맵을 설정하려면:
- 저장소에
.gitlab/route-map.yml파일을 만들어요. - 소스 경로(저장소의)와 공개 경로(리뷰 앱 인프라 또는 웹사이트의) 사이의 매핑을 정의해요.
라우트 맵은 각 항목이 source 경로를 public 경로에 매핑하는 YAML 배열이에요.
라우트 맵의 각 매핑은 다음 형식을 따라요.
- source: 'path/to/source/file' # Source file in repository
public: 'path/to/public/page' # Public page on the website
두 가지 유형의 매핑을 사용할 수 있어요.
- 정확히 일치: 작은따옴표로 묶인 문자열 리터럴
- 패턴 일치: 슬래시로 묶인 정규 표현식
정규 표현식으로 패턴 일치를 사용할 때:
- 정규식은 전체 소스 경로와 일치해야 해요(
^와$앵커가 암시됨). public경로에서 참조할 수 있는 캡처 그룹()를 사용할 수 있어요.- 캡처 그룹은 발생 순서대로
\N표현식을 사용해 참조해요(\1,\2등).
더 알아보기
리뷰 앱의 기반이 되는 동적 환경과 환경 중지/배포 동작을 이해해 두면 리뷰 앱을 더 자유롭게 다룰 수 있어요. Kubernetes 위에서 자동으로 설정하고 싶다면 Auto DevOps 문서도 함께 읽어보는 걸 추천해요.