Environment selection

Some tests are designed to be run against specific environments or pipelines. We can specify what environments or pipelines to run tests against using the only metadata.

Available switches

Switch Function Type
tld Set the top-level domain matcher String
subdomain Set the subdomain matcher Array or String
domain Set the domain matcher String
production Match against production Static
pipeline Match against a pipeline Array or Static

WARNING: You cannot specify :production and { <switch>: 'value' } simultaneously. These options are mutually exclusive. If you want to specify production, you can control the tld and domain independently.

Examples

Environment or pipeline Key Matches (regex for environments, string matching for pipelines)
any `` .+.com
gitlab.com only: :production gitlab.com
staging.gitlab.com only: { subdomain: :staging } (staging).+.com
gitlab.com and staging.gitlab.com only: { subdomain: /(staging.)?/, domain: 'gitlab' } (staging.)?gitlab.com
dev.gitlab.org only: { tld: '.org', domain: 'gitlab', subdomain: 'dev' } (dev).gitlab.org
staging.gitlab.com & domain.gitlab.com only: { subdomain: %i[staging domain] } `(staging
nightly only: { pipeline: :nightly } "nightly"
nightly, canary only: { pipeline: [:nightly, :canary] } "nightly" and "canary"
RSpec.describe 'Area' do
  it 'runs in any environment or pipeline' do; end

  it 'runs only in production environment', only: :production do; end

  it 'runs only in staging environment', only: { subdomain: :staging } do; end

  it 'runs in dev environment', only: { tld: '.org', domain: 'gitlab', subdomain: 'dev' } do; end

  it 'runs in prod and staging environments', only: { subdomain: /(staging.)?/, domain: 'gitlab' } {}

  it 'runs only in nightly pipeline', only: { pipeline: :nightly } do; end

  it 'runs in nightly and canary pipelines', only: { pipeline: [:nightly, :canary] } do; end
end

If the test has a before or after, you must add the only metadata to the outer RSpec.describe.

If you want to run an only: { :pipeline } tagged test on your local GDK make sure either the CI_PROJECT_NAME environment variable is unset, or that the CI_PROJECT_NAME environment variable matches the specified pipeline in the only: { :pipeline } tag, or just delete the only: { :pipeline } tag.

Quarantining a test for a specific environment

Similarly to specifying that a test should only run against a specific environment, it's also possible to quarantine a test only when it runs against a specific environment. The syntax is exactly the same, except that the only: { ... } hash is nested in the quarantine: { ... } hash. For instance, quarantine: { only: { subdomain: :staging } } only quarantines the test when run against staging.