Customize deployment pipelines
Edit on GitHubThis document describes how to customize deployment pipelines.
- 
To prevent timeouts and issues, avoid adding long operations like data import to deployment pipelines. Export long operations to Jenkins jobs that run separately from deployment. To learn how long operations affect pipelines, see Deploymment in states.
 - 
In this document, we use the
pre-deploystage and its environment variableSPRYKER_HOOK_BEFORE_DEPLOYas an example. When customizing a different stage of a pipeline, use the respective variable. You can learn about environment variables for each deployment stage in Deployment stages. - 
Also, we use the default location of deployment scripts:
/config/install/. Before you edit or add new scripts, make sure to check where they are stored in your project. 
Adding a single command to a deployment pipeline
To customize the pre-deploy stage of a pipeline:
- In a deploy file of the desired environment, set the shell command as a value of the 
SPRYKER_HOOK_BEFORE_DEPLOY:variable: 
environment: ...
image:
  tag: ...
  environment:
        ...
        SPRYKER_HOOK_BEFORE_DEPLOY: "{shell_command}"
        ...
- Push the changes to the repository.
 
During the next deployment, the command will be executed in the pre-deploy stage.
Adding multiple commands to a deployment pipeline via a shell script
To add multiple commands to the pre-deploy stage:
- Create a shell script with the desired commands.
 
The file should have a .yml extension. For example, pre-deploy.yml.
- In 
deploy.yml, defineSPRYKER_HOOK_BEFORE_DEPLOYwith the command that executes the script you’ve created: 
environment: ...
image:
  tag: ...
  environment:
        SPRYKER_HOOK_AFTER_DEPLOY: "vendor/bin/install -r {path_to_script} -vvv"
Do not include the .yml extension of the file name in {path_to_script}. For example, if your script is located in /config/install/EU/pre-deploy.yml, the {path_to_script} should be EU/pre-deploy.
- Push the changes to the repository.
 
During the next deployment, the commands in the script will be executed in the pre-deploy stage.
Adding different commands for different environments and pipeline types
By default, in pre-deploy and post-deploy stages, there is no possibility to run different commands for combinations of different environments and pipeline types. To do that, you can set up a custom shell script with if statements.
Using the following script example, create your own script and add it to the desired pipeline by following Adding multiple commands to a deployment pipeline via a shell script.
 if [ "${SPRYKER_PROJECT_NAME}" == "spryker-staging" ]; then
  {list_of_commands}
fi
if [ "${SPRYKER_PROJECT_NAME}" == "spryker-dev" ]; then
  {list_of_commands}
fi
if [ "${SPRYKER_PIPELINE_TYPE}" == "normal" ]; then
  {list_of_commands}
fi
if [ "${SPRYKER_PIPELINE_TYPE}" == "destructive" ]; then
  {list_of_commands}
fi
Adding commands to the install stage of deployment pipelines
To add one or more commands to the install stage of a deployment pipeline:
- Depending on the desired environment, add the desired commands to one of the following files:
 
- 
Normal:
config/install/production - 
Destructive:
config/install/destructive 
- Push the changes to the repository.
 
During the next deployment, the commands in the script will be executed in the install stage.
Thank you!
For submitting the form