let's say we have two projects A and B on GitLab, and I want a rule that allows a downstream job defined in project B to only run when it's triggered by a trigger in project A.
Project A gitlab-ci.yml:
stages:
- build
build_container:
stage: build
trigger:
project: B
Project B gitlab-ci.yml:
build:
stages:
- build
rules: only run this job when it's triggered by project A
script: commands to build something
If you use trigger, all variables defined in the yaml of project A are passed to your project B. You could check this variable then within an advanced only
statement in project B. https://docs.gitlab.com/ee/ci/jobs/job_control.html#only-variables--except-variables-examples)
project A
stages:
- build
build_container:
stage: build
variables:
UPSTREAM_PROJECT: A
trigger:
project: B
project B
stages:
- build
build:
stage: build
script:
- // do something
only:
variables:
- $UPSTREAM_PROJECT == "A"
Besides using only
to verify if the variable is existing, you could also manually check the variable within the script
build:
stage: build
script:
- |
if [ "$UPSTREAM_PROJECT" == "A" ]; then
// do something
fi