There's a newer version of this post- the post on this page is maintained for historical purposes only
Just a quick recap for those unfamiliar: I've been looking for a "zero-touch" development-staging-live workflow for Drupal, that would allow me to quickly roll out new Drupal platforms, and even migrate existing sites to those new platforms. I store all of my platform make files in a single Git repo, with branches like "live_platform1" and "dev_platform1". Ideally, I could commit a change to a makefile, and immediately my Aegir server would build a new platform based on that changed makefile and even migrate sites on the existing platform to the new platform.
mig5 has an excellent post describing a zero-touch workflow for Drupal- however, I needed to modify it a little to suit my needs. Note that this currently can build platforms, but not migrate sites.
First, I create a Jenkins project with a name that matches a branch in my repository, such as "dev_platform1". I use a similar configuration to the one described above, but with the following shell command:
/usr/local/bin/deployment.sh example.com ${JOB_NAME} dummyprofile dummywebserver dummydbserver ${WORKSPACE}/build.make ${JOB_NAME}_${BUILD_NUMBER} ${BUILD_NUMBER}
Of course, I needed to modify the deploy.sh and fabfile.py to take into account the new parameter, since I like to name my jobs something nicer than just a date string. Contact me if you want me to post a copy of those files.
Note that I also had to create an SSH key to allow the Jenkins user to log in as the Aegir user, and specify this key in fabfile.py using the env.key_filename parameter.
Then, I just needed to set up a Git post-receive hook to notify Jenkins of changes to a branch (platform):
while read oldrev newrev ref do branch=${ref##*/} echo "COMMAND: wget-q http://example.com/jenkins/job/$branch/build" `wget -q http://example.com/jenkins/job/$branch/build` done
To create a new platform, all I have to do is clone the existing Jenkins job, making sure to update the branch specifier, and create the corresponding Git branch.