A Drupal continuous integration infrastructure in a box.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Build pipeline screenshot

Current status: STABLE BUT UNDOCUMENTED. (We use the tool internally at Myplanet, but still need to document features and assumptions.)

A Drupal continuous integration infrastructure in a box. This currently includes:

  • Jenkins
  • Drush
  • PHP
  • a simple build job (configured via roles/config.yml)

Inception is in active development at Myplanet Digital, and should be considered alpha code. Stability and full documentation not yet guaranteed.


Why don't most developers use continuous integration? We think it's because it's hard to know where to start. We'd like to make it as simple as entering your cloud provider credentials (Rackspace/AWS/whatever) and running a single command.

We'll be building this out based on a set of assumptions regarding how to best build a Drupal site. This set of assumptions will take the form of the Skeletor install profile skeleton. The goal will be build a totally self-contained base profile, which other projects can use as a foundation. Ideally, only slight configurations of the Jenkins CI environment (ie. project name, and git repo URL) will be needed in order to build any project that uses the Skeletor install profile as a base.


  • Jenkins integration with Github project via commit links.
  • Authentications via GitHub credentials. Anyone in a specified GitHub organization will be given access to the Jenkins UI. This will not work locally on Vagrant.
  • Various rake tasks for helping with everything from creating new Rackspace servers to adding GitHub service hooks. Type rake -D or rake -T to see available tasks.
  • Configured to boot the base demo of Skeletor install profile, right off the bat.
  • Testing tools configured:
    • PhantomJS
    • CasperJS
    • Xserver Virtual Framebuffer (xvfb)


  • Install Xcode with Command Line Tools from Apple Developer website.

      git clone https://github.com/myplanetdigital/jenkins-inception.git
      cd jenkins-inception
      [sudo] gem install bundler
      bundle install
      bundle exec rake team:configure
      bundle exec rake team:generate_users
      bundle exec rake team:fork_skeletor
      vagrant plugin install bindler
      vagrant bindler setup
      vagrant plugin bundle
      vagrant up
      bundle exec rake admin:write_ip
      bundle exec rake admin:create_subdomain
      bundle exec rake team:add_deploy_key
      bundle exec rake team:service_hook


  • When GitHub authentication isn't set up, Jenkins will use the Unix user database from the server itself, which is set up based on the users databag entries with passwords.

Known Issues

  • When using GitHub authorization, there is an outstanding issue that prevents us from authorizing programmatically, and therefore Chef cannot run authorized actions like updating builds. GitHub auth not recommended until this is fixed.
  • Every once in awhile, ruby 1.8.7 in the VM will throw a segmentation fault while installing libmysql-ruby during the chef run. It's sporadic, and reprovisioning should move past it.
  • LogMeIn Hamachi is known to cause issues with making pear.php.net unreachable, and so the environment won't build.
  • Generally, both ruby and its gems should be compiled using the same version of Xcode. If you get odd errors, remove ruby and its gems and recompile.
  • On June 10, 2015 - @timfernihough decommissioned the Myplanet DynDNS account. While any account can be used as long as the appropriate environment variables are set, this will no longer work. mpdagile.com DNS has been moved to Verisign where an API for subdomain creation is not setup.

To Do

  • Include a base Drupal install profile to show file structure and bare minimum scripting expectations.
  • Add feature to create DNS a-record if DynDNS API credentials are supplied in config.yml.
  • Add note on port forwarding 8080. (:auto?)
  • Add spiceweasel support for launching into the cloud when using chef-server.
  • Provide instructions on using with Opscode hosted Chef server?
  • Create a chef server as a multi-VM Vagrant environment (or use Hatch?)
  • Investigate using preSCMbuildstep plugin for running jenkins-setup.sh
  • Investigate hosted chef gem.
  • Create role hierarchy like in Ariadne.
  • Set up varnish.
  • Determine public vs private git repo and change job git url accordingly.