Customizing deploy for your app
Let's say that you want to run some additional commands before or after the included deploy functions for each service. This enables you to do things like configure integrations or other systems to be ready to work with your new service. You could also replace the deployment logic entirely.
environment.yml custom templates config
Add this to environments.yml
:
template_config:
# from root, where do we look for custom templates?
template_directory: custom
custom template creation
Let's say you want to add a command to run after your docker build and push steps included in the default.
Add main.sh.j2
into the deploy
folder in the directory you set as the template_directoy
in your project.
{% extends "base.sh.j2" %}
{% block build_commands %}
# this is a jinja function that calls the block you're inheriting from
# you can leave this out if you don't want to default resources for this block
{{ super() }}
echo "hello {{ environment.name }}"
{% endblock %}
You could also replace the build entirely and use alternative builders like depot
if you wanted to.
block options
This is the default main.sh.j2
with the available blocks.
{% extends "base.sh.j2" %}
{# All Available Blocks #}
{# before deploy #}
{# {% block install_commands %} #}
{# {% endblock install_commands %} #}
{# deploy body #}
{# {% block build_commands %} #}
{# {% endblock %} #}
{# post deploy #}
{# {% block finally_build_commands %} #}
{# {% endblock %} #}
Test your changes
Run cnc deploy perform --debug
and see your new commands in action!