Continous Integration & Continous Delivery

From Rasim SEN - Knowledge Base/Java/Springframework/Microservices/Cloud-AWS/AI
Jump to: navigation, search

Continous Integration

In software engineering, continuous integration (CI) is the practice of merging all developer working copies to a shared mainline several times a day.

Continious Delivery

Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time.[1] It aims at building, testing, and releasing software with greater speed and frequency. The approach helps reduce the cost, time, and risk of delivering changes by allowing for more incremental updates to applications in production. A straightforward and repeatable deployment process is important for continuous delivery.


Continious Integration Tools

Jenkins

jenkins-logo-text-300x96.png

Jenkins is an open-source CI tool written in Java. It originated as the fork of Hudson when the Oracle bought the Sun Microsystems. Jenkins is a cross-platform CI tool and it offers configuration both through GUI interface and console commands. What makes Jenkins very flexible is the feature extension through plugins. Jenkins plugin list is very comprehensive and you can easily add your own. Besides extensibility, Jenkins prides itself on distributing builds and test loads on multiple machines. It is published under MIT license so it is free to use and distribute.

Cloudbees also offers hosted solution in the form of the Jenkins in the Cloud.

Verdict: One of the best solutions out there, both powerful and flexible at the same time. The learning curve could be a bit steep, but if you need flexibility it very well pays off to learn how to use it.

Official website: Jenkins - https://jenkins.io/

Availability: Free

Platform: Cross-platform



TeamCity

TeamCity-logo.png

TeamCity is the mature CI server, coming from the labs of the JetBrains company. JetBrains has established authority in the software development world, and developers all over the world use their tools like WebStorm and ReSharper.

TeamCity offers all the features in its free version, but it is limited to the 100 build configurations and 3 build agents. Additional build agents and build configurations need to be purchased. Recently JetBrains started offering a cloud trial of TeamCity where you can try it out for one project without a hassle of having to install it on-premises. It lasts 60 days and you can export the project afterward.

Out of the box, TeamCity works on many different platforms and has the support for wide variety of tools and frameworks. There are many publicly available plugins, developed both by JetBrains and third parties. Despite being the Java-based solution, TeamCity offers the best .NET support among the tools on this list. There are also different enterprise packages, that scale by the number of agents your company needs.

You can find a great in-depth case study on TeamCity here on our blog.

Verdict: Great solution overall, but due to its complexity and price, better suited for enterprise needs.

Official website: TeamCity - https://www.jetbrains.com/teamcity/?utm_source=code-maze&utm_medium=cpc&utm_campaign=teamcity

Availability: Free for 3 agents and 100 build configurations and paid enterprise edition

Platform: Servlet container (On-premises), cloud trial


Travis CI

TravisCI-logo-gray.png

Travis CI is one of the oldest hosted solutions out there and it has won the trust of many people. Although it’s mostly known for the hosted solution, it offers the on-premise version too in a form of enterprise package.

Travis CI is free for all open source projects hosted on the GitHub and for the first 100 builds otherwise. There are a few pricing plans you can choose from, the main difference being the number of concurrent builds you can run.

Builds are configured using .travis.yml file which contains the build tasks that will be executed on running the build. It supports a variety of different languages and a good documentation to back them up.

Verdict: A Mature solution that offers both hosted and On-premises variants, loved and used by many teams, very well documented.

Official website: Travis CI - https://travis-ci.org/

Availability: Free for open source plans and first 100 builds, paid plans for everything else

Platform: Hosted and On-premises





Go CD

go-cd-logo.png

Go is the newest Cruise Control incarnation from the ThoughtWorks company. Excluding the commercial support that ThoughtWorks offers, Go is free of charge. It is available for Windows, Mac, and various Linux distributions.

What makes Go stand out from the crowd is the concept of pipelines which makes the modeling of the complex build workflows easy. On the pipeline concept, how it can help with Continuous Delivery and how it compares to Jenkins pipelines you can read here. Go CD supports pipelines from scratch and eliminates build process bottlenecks with the parallel execution of the tasks.

Verdict: On-premises solution, great for complex scenarios, free of charge with paid support.

Official website: Go CD - https://www.gocd.org/

Availability: Free with a paid support

Platform: On-premises for Windows, Mac and some Linux distributions


Bamboo

bamboo_logo.png

Atlassian is the company focused on providing tools for software development teams and you might know them by their tools like JIRA and Bitbucket. Bamboo originally offered both cloud and On-premises solutions, but in the May 2016 the cloud version was discontinued in the favor of the Bitbucket pipelines (accessible through the left panel of your Bitbucket account).

By utilizing the power of Docker, Bitbucket Pipelines is offering very efficient and fast builds that and is rapidly growing and becoming a worthy successor to the Bamboo Cloud.

Bamboo is free to try for 30 days, and after that, there are two plans for small and growing teams. Being the Atlassian tool, it has the native support for JIRA and BitBucket and you can even import your Jenkins configurations into the Bamboo easily.

Verdict: Great On-premises CI tool that originally offered Cloud solution too. Bitbucket Pipelines replaced the cloud solution. Pipelines is a modern and fast cloud CI tool integrated into Bitbucket. Has a free trial for 30 days, and paid plans after that.

Official website: Bamboo - https://www.atlassian.com/software/bamboo

Availability: Paid with a free trial

Platform: On-premises


GitLab CI

wm_no_bg-250x95.png

GitLab CI is an integral part of the open-source Rails project GitLab, which was brought to light by the company GitLab inc. It is hosted on GitLab.com, a free hosted service and it provides detailed git repository management with features like access control, issue tracking, code reviews and much more.

GitLab CI integrates seamlessly with GitLab and it can easily hook projects using the GitLab API. GitLab runners that process builds are written in Go language and can run on Windows, Linux, OSX, FreeBSD, and Docker.

The official Go runner can run multiple jobs concurrently and has inbuilt Docker support. Gitlab CI comes with both the open-source GitLab Community Edition and with the GitLab Enterprise Edition.

Verdict: A Phenomenal hosted tool with impressive list of features, offers both free and enterprise solutions.

Official website: GitLab CI - https://about.gitlab.com/

Availability: Free and paid with trial

Platform: Hosted (can be hosted for you on Gitlab.com)



CircleCI

circleci-300x95.png

Another cloud alternative that comes from the company with the same name. CircleCI currently only supports GitHub and the list of supported languages includes Java, Ruby/Rails, Python, Node.js, PHP, Haskell, and Scala.

What separates CircleCI from the other tools is the way they offer services. The main pricing block for the CircleCI is the “container”. One container is free and you can build as many projects on it as you need. Once you start adding more containers (at a fixed price each) you can choose the level of parallelization that suits your needs.

There are 5 levels of parallelization (1x, 4x, 8x, 12x and 16x). So, starting with the 16 containers, you can achieve maximum parallelization of 16x on one build. Or you can run 4 builds on 16 containers with 4x parallelization. It is up to you.

And did I mention CircleCI supports Docker?

Verdict: Flexible cloud CI tool that offers parallelization up to 16x. Excellent if you need something built fast and money is not the biggest issue (can reach up to $3150/mo).

Official website: CircleCI - https://circleci.com/

Availability: Free and paid with trial

Platform: Hosted


Codeship

codeship-logo-300x72.png If you haven’t had enough hosted solutions up until now, here is another one.

Codeship comes in two different versions: Basic and Pro. Basic version offers out-of-the-box Continuous Integration service but doesn’t have docker support and its main purpose is to build applications with common workflows through the UI. Pro version offers more flexibility and docker support.

The basic version comes in several paid packages, where the more expensive ones have more parallelization power. In the pro version, you get to choose your instance type and the amount of parallelization up to 20x). It can get a bit pricey, but some teams may need that kind of power.

Verdict: Powerful hosted solution with docker support, flexible plans suited both for small teams and enterprises alike.

Official website: Codeship - https://codeship.com/

Availability: Free for 100 builds per month and paid for more than that

Platform: Hosted



Codefresh

stickey-logo.png

Many tools on this list have Docker support, but Codefresh was designed and built from the ground up specifically with the containers in mind.

Docker can be a bit overwhelming to figure out at first, and the guys from the Codefresh inc. are well aware of that. In addition to working with existing docker files, you can choose from several different templates to ease the migration of your project to Docker containers. UI is clean and intuitive, there is almost no need to parse through the documentation to start using it.

The reason this CI tool deserves to be on the list lies in a feature that surprised me a bit. And that feature is launching your images to a stage-like environment. When the build finishes, you can launch the image to see if it works! That effectively means you get a staging environment without a need to provision additional virtual machines or deploy anything. And that’s great!

Codefresh is still very young and has room for improvement and new features, (eg. .NET core template and more deployment options), but it treats containers as a first class citizen and that makes it an ideal solution for any team that plans to utilize Docker.

Verdict: Easy to use tool with Docker containers at its core and very nice feature of launching the built Docker images to the hosted environment.

Official website: Codefresh - https://g.codefresh.io/signup?ref=BJV2J4zib

Availability: Free for 200 builds per month, 5 concurrent builds, and 1 hosted environment, paid for additional stuff

Platform: Hosted and On-Premises via Kubernetes and Helm Charts


So, What Is the Perfect Continuous Integration Tool for You and Your Team?

There are several things to keep in mind when choosing the right CI tool for your projects.

  • On-premises solutions offer a great deal of build process flexibility and store the artifacts locally. This may or may not be important to you, but in some cases and for some companies, it might be mandatory.
  • On the other hand, the hosted solutions offer no hassle setup and greater scalability since you don’t need hardware to host them.
  • Another important thing is the Docker support. Docker revolutionalized the way we distribute our apps and has become something you should not ignore. Although the vast majority of the tools support Docker, some take it more seriously than others.
  • And the last and often neglected aspect is the user interface. I found some of the tools from the list much easier to use than others. You cannot say with the clear conscious that the UI is not important because one of the main roles of any good CI tool is to make a build process easier. It should not be hard or complicated.