What is DevOps
DevOps (combination of Development and Operations) is a collective term for a set of processes, methods, and systems, used to promote communication, collaboration, and integration between development (application / software engineering), technical operations, and quality assurance (QA) departments. It emerged because the software industry increasingly recognized that in order to deliver software products and services on time, development and operations must work closely together.
Mentioning DevOps has to mention continuous integration:
Continuous integration is a software development practice where team members often integrate their work, usually everyone integrates at least every day-multiple integrations are done every day. Each integration is verified through automated builds (including testing) to detect integration errors as quickly as possible. Many teams found that this approach resulted in greatly reduced integration issues and allowed the team to develop coherent software faster.
Why are there DevOps?
The emergence of this new concept of
DevOps is to deal with some of the challenges generally faced in the IT environment.
The emergence of agile has narrowed the first gap shown in the above figure, that is, the gap between business needs and development, which has effectively accelerated the cycle and efficiency of product development. Then this undoubtedly adds a lot of pressure to the operation team.
Therefore, the second gap in the above figure, that is, the gap between development and operation and maintenance needs to be solved, so
the concept of DevOps came into being.
Concepts related to DevOps
Continuous Integration (Continuous Integration, CI)
In traditional software development, integration usually occurs after everyone has completed their work. At the end of the project, integration usually takes painful weeks or months to complete. Continuous integration is a practice that advances integration to the early stages of the development cycle, allowing build, test, and integration code to occur more often and repeatedly.
Continuous integration means that a developer who writes code in a home notebook (hey, programmer A) and another developer who writes in the office (hey, programmer B) can write software separately for the same product and integrate their changes In a place called the source repository. They can build combined software from the parts they wrote and test the software in the way they expect.
Developers usually use a tool called IC Server to build and integrate. Continuous integration requires programmer A and programmer B to be able to self-test the code. Test each code separately to ensure that it works properly. These tests are usually called unit tests.
After the code integration, when all unit tests pass, programmer A and programmer B get a green build. This shows that they have successfully integrated together and the code is working as expected by the test. However, although the integrated code can successfully work together, it is still not ready for production because it has not been tested and worked in a production-like environment. In the continuous delivery section below you can learn what happens behind continuous integration.
Considering the practice of continuous integration, programmer A and programmer B must frequently register the main code repository, integrate and test their code. Usually many times an hour, and at least once a day.
The benefit of continuous integration is that integration is no longer a headache. The software has been written and integrated. Before continuous integration, integration took place at the end of the creation process, completed in one go, and it was not known how long it would take. And now continuous integration is integrated into the way of working every day.
Continuous Delivery (CD)
Let us say back to our two developers, programmer A and programmer B. Continuous delivery means that every time Programmer A or Programmer B modifies, integrates, and builds code, it also automatically tests this code in a production environment. We usually call this process of publishing and testing in different environments a deployment pipeline. The deployment pipeline usually has a development environment, a test environment, and a quasi-production environment, but these stages will vary according to different teams, products, and organizations. For example, the Mingle team has a quasi-production environment called "Cupcake" at a stage, while Etsy's quasi-production environment is called "Princess".
In different environments, the code written by programmer A and programmer B is tested separately. When the code is deployed to the production environment it starts working, which gives them more confidence. And only when the code passes the test of the previous environment will it enter the environment of the next deployment pipeline. In this way, programmer A and programmer B will test and get new feedback from each environment. If there is a failure, they can also find the problem and fix it more easily before the code is applied to the production environment.
DevOps technology stack and tool chain
Everything is Code, DevOps also needs to complete the integration of continuous integration, continuous delivery, user feedback and system optimization through the technical tool chain. Elasticbox organizes 60+ open source tools and categories, including version control & collaborative development tools, automated build and test tools, continuous integration & delivery tools, deployment tools, maintenance tools, monitoring, warning & analysis tools, etc.
Added some domestic services that will allow you to better implement the DevOps workflow.
Version control & collaborative development: GitHub, GitLab, BitBucket, SubVersion, Coding, Bazaar
Automated build and test: Apache Ant, Maven, Selenium, PyUnit, QUnit, JMeter, Gradle, PHPUnit
Continuous integration & delivery: Jenkins, Capistrano, BuildBot, Fabric, Tinderbox, Travis CI, flow.ci Continuum, LuntBuild, CruiseControl, Integrity, Gump, Go
Container platform: Docker, Rocket, Ubuntu (LXC), third-party vendors such as (
Alibaba Cloud)
Configuration management: Chef, Puppet, CFengine, Bash, Rudder, Powershell, RunDeck, Saltstack, Ansible
Microservice platform: OpenShift, Cloud Foundry, Kubernetes, Mesosphere
Service opening: Puppet, docker Swarm, Vagrant, Powershell, OpenStack Heat
Log management: Logstash, CollectD, StatsD
Monitoring, warning & analysis: Nagios, Ganglia, Sensu, zabbix, ICINGA, Graphite, Kibana
By the way, share another DevOps BookMarks, which covers all aspects of DevOps tools and content. If you are interested, you can go to learn.
References
Getting started guide for DevOps beginners