엔드투엔드 테스트 파이프라인
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]
: 작업을 항상manual
로 설정하는 최종 규칙. 따라서 선택적 테스트 실행에 의해 실행되지 않더라도 필요에 따라 여전히 실행할 수 있습니다.
위의 예를 고려하여 새로운 작업을 만들려면 다음 단계를 수행합니다:
-
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 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]
병렬 작업
선택적 실행이 여러 병렬 작업을 실행해야 하는 작업 유형과 올바르게 작동하려면 일반적으로 job 정의를 병렬 및 선택적 형태로 분할해야 합니다. 분할은 선택적 실행이 하나의 특정 사양만 실행할 때 여러 개의 불필요한 작업이 생성되지 않도록 해야 하기 때문에 필요합니다. 예를 들면:
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
자식 파이프라인은 Review Apps 또는 e2e:package-and-test
보다 빠르게 종단간 테스트를 실행하여 GitLab 플랫폼의 개발을 지원합니다.
이를 위해 GitLab Development Kit(GDK)에서 테스트를 실행하여 일반적으로 Omnibus GitLab에 대비해 더 짧은 시간에 빌드 및 설치할 수 있습니다. 이에 따라 GDK를 사용하면 개발 환경인 반면, Omnibus GitLab은 프로덕션 설치에 사용할 수 있습니다. GDK에서 실행되는 테스트는 프로덕션 환경에서 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 인스턴스에 대해 종단간 테스트를 실행합니다.
보고서
이 단계는 allure test 보고서를 생성하는 데 책임이 있습니다.
e2e:test-on-cng
e2e:test-on-cng
자식 파이프라인은 Cloud Native GitLab 설치에 대한 테스트를 실행합니다.
review-apps
과 달리 이 파이프라인은 로컬 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
단계의 작업은 다음 작업을 수행합니다:
보고서
이 단계는 allure test 보고서 생성 및 테스트 메트릭 업로드에 책임이 있습니다.