Jenkins CI/CD Automation Server Platform
Jenkins is a continuous integration (CI) and continuous delivery (CD) solution.
Jenkins Automation Server Engine is Becoming the Engine of DevOps
The community sees Jenkins as an orchestration and automation engine for DevOps for the reason that Jenkins has become the de facto engine is because it’s extremely pluggable. An ecosystem of more than 1,500 plug-ins has emerged, enabling customers to add all sorts of functionality and integrate Jenkins with everything from Active Directory to GitHub to the OpenShift PaaS.
DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. Under a DevOps model, development and operations teams are no longer “siloed.” Sometimes, these two teams are merged into a single team where the engineers work across the entire application lifecycle, from development and test to deployment to operations, and develop a range of skills not limited to a single function.
Continuous Integration (CI)
Continuous Integration is an agile engineering practice originating from the extreme programming methodology. It primarily focuses on automated build and test for every change committed to the version control system by the developers.
In order to implement Continuous Integration, you will need:
A version control system
It stores all the source code checked in by the teams, and acts as the single source of truth.
Automated build and unit test
It is not sufficient if the code written by a developer works only on his/her machine. Every commit that makes it to the version control system should be built and tested by an independent continuous integration server.
Developers should get feedback on their commits. Anytime a developer’s change breaks the build, they can take the necessary action (example: email notifications).
Agreement on ways of working
It is important that everyone on the team follows the practice of checking-in incremental changes rather than waiting till they are fully developed. Their priority should be to fix any build issues that may arise with the checked-in code.
Continuous Delivery (CD)
Continuous Delivery is a logical extension of Continuous Integration. While Continuous Integration lets you automate the software build and test process, Continuous Delivery automates the full application delivery process by taking any change in code (new features, bug fixes, etc.) all the way from development (code commit) to deployment (to environments such as staging and production). It ensures that you are able to release new changes to your customers quickly in a reliable and repeatable manner.
You’re doing continuous delivery when:
Your software is deployable throughout its lifecycle.
Your team prioritizes keeping the software deployable over working on new features.
Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them.
You can perform push-button deployments of any version of the software to any environment on demand.
Oftentimes, the terms Continuous Delivery and Continuous Deployment are used synonymously by many, but in reality these concepts have a different meaning.
While Continuous Delivery gives you the capability to deploy to production frequently, it does not necessarily mean that you are automating the deployment. You may need manual approval prior to deploying to production, or your business may not want to deploy frequently.
Continuous Deployment, however, is an automated way of deploying your releases to production. You need to be doing continuous delivery in order to be able to perform automated deployment. Companies like Netflix, Amazon, Google, and Facebook automatically deploy to production multiple times a day.
Whether you are doing Continuous Delivery or Continuous Deployment, you know by now that you need a deployment pipeline.
Deployment pipelines (or Continuous Delivery pipelines) are the cornerstone of Continuous Delivery as they automate all the stages (build, test, release, etc.) of your software delivery process.
There are numerous benefits to using Continuous Deployment pipelines. An automated pipeline allows all stakeholders to monitor the progress, eliminates the overhead of all the manual work, provides quick feedback, and more importantly builds confidence on the code quality.
The deployment pipeline run starts with a developer committing source code change into a version control repository. The CI server detects the new commit, compiles the code, and runs unit tests. The next stage is deploying the artifacts (files generated from a build) to staging or a feature test environment where you run additional functional, regression, and acceptance tests. Once all the tests are successful, you are ready to deploy into production. In case of failure during any stage, the workflow stops and an immediate feedback is sent back to the developer.