Bamboo 6.3 release come with improved Docker support which we are excited to try and advocate. However, we have been using Bamboo and Docker together for while now. Read below about our experiences.
At Addteq, some of the projects that we build with Bamboo require the build system to have certain specialized software, such as the Atlassian SDK installed. To accomplish this, we install the software on the machine where Bamboo is running, or set up remote build agents on other machines that have the software. However, this can become a problem when different projects require conflicting sets of software (such as different versions of the Atlassian SDK), or earlier versions of software than what’s already in use on a machine, and there aren’t enough machines to dedicate to builds. To solve this, we create remote agents with different sets of software and run them all on the same machine with Docker. Docker allows us to create images of Linux systems, customized in any way one would normally customize Linux, which can then run as self-contained instances or containers. The only limit on the number of containers for images is resources, as the process is inherently scalable ad infinitum.
Bamboo is a strong tool for implementing a stable continuous integration and deployment pipeline which is an essential part of the DevOps process. This topic is greatly explained in a recent blog post by Ian Buchanan published in the Atlassian Developer blog.
Docker describes itself as “An open platform for distributed applications for developers and sysadmins” and has rapidly gained popularity as one of the best tools to build, ship, and run software. Use of Docker allows replicating the exact environment of the builds locally. It also makes it possible to run deployments against different environments (i.e. QA or production) consistently.
Recent Bamboo releases have been using Docker very effectively for a variety of use cases, from provisioning Bamboo agents in Docker to providing tasks for building Docker images, pushing images to a Docker registry, and running Docker containers.
This post will go over a practical use case scenario that combines the power of Docker containers with Bamboo’s strong Docker features for building and deploying a web application — just one of the many ways the Bamboo Docker duo works together!
Selenium is a popular tool for end-to-end testing of web-apps. It's grid capability allows to have fast test executions, across multiple browsers, in parallel. However, the setup of such environment is always an issue to deal with. That is why, for our setup of Selenium Grid, we decided to use Docker containers to standardize the creation of the Hub and Nodes. This allowed us to have nodes that can be easily re-built, are source-controlled, re-usable and isolated from each other. Additionally, we had special issues come up when working with Safari and IE.
This article is intended as a general reference to follow along to, in order to easily set up a new Selenium grid with Docker, condensing everything we learned during the process. We also give some insight on SE-Interpreter, (the tool we decided to use to communicate with the Selenium Grid) - as to why we chose it and what benefits it has.
In the last blog on Docker, we talked about how we use Docker with Bamboo internally. It went into detail on how we were able to build a customized agent image, which can then be used to run build agents. Docker agents have a couple honorable advantages over configuring build agents manually. Once the docker agent image is created, it can be used to run multiple agents on a single or multiple hosts. We understand that there are many advantages of using Docker bamboo-agents, but we need to be able to implement some orchestration around it. There are many orchestrators like Docker Swarm, Kubernetes and Apache Mesos Every one of them has its own philosophy, use cases and architecture. Rancher is a tool built to simplify Docker orchestration and management.