Skip to content

Post-deployment scripts

Only for PHP

Currently this option available only for PHP stacks

Intro

Wodby provides you a way to run your scripts after each deployment. You can defined post-deployment scripts in wodby.yml file via pipelines (example for command stage):

pipeline:
  - name: Drupal 8 clear cache on dev
    type: command
    command: drush cr
    directory: $HTTP_ROOT
    only_if: test "$WODBY_ENVIRONMENT_TYPE" = "dev" 

Root directory

In the example above $HTTP_ROOT used as a directory instead of $APP_ROOT because drupal root is in a subdirectory (composer-based project)

Or like this:

pipeline:
  - name: Run my custom script
    type: command
    command: ./my-script.sh
    directory: $APP_ROOT

The pipeline is an automated manifestation of your deployment process. In other words, it's just a set of post-deployment actions to execute

Available environment variables

See Environment Variables article.

Cleanup pipeline

wodby.yml can have one cleanup block; cleanup is another pipeline which needs to be executed after a pipeline has either failed or passed. In the cleanup block, we can add command or shell script stages. The below example create a log file in pipeline and then cleanup the log file in the cleaup steps.

pipeline:
  - name: start pipeline
    command: echo “pipeline” > log/log.txt
cleanup:
  - name: cleanup
    command:  rm log/*

Pipeline stages

Stage in pipeline has three elements, name, type and configurations. configuration elements are optional. The elements of configurations depend on the type. For example command_stage type has command configuration, which specify the shell command run in the stage. The following is the table on the type and the parameters.

Command stage

Command stage executes one command. Users specify Command stage adding command in type.

The following is the parameter of Command stage.

Configuration Optional meaning
command false shell command run in the stage
only_if true run specified command on when the condition written in only_if is satisfied
directory true the directory where wodby runs the specified command

Parallel stages

You can set child stages and run these stages in parallel like this.

pipeline:
  - name: parallel stages
    parallel:
      - name: parallel command 1
        type: command
        command: parallel command 1
      - name: parallel command 2
        type: command
        command: parallel command 2
      - name: parallel command 3
        type: command
        command: parallel command 3

In the above setting, parallel command 1, parallel command 2 and parallel command 3 are executed in parallel.

Reusing the results from stages

Wodby stores the results of preceding stages. The stages can make use of the results of finished stages using the three special variables (__OUT, __ERR, __COMBINED and __RESULT) in wodby.yml configuration files.

  • __OUT - output flushed to standard output
  • __ERR - output flushed to standard error
  • __COMBINED - combined output of stdout and stderr
  • __RESULT - execution result (true or false)

The three variables are maps whose keys are stage names and the value are results of the stages. For example, we want the standard output result of the stage named "stage1", we write __OUT["stage1"].

The following is a sample configuration with a special value.

pipeline:
  - name: stage_1
    command: echo "hello world"
  - name: stage_2
    command: echo __OUT["stage_1"]

Wodby with the above configuration outputs "hello world" twice, since the second stage (stage_2) flushes the standard output result of the first stage (stage_1).

Wait for running stages until the conditions are satisfied

The stage starts immediately after the previous stage finish, but some stages need to wait for some action such as port is ready or file are created. wait_for feature supports the actions which need to be ready before the stages begin.

wait_for is defined as a property of stage.

pipeline:
  - name: launch solr
    command: bin/solr start
  - name: post data to solr index
    command: bin/post -d ~/tmp/foobar.js
    wait_for: host=localhost port=8983 state=ready

The wait_for property takes the key value pairs. Key has several variations. The value depends on the key type. The following table shows the supported key value pairs and the description.

Key Value (value type) Description
delay second (float) Seconds to wait after the previous stage finish
port port number (int) Port number
file file name (string) File to be created in the previous stages
host host (string) IP address or host name
state state of the other key (string) Four types of states are supported. The possible value is dependent to the other Keys.

State values

There are several state values and possible state values are depend on the other key.

There are seveal state values and possible state values are depend on the other key.

State value Description
present / ready Specified port is ready or file is created.
absent / unready port is not active or file does not exist

Creating your own pipeline stage

You can create your own pipeline stage and then use them in your pipeline.

The the example below where we define two simple pipelines hello and goodbye.

namespace: mypackage

stages:
  - def:
      name: hello
      command: echo "May I help you majesty!"
  - def:
      name: goodbye
      command: echo "Goobye majesty."

To import stages to pipeline configuration file, we use require block and add the list of file names into the block.

For example, the following example import the stages defined in conf/mystage.yml

require:
    - conf/mystages.yml

pipeline:
  - call: mypackage::hello
  - call: mypackage::goodbye

In the above setting, the stages (mypackage::hello and mypackage::goodbye) which are defined in mystage.yml are specified.

The files specified in pipeline configuration file need to have two blocks namespace and stages. In namespace, we add the package name, the package name is need to avoid collisions of the stage names in multiple required files. The stages block contains the list of stage definitions. We can define the stages same as the stages in pipeline configurations.

Initializing git submodules

pipeline:
  - name: Ignore SSH host key check for github and bitbucket
    type: command
    command: 'printf "Host bitbucket.org github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config'

  - name: Git sub-modules setup
    type: command
    command: git submodule update --init --checkout
    directory: $WODBY_APP_ROOT

Logs

You can find output logs of executed post-deployment scripts under Instance > Tasks