DevOps is changing the state of global software development. DevOps is effectively improving the speed to market, marketability, innovation and product quality of global software companies in some form.
2021 is an important year for DevOps. Since DevOps spans development, operations, IT, security and product teams, etc., 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 currently available on the market, keeping in mind the important categories of the CI/CD life cycle. This article is about configuration management, construction, source code, and deployment tools. The next article is mainly about vulnerability management, quality, monitoring, and collaboration tools.
Configuration management
Puppet
Puppet is an open source software configuration management and deployment tool, usually used to ensure that all servers are configured in the required state. Puppet is agent-based and is most commonly used for Linux and Windows to control multiple application servers at the same time. Puppet is mainly used for client/server configuration, where the configuration of the managed node and the server are kept in sync. With Puppet's code management tool R10K, it is 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 can generate error logs for review.
Puppet also provides simple integration with Git for version control.
Puppet is declarative and is usually suitable for baselines rather than compilation.
Disadvantages of Puppet:
- Overall slow
- Without writing custom facts, Puppet cannot check the system status outside of the exec resource
- Hiera is Puppet's key-value configuration data search system, which is slow and difficult to troubleshoot
Ansible
Ansible is an open source configuration management and orchestration tool, known for its simplicity and performance. Ansible runs on the host and uses SSH to connect to the node. Ansible can run on any host that has Python 2 (version 2.7) or Python 3 (version 3.5 and later) installed, including Red Hat, Debian, CentOS, macOS, and BSD.
Ansible makes it easy to manage configuration using YAML. Using Ansible to automate cross-platform tasks is also very effective. You can also use Ansible pull mode to get repositories and run commands from specific files. It is also easy to convert shell scripts and configuration files to Ansible Playbooks or Roles, and there are many documents available.
Ansible disadvantages:
- Slow system scale and expansion
- Lack of Windows system support
- Inefficient when hundreds of servers require hundreds of large-scale synchronizations
Chef
Chef is an open source DevOps tool mainly used for configuration management. Chef is also based on the master agent model because the Chef client runs on each client machine (using the "knife" tool and communicating via SSH). Chef differs from Puppet in its extra layer, called workstation, which contains all the configuration. These configurations are first automatically tested on the local machine and then pushed to the server.
When there are host dependencies, Chef performs very well. It can obtain the state of the system (packages, existing users, directories, etc.), compare them with real-time instances of the agent, and ensure that the objects are kept in sync.
It is well known in the industry that Chef uses services such as AWS OpsWorks to maintain the automation capabilities of a larger network. Chef Inspec also helps ensure the security and integrity of the network deployment. 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 understand Ruby to take advantage of the true power of Chef's infrastructure as the code model, especially when it comes to complex tasks and customization. A lot of customization can be achieved by writing scripts (known as cookbooks and recipes) in Chef, but in many cases this is not the best option.
Disadvantages of Chef:
- The agent instance needs to check the host to install the update
- It is difficult for beginners to understand
- Lack of detailed documentation
- Lack of required scalability
Construct
Jenkins
Jenkins is an open source automation service written in Java. It acts as a CI (Continuous Integration) tool, allowing developers to more easily integrate new components into the software for seamless integration. Jenkins uses plugins for integration to achieve this goal.
Jenkins listens to new pull requests, merges new work branches into the 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 realize the automated expression of the continuous integration process. You can define build files in the pipeline, load them into the SCM and configure working variables.
Jenkins has been around for a long time and has actually become a standard due to its mature ecosystem, plug-in support, documentation, and community. Jenkins has been updated several times in the past few years. It has become one of the first choices of many companies because it provides simple UX/syntax for pipeline and Docker integration.
The disadvantages of Jenkins include:
- To use Jenkins, you need to learn Groovy first, which is notorious for its inconsistencies. Groovy scripts in Jenkins are not easy to write and edit, especially when they need to be changed a lot.
- In many cases, it is also necessary to manually configure the build into the UI, hard-coded configuration files, and loose access control.
- Without JenkinsFile, Jenkins is extremely difficult to use. JenkinsFile is a text file that contains the definition of Jenkins Pipeline, and the file is controlled by source code.
TeamCity
TeamCity is an advanced CI tool (available in a limited free version), known for its easy-to-operate interface, smooth configuration and innovative features. TeamCity runs in a Java environment and Apache Tomcat server, but it can also be installed on Windows and Linux servers.
Whether to choose TeamCity depends largely on your own needs. If you have a sufficient budget and the main tasks include setting up a fixed number of build agents to easily build parallel build chains with repository snapshots and artifact dependencies, then TeamCity will be very suitable.
TeamCity also has very reliable documentation. TeamCity's "Snapshot Dependencies" feature allows you to maintain the same source version throughout the pipeline without the need for low-level code implementation.
However, TeamCity will automatically repair snowflake agents. For this, configuration tools or container technology must be used.
TeamCity's template-based build configuration can make life easier.
The TeamCity restorer supports automatic agent extension in AWS, GCE and Azure. It also supports VMware and Kubernetes through plugins, and integrates natively with GitHub.
Disadvantages of TeamCity:
- 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 main 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 to create a solid software development and delivery ecosystem .
Bamboo also has a reliable and easy-to-use GUI.
The easy integration with BitBucket, Confluence and Jira is a major advantage of Bamboo. It can also activate cron-like triggers. These triggers will come in handy if the employee is not in the office but has audit analysis, automated testing, and automated procedures to run.
Disadvantages of Bamboo:
- Bamboo's code analysis ability is not strong
- Bamboo cannot build configuration centrally
- No global tool configuration (tools must be manually installed on the agent)
- Bamboo lacks credential plugins and support, which means that every Bamboo-related project must launch a password change function
Source code management
GitHub
GitHub is one of the most popular source code management tools used by millions of people around the world. The main advantages of GitHub include: easy-to-operate UI, intelligent functions such as accidentally deleted repository recovery function, prevention of deletion of finished products, diversified integration and security. GitHub has almost no interruptions or downtime, which makes it very reliable.
GitHub has a huge community and is very suitable for open source projects. Since Microsoft owns GitHub, Azure DevOps and Microsoft's tools can be tightly integrated. GitHub allows you to better control the CI/CD process.
However, GitHub only provides free private repositories for up to 3 collaborators per repository.
GitLab
Based on Git, GitLab provides version control, CI services, deployment and pipeline functions for software development. Due to 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 a viable method, because you can actually host GitLab on the server. GitLab is free and open source, and provides an unlimited number of free private repositories.
GitLab also allows you to install private instances and also provides container registration services.
deploy
Spinnaker
Spinnaker is an open source CD software platform that can be used with Kubernetes, Google Cloud Platform, AWS, Microsoft Azure and Oracle Cloud. It is mainly a deployment and delivery platform for acquiring artifacts and deploying them into production.
Spinnaker's dashboard and interface are very easy to use. Developers can easily push their code to the release branch, and the tool will automatically build, test, verify and push the code to the production environment. With Spinnaker, you can use Seamless Kubernetes, Github, and Google's cloud build integration to easily deliver and deploy changes to the software.
Spinnaker can build EC2 AMI locally, configure ASG, and set up a load balancer.
Spinnaker disadvantages:
- Lack of effective scalability
- File scarcity
- Difficulties in automating tasks
Octopus Deploy
Octopus Deploy is a CD tool for automated deployment. It can automatically deploy applications and services on agent machines or "tentacles". Octopus Deploy is suitable for ASP.NET web applications, Java applications, NodeJS applications, and runs custom scripts in a variety of environments, including AWS and Azure. In most cases, it is used with AzureDevOps and is favored by companies using the Microsoft ecosystem.
Octopus Deploy can integrate pipeline CI infrastructure. You can initiate an API call to Octopus to create a new version and push the binary file through the CI pipeline.
The disadvantages of Octopus are as follows:
- expensive
- Unable to export variables between projects
Argo CD
Argo CD is a declarative GitOps continuous deployment tool, mainly used to deploy applications in Kubernetes clusters.
Argo CD forces the synchronization of Kubernetes manifests, which record your application in the Git repository. Argo CD can automatically apply the updated manifest to submit changes to the cluster. The ArgoCD server can track the deployment branch of the main project. Argo CD can also automatically detect when to merge the build branch into the deployment branch. Argo CD prevents downtime 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 complete CI/CD pipeline, you need to use other tools such as Jenkins, Travis, Circle CI or Gitlab CI.
The multitude of available tools can be daunting, but the choice itself is a good thing. The lack of standardization and automation can create a very high learning curve during the onboarding or handover process. The selection principle is not to waste time and financial resources by investing in similar and overlapping tools.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。