Hi everyone,
On behalf of my team, I am super excited to announce our Deployment Pipeline feature is globally available now! ![]()
What is a Deployment Pipeline?
From the documentation:
When an environment’s deployment is triggered, Qovery executes what we call the
Deployment Pipeline. It basically defines which operation shall be performed to properly deploy every service defined within your environment (build, deploy, etc..)
A pipeline is composed of an ordered list of
Deployment Stages. Each Stage has an execution order assigned within the pipeline: If stage A has an execution order lower than stage B then B can be executed only if the execution of stage A is completed.
Each service of your environment belongs to one (and only one)
Deployment Stage. This allows you to define at which moment of the deployment pipeline a service should be deployed and thus respect any service inter-dependency (e.g. your front-end needs to be started after the back-end, your database needs to be started before your back-end etc..).
During the deployment, a service goes through the building and deployment phase (as explained here). The build and deploy operation of each service within a deployment stage can be executed in parallel (feature WIP)
How to configure your deployment order?
Web console
Note: to create or delete a stage, use the CLI at the moment.
CLI
- Install the Qovery CLI
- Authenticate yourself with
qovery auth - Set your context with
qovery context set
List stages
You can list all the stages of your environment by using the following command:
qovery environment stage list
Add a stage
You can add a new stage by using the following command:
qovery environment stage create -n <name> -d <description>
Note that the stage will be added at the end of the pipeline (the highest number)
Modify a stage
You can modify a stage by using the following command:
qovery environment stage edit -n <original name> --new-name <new name> --new-description <new description>
Delete a stage
You can modify a stage by using the following command:
qovery environment stage delete -n <name>
Change stage for a service
You can modify the stage associated with a service by using the following command:
qovery environment stage move -n <service name> --stage <stage name>
Example
By default, Qovery creates default stages for each of your environments. E.g. I have an environment with 7 services, and here are the default stages.
~ $ qovery environment stage list
# deployment stage 1: "DATABASE DEFAULT"
Rename me to avoid default/legacy ordering
Type | Name
DATABASE | Redis
DATABASE | DB
# deployment stage 2: "JOB DEFAULT"
Rename me to avoid default/legacy ordering
<no service>
# deployment stage 3: "CONTAINER DEFAULT"
Rename me to avoid default/legacy ordering
Type | Name
CONTAINER | Rabbitmq
# deployment stage 4: "APPLICATION DEFAULT"
Rename me to avoid default/legacy ordering
Type | Name
APPLICATION | Backend
APPLICATION | Frontend
APPLICATION | Pablo Backend App
APPLICATION | API gateway
The stages are DATABASE DEFAULT, JOB DEFAULT, CONTAINER DEFAULT and APPLICATION DEFAULT. So when I deploy this environment, the execution order will be:
DATABASE DEFAULT→RedisandDBwill be deployedJOB DEFAULT→ this stage has no service, so it will be skippedCONTAINER DEFAULT→Rabbitmqwill be built and deployed.APPLICATION DEFAULT→Backend,Frontend,Pablo Backend AppandAPI Gatewaywill be built and deployed.
If I want to build and deploy my Backend app before Frontend, Pablo Backend App and API Gateway, I can re-order all of this.
First, I want to rename all the stages
~ $ qovery environment stage edit -n "DATABASE DEFAULT" --new-name "first stage"
Stage updated successfully
~ $ qovery environment stage edit -n "JOB DEFAULT" --new-name "second stage"
Stage updated successfully
~ $ qovery environment stage edit -n "CONTAINER DEFAULT" --new-name "third stage"
Stage updated successfully
~ $ qovery environment stage edit -n "APPLICATION DEFAULT" --new-name "fourth stage"
Stage updated successfully
~ $ qovery environment stage list
# deployment stage 1: "first stage"
Type | Name
DATABASE | Redis
DATABASE | DB
# deployment stage 2: "second stage"
<no service>
# deployment stage 3: "third stage"
Type | Name
CONTAINER | Rabbitmq
# deployment stage 4: "fourth stage"
Type | Name
APPLICATION | Backend
APPLICATION | Frontend
APPLICATION | Pablo Backend App
APPLICATION | API gateway
Then I move Rabbitmq into the second stage and Backend into the third stage
~ $ qovery environment stage move -n Rabbitmq -s "second stage"
Application moved into stage "second stage"
~ $ qovery environment stage move -n Backend -s "third stage"
Application moved into stage "third stage"
~ $ qovery environment stage list
# deployment stage 1: "first stage"
Type | Name
DATABASE | Redis
DATABASE | DB
# deployment stage 2: "second stage"
Type | Name
CONTAINER | Rabbitmq
# deployment stage 3: "third stage"
Type | Name
APPLICATION | Backend
# deployment stage 4: "fourth stage"
Type | Name
APPLICATION | Frontend
APPLICATION | Pablo Backend App
APPLICATION | API gateway
And now I can deploy my environment, and the deployment orders will be respected ![]()
qovery environment deploy
If you want to create a new stage, you can run
qovery environment stage create -n "fifth stage"
Resources
UPDATE: Deployment Order is now available on the Web UI
If you have any questions, feel free to drop your comment below

