# This pipeline runs E2E tests against CNG build which is deployed via helm chart on a job local kind kubernetes cluster include: - local: .gitlab/ci/cng/main.gitlab-ci.yml - local: .gitlab/ci/qa-common/main.gitlab-ci.yml - local: .gitlab/ci/qa-common/variables.gitlab-ci.yml - local: .gitlab/ci/qa-common/rules.gitlab-ci.yml workflow: rules: - when: always .cng-test: image: "${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}:git-2.36-lfs-2.9-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}-kubectl-1.23-helm-3.14-kind-0.20" stage: test extends: - .qa-cache - .docker-in-docker - .qa-run-e2e-with-bundler needs: - build-cng tags: - e2e variables: FF_NETWORK_PER_BUILD: "true" NAMESPACE: gitlab KUBECONFIG: /root/.kube/config BUNDLE_WITHOUT: development GITLAB_USERNAME: root GITLAB_PASSWORD: 5iveL!fe GITLAB_ADMIN_USERNAME: root GITLAB_ADMIN_PASSWORD: 5iveL!fe GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN RSPEC_LAST_RUN_RESULTS_FILE: "$CI_PROJECT_DIR/qa/tmp/examples.txt" QA_DOCKER_NETWORK: host QA_GENERATE_ALLURE_REPORT: "true" QA_CAN_TEST_PRAEFECT: "false" QA_ALLOW_LOCAL_REQUESTS: "true" QA_SUITE_STATUS_ENV_FILE: $CI_PROJECT_DIR/suite_status.env # disable selective test execution until pipeline setup is implemented to support it correctly KNAPSACK_TEST_FILE_PATTERN: "" QA_TESTS: "" before_script: - echo "SUITE_RAN=true" > "$QA_SUITE_STATUS_ENV_FILE" # save extra values to be available for after_script if created dynamically - echo "${EXTRA_DEPLOY_VALUES}" > $CI_PROJECT_DIR/EXTRA_DEPLOY_VALUES - export GITLAB_DOMAIN="$(getent hosts docker | awk '{ print $1 }' | head -n1).nip.io" - export QA_GITLAB_URL="http://gitlab.${GITLAB_DOMAIN}" - cd qa && bundle install - | bundle exec cng create deployment "${DEPLOYMENT_TYPE}" \ --gitlab-domain "${GITLAB_DOMAIN}" \ --timeout 5m \ --admin-password "${GITLAB_ADMIN_PASSWORD}" \ --admin-token "${GITLAB_QA_ADMIN_ACCESS_TOKEN}" \ --chart-sha "${GITLAB_HELM_CHART_REF}" \ --ci \ ${EXTRA_DEPLOY_VALUES} after_script: - | if [ "$CI_JOB_STATUS" == "failed" ]; then echo "SUITE_FAILED=true" >> "$QA_SUITE_STATUS_ENV_FILE" fi - cd qa - bundle exec cng log events --save - bundle exec cng log pods --save --containers all --no-fail-on-missing-pods # This command prints all the necessary arguments to be able to recreate the same deployment as on CI - | bundle exec cng create deployment "${DEPLOYMENT_TYPE}" \ --chart-sha "${GITLAB_HELM_CHART_REF}" \ --ci \ --print-deploy-args \ $(cat $CI_PROJECT_DIR/EXTRA_DEPLOY_VALUES) artifacts: expire_in: 1 day when: always reports: junit: qa/tmp/rspec-*.xml dotenv: $QA_SUITE_STATUS_ENV_FILE paths: - qa/tmp - ${CI_PROJECT_DIR}/qa/*.log .cng-test-parallel: extends: .cng-test needs: - build-cng - download-knapsack-report parallel: 5 # ========================================== # Pre stage # ========================================== build-cng-env: stage: .pre extends: .build-cng-env build-cng: stage: .pre extends: .build-cng needs: [build-cng-env] # quality specific fork, see: https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2839 trigger: project: ${CI_PROJECT_NAMESPACE}/quality/quality-engineering/CNG-mirror branch: $TRIGGER_BRANCH strategy: depend download-knapsack-report: extends: - .download-knapsack-report - .ruby-image - .qa-cache - .rules:download-knapsack variables: GIT_STRATEGY: clone before_script: - cd qa && bundle install after_script: [] # ========================================== # Test stage # ========================================== cng-instance: extends: .cng-test-parallel variables: DEPLOYMENT_TYPE: kind allow_failure: true # Test run against environment with minimum supported redis version defined in lib/system_check/app/redis_version_check.rb cng-qa-min-redis-version: extends: .cng-test variables: DEPLOYMENT_TYPE: kind QA_RSPEC_TAGS: --tag health_check before_script: - | redis_version=$(awk -F "=" "/MIN_REDIS_VERSION =/ {print \$2}" $CI_PROJECT_DIR/lib/system_check/app/redis_version_check.rb | sed "s/['\" ]//g") export EXTRA_DEPLOY_VALUES="--set redis.image.tag=${redis_version%.*}" - !reference [.cng-test, before_script] # ========================================== # Post test stage # ========================================== e2e-test-report: extends: .rules:report:allure-report variables: ALLURE_REPORT_RESULTS_GLOB: "qa/tmp/allure-results" export-test-metrics: extends: - .export-test-metrics - .rules:report:process-results variables: QA_METRICS_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/test-metrics-*.json notify-slack: extends: - .notify-slack - .rules:report:process-results variables: QA_RSPEC_XML_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/rspec-*.xml upload-knapsack-report: extends: - .upload-knapsack-report - .rules:report:process-results variables: QA_KNAPSACK_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/knapsack/*/*.json