Ability to split automation across multiple pipeline
Trigger pipelines through the API
Fire and forget
Launch pipeline in separate project
Load stages and jobs from a file using include
The preceding pipeline is upstream
The following pipeline is downstream
The pipeline triggering you is the upstream pipeline
The pipeline you trigger is the downstream pipeline
Relationship between pipelines in the above picture:
Users sees only their own tokens
Tokens of other users are hidden
Trigger owner must be able to either…
Modern alternative to trigger tokens
Launch pipeline in separate project
job_name:
trigger:
project: <path-to-project>
branch: main
trigger.branch
is optional
Child pipeline can be made from multiple files
include
supports local
for files in the same repository
Use project
/ref
/file
for files in other repositories
job_name:
trigger:
include: <relative-path-to-file>
job_name2:
trigger:
include:
- project: <path-to-project>
ref: main
file: <relative-path-to-file>
File must match /\.ya?ml$/
See chapter Triggers
Downstream pipelines inherit some variables
Job variables are passed on unless:
job_name:
inherit:
variables: false
Predefined variables must be redefined as job variables:
job_name:
variables:
my_var: ${CI_COMMIT_REF_NAME}
trigger:
#...
Do not redefined masked variables - they will not be masked
Upstream pipeline only waits for successful trigger
Wait for successul downstream pipeline using strategy
job_name:
trigger:
include: child.yaml
strategy: depend
Included file can also be generated before job start
generate:
script:
- |
cat <<EOF >child.yaml
test:
script:
- printenv
EOF
artifacts:
paths:
- child.yaml
use:
trigger:
include:
- artifact: child.yaml
job: generate
Requires Enterprise Edition Premium
Generate artifact and trigger child pipeline:
build_artifacts:
stage: build
script: echo "This is a test artifact!" >> artifact.txt
artifacts:
paths:
- artifact.txt
deploy:
stage: deploy
trigger:
include:
- local: path/to/child-pipeline.yml
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
Fetch artifact from parent pipeline
test:
stage: test
script: cat artifact.txt
needs:
- pipeline: $PARENT_PIPELINE_ID
job: build_artifacts
Only allow job variables to be passed to downstream pipelines:
variables:
GLOBAL_VAR: value
trigger-job:
inherit:
variables: false
variables:
JOB_VAR: value
trigger:
include:
- local: path/to/child-pipeline.yml