DevOps is changing the face of software development around the world. DevOps is effectively improving the speed to market, marketability, innovation, and product quality of software companies around the world in one way or another. 2021 is a big year for DevOps. Because DevOps spans development, operations, IT, security and product teams, and so on, as well as different stages of software development, there are a large number of tools to choose from. This article introduces some of the top DevOps tools available on the market today, keeping in mind the important categories of THE CI/CD lifecycle. This part is about configuration management, build, source code, deployment tools, and the next part is about vulnerability management, quality, monitoring, and collaboration tools.

Configuration management

Puppet

Puppet is an open source software configuration management and deployment tool that is typically used to ensure that all servers are configured to the desired state. Puppet is proxy-based and is most commonly used for Linux and Windows to control multiple application servers simultaneously. Puppet is primarily used for client/server configuration, where the managed node is synchronized with the server configuration. Puppet’s code management tool, R10K, makes it easier to automate or manually change, update, review, and test CI/CD code. You can also use R10K and Puppetfiles to automatically deploy the environment. These agent-based deployments are generally accurate, timely, and generate error logs for review. Puppet also provides easy integration with Git for version control. Puppet is declarative and is usually suitable for baselines rather than orchestration. Puppet faults:

  • Overall slow speed
  • Puppet cannot check system state outside of exec resources without writing custom facts
  • Hiera is a Puppet key and value configuration data search system, which is slow and difficult to troubleshoot

Ansible

Ansible is an open source configuration management and choreography tool known for its simplicity and performance. Ansible runs on the host and connects to the node using SSH. Ansible runs on any host with Python 2 (version 2.7) or Python 3 (version 3.5 and higher) installed, including Red Hat, Debian, CentOS, macOS, and BSD. Ansible makes it easy to manage configurations using YAML. Ansible is also useful for automated cross-platform tasks. You can also use Ansible pull mode to get repositories from specific files and run commands. Converting Shell scripts and configuration files to Ansible Playbooks or Roles is also easy, and there is plenty of documentation available. Ansible faults:

  • System size and expansion are slow
  • Lack of Windows support
  • It is inefficient when hundreds of servers require hundreds of large-scale synchronizations

Chef

Chef is an open source DevOps tool primarily for configuration management. Chef is also based on the master agent model, as the Chef client runs on each client machine (using the ‘Knife’ tool and communicating via SSH). Chef differs from Puppet in its additional layer, called workstations, which contains all configurations. These configurations are first tested automatically on the local machine and then pushed to the server.

Chef does very well when there are host dependencies. It captures the state of the system (packages, existing users, directories, and so on), compares them to live instances of the agent, and ensures that objects remain in sync. Chef is well known in the industry for its use of services such as AWS OpsWorks to maintain automation functions on larger networks. Chef Inspec also helps ensure the security and integrity of network deployments. Chef InSpec is an open source framework that allows automatic and manual testing and auditing of applications. Although Chef has a powerful GUI, you must know Ruby to take advantage of Chef’s infrastructure, the true power of the code model, especially when it comes to complex tasks and customization. You can do a lot of customization by writing scripts (called cookbooks and recipes) in Chef, but in many cases this is not the best option. Chef faults:

  • The agent instance needs to view the host to install the update
  • Difficult for beginners to understand
  • Detailed documentation is lacking
  • Lack of scalability of requirements

build

Jenkins

Jenkins is an open source automation service written in Java that acts as a CI (continuous integration) tool to make it easier for developers to integrate new components into software for seamless integration. Jenkins uses plug-ins for integration to achieve this goal. Jenkins listens to new pull requests, merges new work branches into main code, runs automated test suites, generates new test data, reports failures, and deploys the latest code changes to the QA environment for manual testing. Jenkins Pipeline is used to automate the expression of continuous integration processes. You can define build files in pipes, load them into the SCM, and configure work variables. Jenkins has been around for a long time and has become a de facto standard due to its mature ecosystem, plug-in support, documentation, and community. Jenkins has been updated several times over the years. It has become one of the first choices for many companies because it provides a simple UX/ syntax for pipeline and Docker integration. Jenkins’ weaknesses include:

  • To use Jenkins, you need to learn Groovy, which is notorious for its inconsistency. The Groovy scripts in Jenkins are not easy to write and edit, especially if you need to change a lot.
  • In many cases, you also need to manually configure the build into the UI, hard-coded profiles, and loose access controls.
  • Jenkins is extremely difficult to use without JenkinsFile, which is a text file containing Jenkins Pipeline definitions that are controlled by source code.

TeamCity

TeamCity is an advanced CI tool (available in a limited free version) known for its easy-to-use interface, smooth configuration, and innovative features. TeamCity runs in a Java environment and Apache Tomcat server, but can also be installed on Windows and Linux servers. Whether you choose TeamCity depends largely on your needs. TeamCity is a good fit if you have a budget and your primary task involves setting up a fixed number of build agents to easily establish parallel build chains with repository snapshots and artifact dependencies. TeamCity also has very solid documentation. TeamCity’s “Snapshot Dependencies” feature allows you to keep the same source version throughout the pipeline without the underlying code implementation. However, TeamCity automatically fixes Snowflake agents, and you must use configuration tools or container technology to do so. TeamCity’s template-based build configuration makes life easier.

TeamCity also natively supports automatic agent scaling in AWS, GCE, and Azure. It also supports VMware and Kubernetes via plug-ins and integrates locally with GitHub.

TeamCity faults:

  • expensive
  • Debug logs and error logs are difficult to parse and understand

Bamboo

Bamboo is a continuous integration and continuous deployment server developed by Atlassian. One of Bamboo’s key advantages is its ability to integrate automated build, test, and release with other Atlassian products such as JIRA, BitBucket, Stash, Hipchat, and Confluence in a single workflow, This creates a robust software development and delivery ecosystem. The Bamboo also has a reliable, easy-to-use GUI. Easy integration with BitBucket, Confluence, and Jira is one of the benefits of Bamboo. It can also launch Cron-like triggers that come in handy if an employee is out of the office but has audit analysis, automated tests, and automated programs to run. Bamboo faults:

  • Bamboo code analysis ability is not strong
  • Bamboo cannot build configurations centrally
  • No global tool configuration (tools must be manually installed on the agent)
  • Bamboo lacks credential plug-ins and support, which means that every Bamboo project has to offer a password change feature

Source code management

GitHub

GitHub is one of the most popular source code management tools used by millions of people around the world. GitHub’s key advantages include an easy-to-use UI, intelligent features such as repository recovery for accidental deletions, protection against finished product deletions, integration diversification, and security. GitHub has almost no outages or downtime, which makes it very reliable. GitHub has a large community and is perfect for open source projects. Because Microsoft owns GitHub, Azure DevOps and Microsoft tools can be tightly integrated. GitHub gives you more control over the CI/CD process. However, GitHub only offers free private repositories for up to three co-authors per repository.

GitLab

GitLab is based on Git and provides version control, CI services, deployment, and pipeline capabilities for software development. Because of its powerful CI services, most companies prefer to use GitLab for source code management. If you want to integrate CI/CD on your own server, GitLab is the way to go, because you can actually host GitLab on your server. GitLab is free and open source and offers an unlimited number of free private repositories. GitLab also allows you to install private instances and provides container registration services.

The deployment of

Spinnaker

Spinnaker is an open source CD software Platform that works with Kubernetes, Google Cloud Platform, AWS, Microsoft Azure, and Oracle Cloud. It is primarily a deployment and delivery platform for capturing artifacts and deploying them into production. Spinnaker’s dashboard and interface are easy to use. Developers can easily push their code to the release branch, and the tool automatically builds, tests, validates, and pushes the code to production. With Spinnaker, you can easily deliver and deploy changes to your software using Seamless Kubernetes, Github, and Google’s cloud build integration. Spinnaker can build EC2 amis locally, configure the ASG, and set up load balancers. Spinnaker faults:

  • Lack of effective scalability
  • The file is scarce
  • Difficulty in automating tasks

Octopus Deploy

Octopus Deploy is a CD tool for automated deployment. It can automatically deploy applications and services on a proxy machine or tentacle. Octopus Deploy works with ASP.NET Web applications, Java applications, NodeJS applications, and runs custom scripts to a variety of environments, including AWS and Azure. For the most part, it is used with AzureDevOps and is favored by companies using the Microsoft ecosystem. Octopus Deploy can integrate pipelined CI infrastructure. You can make API calls to Octopus to create new versions and push binaries through CI pipes. Octopus’s disadvantages are as follows:

  • expensive
  • Cannot export variables between projects

Argo CD

Argo CD is a declarative GitOps continuous deployment tool for deploying applications in Kubernetes clusters. The Argo CD forces the synchronization of Kubernetes listings that record your application in a Git repository. The Argo CD can automatically apply the updated manifest to commit changes to the cluster. The ArgoCD server can track the deployment branch of the main project. The Argo CD can also automatically detect when the build branch is merged into the deployment branch. The Argo CD prevents outages by deploying the new version of the manifest first. Disadvantages of Argo CD:

  • Argo CD does not support CI, which means that if you want a full CI/CD pipeline, you will need to use other tools such as Jenkins, Travis, Circle CI or Gitlab CI.

The sheer number of tools available can be daunting, but choice is a good thing in itself. Lack of standardization and automation can create an extremely high learning curve during the onboarding or transition process. The rule of choice is not to waste time and financial resources by investing in similar, overlapping tools.