This transition has been an adjustment for us. I wanted to write a little on what I have missed in Bamboo and what I have appreciated about Jenkins.
We started with CI on Bamboo Cloud. It was a great platform for us, except for the fact that they shut down the program (perhaps it was having trouble competing against Jenkins?). I embarked on a journey of the next best thing for continuous integration. This is another sequel.
A light-bulb moment for me was understanding that Bamboo to Jenkins is an apples to oranges comparison. Bamboo is more polished; Jenkins is more powerful. I hesitantly suggest that there are similarities to the iPhone vs. Android debate? Let’s see if you agree.
I liked the interface of Bamboo. It was polished and worked well. The integration with JIRA was excellent. Having a list of issues that are going live each code push* was a good double-check to ensure that we flipped the right switches in JIRA. Another nice feature was having a “pipeline” for code to proceed through: from build to staging to live (this is different than BitBucket Pipelines). One thing I didn’t like was the feeling (maybe it was just me) of a lack of control. There weren’t as many settings. From my perspective, Bamboo represented a convention over customization ideology.
Bamboo’s pricing is based on how many remote agents (Amazon EC2 nodes) you want to run at once. I prefer to use remote agents as those are fresh computers that are “booted” up to make a build or run tests. Doing all of that work on the local agent (where Bamboo runs) can get messy if files were not properly cleaned up from previous builds.
Jenkins, on the other hand has a different modus operandi: customization over convention. It is not as polished. Jenkins has a steeper learning curve, which was made easier by the fact that I had already learned Bamboo. There is little to no integration with JIRA (which is greatly missed).
It’s free (except for the hardware). Jenkins seems more powerful. This may be illusionary, considering it seems harder to use. There are significantly more options, such as blocking a build from happening when other projects are building, custom locations for building a project, and many pre-defined actions and behaviors and post-build actions, and better management of keys. I believe that Jenkins has more plugins (but not sure on that).
If you are trying to decide between the two, how about trying both? The most work is getting your build scripts ready to go. The easiest part is plugging that information into a build platform. If you are getting started in CI, you may find Bamboo easier to start with. If you have done this before, or cost is an issue, then Jenkins is the route to go.
Stay tuned for more posts about building and deploying Magento!
* Code push: while we use feature branches, we merge code into the
master branch and then push it live at certain intervals. Our goal is to get fully feature branches with CI, such that the
master branch is always live.