End-to-end 테스트 파이프라인
e2e:package-and-test
e2e:package-and-test
하위 파이프라인은 GitLab 플랫폼의 E2E 테스트의 주요 실행기입니다. 파이프라인 정의에는 통합 요청 파이프라인에서 실행되는 테스트의 수를 줄이는 여러 동적 컴포넌트가 있습니다.
설정
파이프라인 설정은 다음으로 구성됩니다:
- 메인 GitLab 파이프라인의
prepare
단계에 있는e2e-test-pipeline-generate
작업입니다. -
qa
단계에 있는e2e:package-and-test
작업으로,omnibus
패키지를 빌드하고 E2E 테스트를 실행하는 하위 파이프라인을 트리거합니다.
e2e-test-pipeline-generate
이 작업은 선택적 테스트 실행을 구현하는 두 가지 컴포넌트로 구성됩니다:
-
detect_changes
Rake 작업은 특정 통합 요청 파이프라인에서 실행되어야 하는 e2e 스펙을 결정합니다. 이 작업은 특정 통합 요청의 변경 사항을 분석하고 실행해야 할 스펙을 결정합니다. 이를 통해 각 시나리오의dry-run
이 실행되어 시나리오가 실행 가능한 테스트를 포함하고 있는지 확인합니다. 선택적 테스트 실행은 이러한 기준을 사용하여 실행해야 하는 특정 테스트를 결정합니다. -
generate-e2e-pipeline
이 실행되어 적절한 환경 변수가 포함된 하위 파이프라인 YAML 정의 파일을 생성합니다.
e2e:package-and-test
E2E 테스트 실행 파이프라인은 E2E 테스트의 실행을 지원하는 여러 단계로 구성되어 있습니다.
.pre
이 단계는 다음과 같은 작업을 수행합니다:
-
병렬 테스트 실행을 지원하는
knapsack
보고서를 가져옵니다. -
omnibus-gitlab
도커 이미지를 빌드하는 하위 파이프라인을 트리거합니다.
test
이 단계는 다양한 유형의 GitLab 구성에 대해 e2e 테스트를 실행합니다. 실행되는 작업의 수는 e2e-test-pipeline-generate
작업에 의해 동적으로 결정됩니다.
report
이 단계는 allure 테스트 보고서 생성을 담당합니다.
새 작업 추가
선택적 테스트 실행은 각 작업 정의에 있는 규칙 세트에 의존합니다. 일반적인 작업에는 다음과 같은 속성이 포함되어 있습니다:
variables:
QA_SCENARIO: Test::Integration::MyNewJob
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::MyNewJob/
- !reference [.rules:test:manual, rules]
예를 들어:
-
QA_SCENARIO: Test::Integration::MyNewJob
:gitlab-qa
실행기에 전달되는 시나리오 클래스의 이름입니다. -
!reference [.rules:test:qa, rules]
: 모든 테스트를 실행해야 하는 파이프라인에 매치되는 주요 규칙 정의입니다. 예를 들어,qa
프레임워크에 변경이 있는 경우. -
if: $QA_SUITES =~ /Test::Integration::MyNewJob/
: 선택적 테스트 실행을 담당하는 주요 규칙입니다.QA_SUITE
는qa 프레임워크
에 위치한 시나리오 추상화의 이름입니다.QA_SUITE
는gitlab-qa
실행기에 전달되는QA_SCENARIO
와 동일하지 않습니다. 일관성을 유지하기 위해 일반적으로 동일한 이름을 가집니다.QA_SUITE
추상화 클래스에는 일반적으로 실행할 태그 및 선택적으로 일부 추가 설정 단계에 대한 정보가 포함됩니다. -
!reference [.rules:test:manual, rules]
: 항상 일치하고 작업을 매뉴얼으로 설정하여 선택적 테스트 실행에 의해 실행되지 않더라도 필요한 경우 실행할 수 있도록 작업을 설정하는 최종 규칙입니다.
위의 예를 고려하면 새로운 작업을 만들기 위해 다음 단계를 수행합니다:
-
gitlab-qa
프로젝트의integration
디렉터리에my_new_job.rb
와 같은 새로운 시나리오 유형을 생성하고 새 버전을 릴리스하여 일반적으로 사용할 수 있도록 합니다. -
qa
프레임워크의integration
디렉터리에my_new_job.rb
와 같은 새로운 시나리오를 생성합니다. 가장 간단한 경우에는 이 시나리오가 실행해야 할 RSpec 태그를 정의합니다.module QA module Scenario module Test module Integration class MyNewJob < Test::Instance::All tags :some_special_tag end end end end
-
main.gitlab-ci.yml
파이프라인 정의에 새 작업을 추가합니다:ee:my-new-job: extends: .qa variables: QA_SCENARIO: Test::Integration::MyNewJob rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::MyNewJob/ - !reference [.rules:test:manual, rules]
병렬 작업
병렬 실행이 필요한 작업 유형에서 선택적 실행이 올바르게 작동하려면 작업 정의를 일반적으로 병렬 및 선택적 변형으로 분리해야 합니다. 예를 들어, 선택적 실행이 하나의 스펙만 실행할 때 여러 불필요한 작업을 생성하지 않도록 분리가 필요합니다. 예를 들면:
ee:my-new-job-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::MyNewJob
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Integration::MyNewJob/
ee:my-new-job:
extends:
- .parallel
- ee:my-new-job-selective
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Integration::MyNewJob/
e2e:test-on-gdk
e2e:test-on-gdk
자식 파이프라인은 e2e:package-and-test
나 리뷰 앱보다 빠른 종단간 테스트 실행을 통해 엔지니어들에게 GitLab 플랫폼 개발을 지원합니다.
이는 GitLab Development Kit(GDK)에서 테스트를 실행하여 달성됩니다. GDK를 사용하면 Omnibus GitLab에 대한 테스트보다 더 적은 시간에 이미지를 빌드하고 설치할 수 있습니다. 단점은 Omnibus GitLab이 프로덕션 설치에 사용될 수 있지만, GDK는 개발 환경일 뿐입니다. GDK에서 실행되는 테스트는 GitLab이 공식 설치 패키지에 일환으로 예비 컴파일된 에셋, 다중 서버에 GitLab 서비스를 배포하는 구성 기본값 할당 등과 같은 프로덕션 환경에서 GitLab을 실행 준비하는 일부 과정에 의존하는 버그를 잡지 못할 수 있습니다. 반면, 일상적으로 GDK를 사용하는 엔지니어들은 GDK에서만 발생하는 버그를 자동으로 잡을 수 있습니다.
설정
파이프라인 설정은 주요 GitLab 파이프라인의 여러 작업으로 구성됩니다:
-
prepare
단계에서e2e-test-pipeline-generate
작업. 이 작업은e2e:package-and-test
파이프라인과 동일합니다. -
build-images
단계에서build-gdk-image
작업. -
qa
단계에서e2e:test-on-gdk
트리거 작업은 E2E 테스트를 실행하는 자식 파이프라인을 트리거합니다.
build-gdk-image
이 작업은 합병 요청의 코드를 사용하여 컨테이너에서 GDK 인스턴스를 시작하는 데 사용할 수 있는 Docker 이미지를 빌드합니다. 이미지는 컨테이너 레지스트리에 푸시됩니다.
이 작업은 또한 기본 브랜치의 파이프라인에서 GDK와 GitLab 구성요소가 포함된 기본 이미지를 빌드합니다. 이렇게 하면 합병 요청에서 전체 이미지를 다시 생성할 필요가 없습니다. 그러나 합병 요청에 특정 GitLab 컴포넌트 또는 코드에 변경 사항이 포함된 경우, 작업은 테스트 작업에서 사용될 이미지를 빌드하기 전에 기본 이미지를 다시 빌드합니다.
e2e:test-on-gdk
자식 파이프라인
e2e:package-and-test
파이프라인과 마찬가지로 e2e:test-on-gdk
파이프라인은 E2E 테스트 실행을 지원하는 여러 단계로 구성됩니다.
.pre
이 단계는 병렬 테스트 실행을 지원하는 knapsack
보고서를 가져오는 데 책임이 있습니다.
test
이 단계에서는 GitLab 구성의 다른 유형에 대한 e2e 테스트를 실행합니다. 실행되는 작업의 수는 e2e-test-pipeline-generate
작업에서 동적으로 결정됩니다.
각 작업은 build-gdk-image
작업에서 만든 GDK Docker 이미지에서 컨테이너를 시작한 다음 컨테이너에서 실행 중인 GDK 인스턴스에 대해 종단간 테스트를 실행합니다.
report
이 단계는 allure 테스트 보고서 생성을 책임집니다.
e2e:test-on-cng
e2e:test-on-cng
자식 파이프라인은 Cloud Native GitLab 설치에 대한 테스트를 실행합니다. 리뷰 앱
과 달리, 이 파이프라인은 로컬 kind Kubernetes 클러스터를 사용합니다.
현재 이 파이프라인은 매일 예약된 파이프라인에서 실행되며 주로 redis
의 최소 지원 버전과의 호환성을 테스트합니다.
설정
파이프라인 설정은 주요 GitLab 파이프라인의 여러 작업으로 구성됩니다:
-
compile-production-assets
및build-assets-image
작업은 CNG 빌드 파이프라인에 필요한 프론트엔드 에셋을 컴파일하는 데 책임이 있습니다. -
e2e-test-pipeline-generate
작업은e2e:test-on-cng
자식 파이프라인을 생성하는 데 책임이 있습니다.
e2e:test-on-cng
자식 파이프라인
자식 파이프라인은 E2E 테스트 실행을 지원하는 여러 단계로 구성됩니다.
.pre
-
build-cng-env
작업은 CNG 하위 파이프라인에 필요한 모든 환경 변수를 설정하는 데 책임이 있습니다. -
build-cng
작업은 모든 필요한 이미지를 빌드하는CNG
하위 파이프라인을 트리거합니다.
test
test
단계의 작업은 다음 작업을 수행합니다:
report
이 단계는 allure 테스트 보고서 생성 및 테스트 메트릭 업로드를 책임집니다.