Pipelines
You can use a pipelines section to simplify your configuration. By default tasks run in the order they are defined, but the addition of pipeline configuration disables this behaviour, and instead the pipelines become responsible for defining the task sequence.
In the following example two pipelines are created, and used to control which tasks are run.
tasks:
images:
# ...
migrations:
# ...
deployment:
# ...
pipelines:
- name: Production
condition: 'code_reference.branch in ["uat", "production"]'
tasks: [ images, deployment ]
- name: Staging
condition: '"Ready for review" in pull_request.labels'
tasks: [ images, migrations, deployment ]
Branches with “uat” or “production” in their name will be routed to the Production pipeline, where the images and deployment tasks will be run during the build. Branches that have the label “Ready for review” will be routed to the “Staging” pipeline, where the images, migrations and deployment tasks will be run during the build.
Overriding Variables
Pipelines can be used to override variables:
variables:
- name: SYMFONY_ENV
value: prod
tasks:
images:
# ...
migrations:
# ...
deployment:
# ...
pipelines:
- name: Production
condition: 'code_reference.branch in ["uat", "production"]'
tasks: [ images, deployment ]
- name: Staging
condition: '"Ready for review" in pull_request.labels'
tasks: [ images, migrations, deployment ]
variables:
- name: SYMFONY_ENV
value: dev
Here the SYMFONY_ENV variable is set to “prod”, but is overridden within the “Staging” pipeline and set to “dev”.
Overriding Tasks
Pipelines can also be used to override tasks.
In the following configuration a deployment task has been defined, which disables HTTPS traffic. There are also two pipelines which run the task.
tasks:
images:
# ...
migrations:
# ...
deployment:
deploy:
services:
web:
specification:
environment_variables:
- name: WEB_HTTPS
value: false
pipelines:
- name: Production
condition: 'code_reference.branch in ["uat", "production"]'
tasks: [ images, deployment ]
- name: Staging
condition: '"Ready for review" in pull_request.labels'
tasks: [ images, migrations, deployment ]
To override the task within a pipeline, you can import it using imports, then make any changes you need to. In the below example the Production pipeline overrides environment_variables within the deployment task to enable HTTPS traffic:
tasks:
images:
# ...
migrations:
# ...
deployment:
deploy:
services:
web:
specification:
environment_variables:
- name: WEB_HTTPS
value: false
pipelines:
- name: Production
condition: 'code_reference.branch in ["uat", "production"]'
tasks:
- images
- imports: deployment
deploy:
services:
web:
specification:
environment_variables:
- name: WEB_HTTPS
value: true
- name: Staging
condition: '"Ready for review" in pull_request.labels'
tasks: [ images, migrations, deployment ]