In this blog post, and the subsequent 6 or so we will discuss one possible way of building a complete CQ development environment, "DevOps", development architecture, or whatever moniker you prefer. To roughly outline this a bit for you:
- What we are building (this post)
- Create yourself an AWS AMI
- Needed Servers and their Configuration
- IDE Setup - Eclipse
- Maven POM creation, organization, and CQ Projects
- CI / Jenkins Setup, configuration and build projects
- What I don't like about my setup
Some of the posts I may break up into smaller pieces in order to "release" the info to you quicker. For example, I can see breaking #3, #5, and #6 into smaller bits. We will see when we get there.
I have spent a tremendous portion of my own personal and professional time attempting to reduce the burden of the development cycle as it relates to CQ. The IDE environment, the management of dependencies (aka classpath hell), application assembly, deployment, SCM issues, etc etc.
Going back as far as CQ 4.2 when there were no tools to automate the deployment of a CQ application to CQ, I wrote a library to do it. I used the HTTP commons library, extended some WebDAV based Apache project to add functionality that CQ needed in order to deploy application assets to CQ. The details are a bit fuzzy, it was 6 years ago you know... The code was ugly, and slow, but it worked. We were able to automatically deploy to CQ using Ant scripts.
The issue all along has been a lack of specific examples for what I was doing. I was able to find bits and pieces of examples that seemed similar to the various portions of my dev architecture. It always required heavy extrapolation and interpolation. That along with coming up to speed quickly in many technologies that were new to me. So I hope you find these posts beneficial and directly applicable to your day to day work.
Ok - so what is it we are building?
- Installation/configuration of Eclipse to facilitate Maven/CQ development
- Creation and organization of foundational Maven POM's for CQ development
- My chosen organization of Eclipse/Maven projects for CQ development
- Creation of an AWS AMI installed with:
- CQ 5.5
- Tomcat 6.0.35
- Sonatype Nexus
- Jenkins configuration and build project creation
I will intentionally leave out the SCM integration piece. The standard SCM for CQ seems to be shifting. Up till recently it seemed that SVN was heavily used, and now it seems to be shifting to Git. We won't be installing Git or configuring it, so I will leave that detail up to you. My experience with SVN is that Jenkins integration was pretty painless. Git, well, was not quite that easy. Maybe there will be a follow up post on that. We will see.
My own personal CQ instance used for development has OpenAM installed and configured for LDAP. That allows me to partially use OpenAM to create and manage users and groups. I have not extensively explored this facet of my environment, and I may investigate exploiting this for SSO. We shall see about this later, and of course potentially another article on the subject.
Regardless, at the end you will have an IDE configured for CQ development, an approach for developing maven POM's that will:
- facilitate local application and OSGi bundle deployment
- facilitate DEV deployment
- manage DEV Publish, QA and PROD deployments
You will also have a CI server, and an approach for developing the build projects that can automate all of this.
Strap in and get ready to drink from the firehose.