In my experience as developer, the deployment of web applications is one of the most difficult tasks of the software development process because it requires the integration of the work of multiple developers. Jahia 6.6 is a Content Management System that can be used to create complex web applications that has tools to facilitate the deployment process. If we use the deployment tools provided by Jahia plus a Jenkins Continuous Integration Server, we can get a powerful combination to easily perform module and template deployment. I want to share a design that can be used to implement this process.
This is a high level representation of the design:
1. Each developer has a local Jahia installation and a copy of the SVN repository. They promote/commit their code changes to the SVN repository.
2. Jenkins is installed on a separate server. When the Jenkins deployment job runs, it gets the latest SVN code and compiles it.
3. Finally, Jenkins pushes the war files generated by the compilation to the Integration Server and remotely calls the Jahia deployment tool deployModule.sh for Linux servers or the deployModule.bat for Windows servers.
The Jahia deployment tool can be used to deploy templates and modules to any Jahia system. This tool comes with the Jahia installation and receives as parameter the location of the war files that need to be deployed. For more details please visit http://www.jahia.com.
• Jenkins needs to be integrated with Subversion and Maven 2 in order to get and compile the Jahia code.
• Jenkins requires additional tools, like the use of the ftp protocol, to establish a connection to the Integration Jahia Site and push the packaged war files.
• Jenkins needs additional tools like Putty to call remotely the Jahia deployment script that is in the Integration server.
A similar design can be used for production promotions. If Jenkins and the target production server are not in the same network, Step 3 needs to work over a secure connection like SSH.
In Part 2 of this post, I‘ll show the detailed implementation of this design. It will include how Jenkins needs to be configured in order to deploy in a secure way using Putty and WinSCP, and a sample build script file for the deployment. Please note that this is a generic design and it can be used for other type of projects.