Source Code Management (SCM) and version control systems ensure all members of a team stay on top of changes to source code and related files. These tools are also crucial in coordinating parallel work on different features and the integration of the features for software releases. In addition to source code, SCM is often used to manage configuration files as well. Putting the configuration of cloud services under version control facilitates the deployment of an application significantly.
Continuous Integration (CI) aims at integrating the work products of individual developers into a central repository early and frequently. When done several times a day, CI ensures early detection of integration bugs. This, in turn, results in better collaboration between teams, and eventually a better-quality product.
Continuous Delivery (CD) aims to automate the software delivery process to enable easy and assured deployments into production —at any time. By using an automatic or manual trigger, CD ensures the frequent release of bug-free software into the production environment and hence into the hands of the customers.
Jenkins is an open source automation server with which CI/CD pipeline can be configured. It is the most popular CI/CD tool that has the maximum adoption in the industry. Jenkins provides with a plethora of plugins for each component like, GIT, Maven, Gradle and so on. It can run on Docker as a container. There are other CI/CD tools in the market such as Travis CI, GitLab, etc. to name a few.
Docker is a tool for creating and managing containers. Containers enable developers to package their applications with all the dependencies that applications and deploy as a single package. The containers can be run on any linux machines. Docker containers share a linux kernel which makes the containers use less Memory and CPU resources. The applications are packaged as images and the images run in the containers.
K8S- Kubernetes- Kubernetes or K8S(popular reference) is an orchestration tool to deploy and manage containers in an automated way. K8S manages the workload and provides load balancing, fail over and scales applications based on the load. K8S comes with a capability of operating application containers across clusters. It has the capability to run application on the cloud. All the cloud platforms provide their own implementation of Kubernetes.
Ansible is an automation tool that can be used for configuring systems, deployment and orchestration of tasks like continuous deployment of applications. Ansible playbook can be written using YAML. Ansible provides security and reliability. Ansible playbook can be written by anyone right from developer, infrastructure specialists, sysadmins, etc.
Maven is the most popular build tool that has been widely adopted for over a decade. It is based on Project Object Model(POM). The configuration of the build is written in XML format. Maven’s dependency management is very efficient. There are maven plugins in other environments to enable smooth integration with Maven like IDEs for application build, docker, etc.