Build and Deploy Hooks

| May 15, 2018

deployment hooks managementHook is a term used to indicate a code insertion into some standard operation to provide customization. In confines of Jelastic Platform, you are allowed to execute your custom script prior / after an application build / deployment operations. Such implementation allows to completely automate your solution delivery by setting all the required application customizations within a single service panel to subsequently apply them all at once during a single deploy action.

Below, we’ll overview how to work with hooks and provide a list of the common use cases with a pair of simple step-by-step instructions.

Hooks Management

Being a part of the deployment process, Hooks can be set directly in the application deployment dialog. The appropriate form will be shown when referring to one of the following options:

  • Deployment Manager > Deploy to… icon (this tab is located in the dashboard bottom)   webhooks example
  • Deployments buttons for application server  custom hook pre deploy

1. Within the opened frame, expand the Hooks section.    hooks for deployment automation

Note: For the Maven build node and Golang application server, the Build hooks can be additionally provided alongside with the Deploy ones.

build hooks and deploy hooks

Here, click on either Pre or Post button to provide your code, which will be executed just before or immediately after deployment.

2. Within the opened code editor window, you can use any preferable programming language - the only requirement here is the presence of the appropriate code interpreter being pre-installed on a container.   custom hooks for deploymentThis way, depending on an engine your container is running on, you can call execution of the appropriate programming language scripts within your hooks body. For example, to fetch the exact container engine version and store it within server logs, the following strings can be specified as a hook:

  • Java 
    custom hook pre deployment
  • PHP  
    deployment hooks use case
  • Node.js
    hooks for deployment
Tip: To make the work with your scripts code more convenient, the top editor pane provides a few supplementary options, namely:

  • Wrap lines - brakes line if it reaches the frame border
  • Search - allows to easily find the needed information, with the additional Match case and Regex search options
  • Help - redirects to the current document to provide hooks usage details  custom hook post deployment

Click Apply when ready and proceed with application deploy.

3. When the deployment is finished, you can click the Show Logs button within the appeared dashboard notification to view the details on the handled processes and their result.   application deployment

Tip: Subsequently, the dedicated hooks.log file can be viewed within the application server Log section:  application deployment hooksIn order to explore the logged data on Build hooks execution, check the same file at appropriate Maven build node:  hooks log file

Hooks Use Cases

Hooks provide a broad range of opportunities for developers, which allow to automate many processes and get a ready-to-work application without any manual steps required. For example, here are the most common tasks, that could be programmed to be automatically accomplished by hooks:

  • Pre- build/deploy operations (i.e. executed before building and/or deploying application)
    • to check if all of the requirements are met
    • to pre-install required software
    • to clear or prepare a dedicated folder for an application
    • to log data
  • Post- build/deploy actions (i.e, executed after the application build and/or deployment is actually finished)
    • to restart your application server after deployment
    • to apply any other preferred customization
    • to log data

Below, we’ve provided two step-by-step examples of the hooks usage - Actions Logging and Application Restart.

Actions Logging with Hooks

Check out a simple example of your own log file creation with the help of hooks.

1. Initiate deployment of your project in any preferable way. We’ll use the archive, available out-of-box for each newly created account within the Deployment manager.  webhooks use cases2. Expand the Hooks section, click on the Pre hook and paste the following code into the opened editor frame:

echo "$(date) - deployment start" >> ~/mylog

deployment webhooksThis will add a string into the mylog file (will be automatically created in the home server directory if does not exist) to indicate the deployment start time.

3. For the Post hook add the next code:

echo "$(date) - deployment end" >> ~/mylog 

execute hooks

Tip: If needed, you can use the exit command to break your hook and the appropriate deployment / build operation execution at any point. Herewith, the 0 value (i.e. exit 0) is used to indicate success, while any other value assumes an error (e.g. exit 1).

Here, we just log the end of our deployment.

4. Finally, deploy your application and check your mylog file to check whether the hooks we’ve stated were successfully executed:  hooks for application deployIn our case, the presence of the custom mylog file with application deployment start/end timestamps inside it indicates that our scripts have worked as intended.

Application Restart with Hooks

Let’s check another example of hooks usage - e.g. with restarting your Tomcat application server right after the project deployment.

1. Initiate deployment of any preferred application (we’ll use the default unified HelloWorld package from Jelastic Deployment Manager) and configure the following Post deploy hook:

sudo service tomcat restart

build and deploy hooksThat’s it! Now, your Tomcat application server will be automatically restarted after deployment.

2. Open the Log section and view hooks.log to get a full response to your hook execution.  pre deployment hooksIn such a way you can start working with your app immediately after deployment without any additional steps required.

If you face any issues when working with hooks, feel free to appeal for our technical experts’ assistance at Stackoverflow.