youri babakhanians - Fotolia
Developed to address code integration pain points, CI/CD automates the application lifecycle and makes a significant impact on software development processes.
Developers can choose between various self-hosted and SaaS tools available for CI/CD. Those who work on AWS must sift through these options to determine which works for them, and their choice often comes down to an open source option such as Jenkins vs. Amazon's managed cloud services.
In this article, we will focus on AWS CodePipeline vs. Jenkins. We'll compare their usability and cost, and explore whether developers can use the two tools together.
What is Jenkins?
Jenkins is one of the most popular open source CI/CD tools. Although the project started as an automation server, the Jenkins community has developed more than 1,000 plugins for the tool. Jenkins can integrate with all public cloud providers and many applications that support developer work, such as GitLab, GitHub, Artifactory and HashiCorp Vault.
Jenkins' core powers are its extensibility and price. Jenkins doesn't have any licensing fees and comes completely free of charge. The downside is that it's not available as a SaaS, which means you need to deploy and maintain it, as well as all the plugins you use. This can be cumbersome work in large environments with hundreds of developers.
What is AWS CodePipeline?
AWS CodePipeline is a managed CI/CD tool that provides integrated Amazon cloud DevOps tooling. CodePipeline is actually a suite of services. It combines CodeBuild, CodeDeploy and Git-based source code repository CodeCommit.
Even though CodePipeline is an AWS tool, it doesn't limit you to Amazon's cloud. You can use CodeDeploy for on-premises deployment by running agents on your private servers. If you're already running a CI tool inside your AWS environment, or have your code stored in GitHub or GitLab, you can also integrate such tools into CodePipeline and only use what you need. For example, you could use CodeDeploy to publish code onto your EC2 instances or Amazon Elastic Container Service containers.
AWS CodePipeline vs. Jenkins
Now that we have explained a bit about Jenkins and AWS CodePipeline, we'll compare the two. For our purposes, we'll assume that you have a current workload in AWS, and that you're evaluating whether you should host your own Jenkins master-agent setup or use integrated AWS tools.
Even though many companies can survive running a single Jenkins server, this won't provide ideal performance. In theory, if you have more than a dozen developers, you're better off running one Jenkins master on a small instance -- reserved t3.medium, for example -- and spinning Jenkins agents on demand when you need to run jobs.
In this scenario, the Jenkins master provides a UI for configuration and job scheduling, while the jobs will actually be executed on agents. Usage will determine how many agents you need; you'll likely need a couple. You also need to evaluate how many hours these instances will run per month. If your agents are running 80% or 90% of the time, consider using EC2 Reserved Instances as well.
At the time of publication, AWS CodePipeline costs $1 per active pipeline per month, but don't let that number fool you. You will need to pay for CodeBuild compute time as well. During the testing phase, estimate your total cost by calculating how many builds you will trigger per month, how long these builds will last and which instance types you plan to use. CodeDeploy is free if you deploy on EC2 or AWS Lambda; there is also a small surcharge for on-premises instances -- $0.02 per update.
Jenkins and AWS CodePipeline are both easy to use and set up. Jenkins installation is straightforward and can be completed in minutes. AWS provides templates that rely on CodeBuild and CodeDeploy to start creating your pipelines.
Because CodePipeline is a SaaS application, and already integrates with most Amazon cloud services, it is likely easier for developers who already know their way around AWS. For example, AWS users can use the CodePipeline integration with AWS Lambda to trigger custom functions defined by code.
Integration is where Jenkins shines, with thousands of plugins. CodePipeline works with many native AWS offerings, but it has a relatively small number of certified third-party integrations. If you're fine tying yourself to the AWS ecosystem, and your developers can do their entire work relying on AWS developer tools, then maybe you don't need extra integrations. But be aware that you might not be able to upgrade your pipelines over time with new features. For example, CodePipeline doesn't have out-of-the-box Slack support for notifications. It is possible to make it work with AWS Lambda, but your developers won't like it. On the other hand, Jenkins works with Slack with just a couple of clicks.
AWS CodePipeline and Jenkins together
Even though CodePipeline and Jenkins operate as solo CI/CD tools, you can actually use them together in a multi-stage deployment pipeline. For example, you can create a four-stage pipeline in AWS CodePipeline that utilizes Jenkins as a build server. Of course, you will still rely on a source repository, such as GitHub or GitLab, and need a delivery mechanism -- AWS CodeDeploy, most likely -- for the built code to push to a server.