Run 'package-and-qa' tests as a child pipeline in Gitlab project

Following proposition from architectural bi weekly meeting:

Architectural change proposal for 'package-and-qa' pipeline: Currently the 'package-and-qa' pipeline is triggered 4 downstream pipelines deep. This makes it quite confusing and inconvenient to follow through. Proposal is to change the architecture of it and make it similar to the review-app pipeline and move into the gitlab project itself. Technical implementation also feeds into previous quarter OKR regarding common source of truth for all qa job definitions as it would require moving definitions of jobs to pipeline-common project

Such an approach should have several benefits:

  • Better test result integration in merge request pipelines, easier navigation etc.
  • We can properly freeze the state of whole pipeline chain thus resolving issues when security releases with older test code trigger latest state of gitlab-qa project/gem and it's pipeline setup
  • Easier testing and development of pipelines themselves
  • Implementation would require moving job definitions to pipeline-common thus achieving SSOT for all e2e test job definitions

Concerns:

  • Requires adding more test related CI environment variables currently stored in gitlab-qa-mirror project
  • Adding specific runner just for package-and-qa tests to Gitlab project (not actually sure if it's a concern)
  • Is there a performance penalty running more jobs in scope of single project even when using dedicated runner?

Potential final design graph:

graph TB
    A1 -.->|once done, can be triggered| A2
    A2 -.->|`build-package` job starts a child pipeline to build omnibus image| B1
    A2 -.->|`run-qa` job starts dynamically generated child pipeline once omnibus image is built.<br> waiting on omnibus is implemented using needs relation<br>to keep structure flat and readable| A3

subgraph "`gitlab-org/gitlab` pipeline"
    A1[`build-images` stage<br>`build-qa-image` and `build-assets-image` jobs]
    A2["`qa` stage<br>`build-package` job<br>`start-package-and-qa` job"]
    A3["`test` stage<br>`run-qa` jobs"]
    end

subgraph "`gitlab-org/build/omnibus-gitlab-mirror` pipeline"
    B1[`Trigger-docker` stage<br>`Trigger:gitlab-docker` jobs]
    end
Edited by andrey