- 리뷰 앱에서의 E2E 테스트 실행
- 성능 메트릭
- 리뷰 앱용 샘플 데이터
- 진행 방법
- 작동 방식은 무엇인가요?
- 클러스터 구성
- 비정상적인 리뷰 앱 릴리스 진단
- 자주 묻는 질문
- 기타 리소스
GitLab에서 리뷰 앱 사용하기
리뷰 앱은 start-review-app-pipeline
작업을 사용하여 배포되며, 이는 리뷰 앱을 배포하는 데 필요한 여러 작업을 수행하는 일련의 작업을 포함하는 자식 파이프라인을 트리거합니다.
다음 시나리오 중 하나에 해당하는 경우 start-review-app-pipeline
작업이 자동으로 시작됩니다(병합 요청이 승인된 경우에만):
- CI 구성 변경이 있는 병합 요청의 경우
- 프론트엔드 변경이 있는 병합 요청의 경우
-
{,ee/,jh/}{app/controllers}/**/*
에 변경 사항이 있는 병합 요청의 경우 -
{,ee/,jh/}{app/models}/**/*
에 변경 사항이 있는 병합 요청의 경우 -
{,ee/,jh/}lib/{,ee/,jh/}gitlab/**/*
에 변경 사항이 있는 병합 요청의 경우 - QA 변경이 있는 병합 요청의 경우
- 예약된 파이프라인의 경우
- MR에
pipeline:run-review-app
라벨이 설정된 경우
리뷰 앱에서의 E2E 테스트 실행
qa
단계의 모든 파이프라인에서(review
단계 이후) review-qa-smoke
및 review-qa-blocking
작업이 자동으로 시작됩니다.
qa
단계에는 다음과 같은 작업이 포함됩니다:
-
review-qa-smoke
: GitLab의 핵심 기능을 검증하기 위한 소규모이고 빠른 테스트의 하위 집합 -
review-qa-blocking
: 병합 요청을 차단하는 테스트의 하위 집합 -
review-qa-non-blocking
: 수동으로 트리거할 수 있는 나머지 e2e 테스트
review-qa-*
작업은 병합 요청의 변경 사항에 대한 엔드 투 엔드 테스트가 실제 환경에서 통과하는지 확인합니다. 이를 통해 e2e 실패 사항을 병합 요청이 아니라 프로덕션까지의 환경에서 식별하여 GitLab.com의 기능을 망가뜨리거나 GitLab.com 배포를 차단하는 데 드는 비용을 줄일 수 있습니다. 필요한 경우, review-qa-*
실패 사례는 오류의 근본 원인을 결정하는 데 도움을 주기 위해 SET(테스트의 소프트웨어 엔지니어) 동료와 함께 조사해야 합니다.
엔드 투 엔드 테스트 실행이 완료되면 Allure 보고서가 생성되어 e2e-test-report
작업에 의해 게시됩니다. 보고서에 대한 링크가 병합 요청에 추가됩니다.
오류는 gitlab-review-apps
Sentry 프로젝트에서 찾을 수 있으며, 리뷰 앱 URL로 필터링할 수 있습니다(여기) 또는 커밋 SHA로 필터링할 수 있습니다(여기).
실패한 리뷰 앱 배포를 우회하여 깨진 master
수정하기
유지 관리자는 리뷰 앱 배포 실패로 파이프라인이 차단된 상태에서 고객 중요 병합 요청을 병합하는 깨진 master
병합 프로세스를 사용할 수 있습니다.
성능 메트릭
qa
단계의 모든 리뷰 앱 자식 파이프라인에서 browser_performance
작업이 자동으로 시작됩니다. 이 작업은 Sitespeed.io Container를 사용하여 기본 브라우저 성능 테스트를 수행합니다.
리뷰 앱용 샘플 데이터
리뷰 앱을 배포하면 sample-gitlab-project
템플릿 프로젝트에서 프로젝트 데이터가 생성됩니다. 이는 수동 및 탐색적 테스트를 용이하게 하기 위해 사전에 채워진 리소스로 프로젝트를 제공하기 위한 것입니다.
샘플 프로젝트는 root
사용자 네임스페이스에 생성되며 해당 사용자의 개인 프로젝트 목록에서 액세스할 수 있습니다.
진행 방법
깨끗한 상태에서 리뷰 앱 재배포하기
리뷰 앱 리셋하고 깨끗한 상태에서 재배포하려면 다음을 수행하세요:
-
review-stop
작업 실행 -
review-deploy
작업 실행 또는 다시 시도
이를 통해 이전에 배포된 리뷰 앱의 모든 기존 데이터가 제거됩니다.
GCP 리뷰 앱 클러스터에 액세스하기
gcp-review-apps-dev
GCP 그룹 및 역할에 대한 액세스 요청을 열어야 합니다(내부 링크).
다음과 같은 권한이 부여됩니다:
-
Pod 로그 검색. 뷰어(
roles/viewer
)에 의해 부여됨. -
Rails 콘솔 실행. Kubernetes Engine Developer(
roles/container.pods.exec
)에 의해 부여됨.
내 리뷰 앱에 로그인하기
GitLab 팀 멤버 전용. 리뷰 앱에 로그인하려면 공유 1Password 계정에 대한 GitLab 핸드북 정보를 확인하세요.
- 기본 사용자 이름은
root
입니다. - 암호는
GitLab EE Review App
이라는 1Password 로그인 항목에서 찾을 수 있습니다.
리뷰 앱용 기능 플래그 활성화
- 리뷰 앱을 열고 위에 설명된대로 로그인합니다.
- 개인 액세스 토큰을 생성합니다.
- 기능 플래그 API를 사용하여 기능 플래그를 활성화합니다.
내 리뷰 앱 슬러그 찾기
-
review-deploy
작업을 엽니다. -
** Deploying review-*
를 찾습니다. - 예를 들어,
** Deploying review-1234-abc-defg... **
의 경우 해당 리뷰 앱 슬러그는 이 경우에review-1234-abc-defg
입니다.
Rails 콘솔 실행
- 먼저 클러스터에 액세스할 수 있는지 및
container.pods.exec
권한이 있는지 확인합니다. -
리뷰 앱 슬러그로 워크로드 필터링합니다. 예를 들어,
review-qa-raise-e-12chm0
. -
toolbox
배포를 찾아 엽니다. 예를 들어,review-qa-raise-e-12chm0-toolbox
. - “관리되는 팟” 섹션에서 팟을 선택합니다. 예를 들어,
review-qa-raise-e-12chm0-toolbox-d5455cc8-2lsvz
. -
KUBECTL
드롭다운 목록을 선택한 다음Exec
->toolbox
를 선택합니다. - 기본 명령에서
-c toolbox -- ls
를-it -- gitlab-rails console
로 변경합니다.- 또는
kubectl exec --namespace review-qa-raise-e-12chm0 review-qa-raise-e-12chm0-toolbox-d5455cc8-2lsvz -it -- gitlab-rails console
를 실행하고,-
review-qa-raise-e-12chm0-toolbox-d5455cc8-2lsvz
를 자신의 팟 이름으로 대체합니다.
-
- 또는
Pod의 로그 살펴보기
- 먼저 GCP 리뷰 앱 클러스터에 액세스하고
container.pods.getLogs
권한이 있는지 확인하세요. -
리뷰 앱 슬러그로 워크로드 필터링하세요. 예를 들면
review-qa-raise-e-12chm0
입니다. -
migrations
Deployment를 찾고 엽니다. 예를 들면review-qa-raise-e-12chm0-migrations.1
입니다. - “Managed pods” 섹션에서 Pod를 선택하세요. 예를 들면
review-qa-raise-e-12chm0-migrations.1-nqwtx
입니다. -
Container logs
를 선택하세요.
또는 Logs Explorer를 사용하여 로그를 더욱 쉽게 검색할 수 있습니다. Pod 이름에 대한 예시 쿼리는 다음과 같습니다:
resource.labels.pod_name:"review-qa-raise-e-12chm0-migrations"
작동 방식은 무엇인가요?
CI/CD 아키텍처 다이어그램
상세한 설명
- 모든 파이프라인에서
prepare
단계 중에,compile-production-assets
작업이 자동으로 시작됩니다.- 작업이 완료되면,
review-build-cng
작업이 시작됩니다. 이후 단계에서 트리거된CNG-mirror
파이프라인이 이에 의존하기 때문입니다.
- 작업이 완료되면,
-
compile-production-assets
작업이 완료되면,review-build-cng
작업이 파이프라인을 트리거합니다.-
review-build-cng
작업은 자동으로 시작되며, MR에 CI 또는 프론트엔드 변경이 포함되어 있는 경우에만 자동으로 시작됩니다. -
CNG-mirror
파이프라인은 커밋 기반으로 각 구성 요소(예:gitlab-rails-ee
,gitlab-shell
,gitaly
등)의 Docker 이미지를 생성하고, 이를 레지스트리에 저장합니다. - 우리는
CNG-mirror
프로젝트를 사용하여CNG
(Cloud Native GitLab) 프로젝트의 레지스트리가 많은 일시적인 Docker 이미지로 과부하되지 않도록 합니다.
-
-
review-build-cng
작업이 완료되면,review-deploy
작업이 공식 GitLab Helm 차트를 사용하여 리뷰 앱을 GCP에 있는review-apps
Kubernetes 클러스터에 배포합니다.- 리뷰 앱을 배포하는 데 사용된 스크립트는
scripts/review_apps/review-apps.sh
에서 찾을 수 있습니다. - 이러한 스크립트는 기본적으로
공식 Auto DevOps 스크립트입니다. 여기서
기본 CNG 이미지를
CNG-mirror
프로젝트 레지스트리에 덮어쓰기합니다. - 공식 GitLab Helm 차트를 사용하므로 브랜치별로 매우 가깝지만 프로덕션과 유사한 전용 환경을 얻을 수 있습니다.
- 각 리뷰 앱은 고유한 브랜치별로 고유한 Kubernetes 네임스페이스에 배포됩니다. 이 네임스페이스는 각 브랜치에 대해 고유한 리뷰 앱 슬러그를 바탕으로 합니다.
- 리뷰 앱을 배포하는 데 사용된 스크립트는
-
review-deploy
작업이 성공하면, MR 위젯에서 해당 리뷰 앱에 대한 직접적인 링크를 통해 리뷰 앱을 사용할 수 있어야 합니다. 리뷰 앱에 로그인하려면 아래의 “리뷰 앱으로 로그인하는 방법?”을 참조하세요.
추가 참고 사항:
-
review-deploy
작업이 계속 실패하는 경우(수동 재시도가 도움이 되지 않는 경우),#g_qe_engineering_productivity
채널에 메시지를 게시하고/또는 병합 요청에 대한 링크가 포함된~"Engineering Productivity"
~"ep::review apps"
~"type::bug"
이슈를 생성하세요. 배포 실패는 병합 요청에서 실제로 도입된 실제 문제를 나타낼 수 있습니다 (즉, 이것이 일시적인 실패이지 않을 수 있음)! -
review-qa-smoke
작업이 계속 실패하는 경우(이미 한 번 다시 시도했음), 작업 로그를 확인하세요: 병합 요청에서 실제로 도입된 문제를 발견할 수 있습니다. 실패한 시점의 페이지 스크린샷을 확인하려면, 아티팩트를 다운로드할 수도 있습니다. 실패의 원인을 찾지 못하거나 변경 사항과 관련이 없는 것으로 보인다면,#test-platform
채널에 메시지를 게시하고/또는 링크가 포함된 ~Quality ~"type::bug" 이슈를 생성하세요. - 수동
review-stop
은 리뷰 앱을 수동으로 중지하는 데 사용될 수 있으며, 또한 병합 요청 브랜치가 병합된 후에 삭제될 때 GitLab에서 시작됩니다. - Kubernetes 클러스터는
GitLab Kubernetes 통합을 사용하여
gitlab
프로젝트에 연결됩니다. 이를 통해 병합 요청 위젯에서 리뷰 앱에 직접적인 링크를 갖게 됩니다.
리뷰 앱의 자동 중지
리뷰 앱은 환경 자동 중지 기능 덕분에 마지막 배포 후 2일 후 자동으로 중지됩니다.
리뷰 앱을 더 오래 유지해야 하는 경우 환경을 고정하거나 review-deploy
작업을 다시 시도하여 “최신 배포 시간”을 업데이트할 수 있습니다.
예약된 파이프라인에서 자동으로 실행되는 review-cleanup
작업은 5일 후 구식 리뷰 앱을 중지시키고, 6일 후에 그들의 환경을 삭제하며, 7일 후에 매달린 Helm 릴리스와 Kubernetes 리소스를 정리합니다.
클러스터 구성
클러스터는 engineering-productivity-infrastructure
프로젝트에서 Terraform을 통해 구성됩니다.
노드 풀 이미지 유형은 Container-Optimized OS (cos)
여야 합니다. Container-Optimized OS with Containerd (cos_containerd)
가 아니어야 하는데, 이는 GitLab Runner의 Kubernetes 실행기에 대한 알려진 문제 때문입니다.
Helm
사용된 Helm 버전은 review-deploy
와 review-stop
작업에서 사용되는 registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-helm3.5-kubectl1.17
이미지에서 정의됩니다.
비정상적인 리뷰 앱 릴리스 진단
리뷰 앱 안정성이 저하되면 review-apps
클러스터가 비정상적일 수 있음을 나타냅니다.
선행 지표는 다시 시작으로 이어지는 건강 확인 실패 또는 리뷰 앱 배포의 대다수 실패일 수 있습니다.
리뷰 앱 개요 대시보드는 클러스터의 부하 급증을 확인하는 데 도움이 되며, 노드에 문제가 있는지 또는 전체 클러스터가 건강하지 못한 방향으로 추이되고 있는지 확인할 수 있습니다.
리뷰 앱 릴리스의 문제 해결은 Engineering Productivity Runbook의 리뷰 앱 페이지에서 확인할 수 있습니다.
자주 묻는 질문
매 테스트 실행마다 CNG 이미지 빌드를 트리거하는 것은 너무 많지 않습니까? 수천 개의 사용되지 않는 Docker 이미지가 생성됩니다.
우리는 어딘가에서 시작해야 하며 나중에 개선할 것입니다. 또한 이러한 Docker 이미지를 저장하기 위해 CNG-mirror 프로젝트를 사용하고, 언젠가 레지스트리를 삭제하고 새로운 깨끗한 레지스트리를 사용할 수 있도록 합니다.
이것을 남용으로부터 어떻게 보호하나요? 앱은 전 세계에 공개되어 있으므로 우리만 사용할 수 있도록 제한하는 방법을 찾아야 합니다.
Fork에 대해서는 활성화되어 있지 않습니다.
기타 리소스
- CE/EE를 위한 리뷰 앱 통합 (프레젠테이션)
- 안정성 이슈