DevOps ~ Overview - rohit120582sharma/Documentation GitHub Wiki

DevOps is a merging of multiple methodologies around development and operations. It brings automated testing practices earlier into software development and aims to decrease the time between writing and deploying code.

It is a Software Development approach which involves Continuous Development, Continuous Testing, Continuous Integration, Continuous Deployment, and Continuous Monitoring of the software throughout its development lifecycle.

Advantages

  • Time taken to create and deliver software is reduced
  • Complexity of managing an application is reduced
  • Improved collaboration between developers and operations team
  • Continuous integration and delivery ensure faster time to market

Continuous Development

  • This phase involves planning and coding of the software application's functionality.
  • The vision of the project is decided during the 'planning' phase.
  • Code can be done in any language but maintain by Version Control System.
  • Why code versioning is important
    • Versions are maintained to hold a single source of application.
    • Using centralized single source code, Operations can access the same code what they plan to release.
    • Easy to rollout the faulty snippet of code or complete release.
    • Git & GitHub is vastly used tools for versioning of code.

Continuous Testing

  • It is the process of executing automated tests as part of the software delivery pipeline in order to obtain feedback on the business risks associated with a software release candidate as rapidly as possible.
  • It evolves and extends test automation to address the increased complexity and pace of modern application development and delivery.
  • It includes end-to-end tests that realistically assess the end-user experience across all associated technologies (front-end and back-end).

Continuous Integration

  • CI is the process of building and testing a code base whenever an individual developer pushes their contributions to a repository. This process needs to be automated, meaning a system is responsible for building and testing the code base, not a human.
  • CI Server is a virtual machine that runs in a cloud that automatically clone your project and run tests on it to make sure that the code you are adding is not breaking anything.
  • Prerequisites
    • Github account
    • Basic Git knowledge
    • Patience for a lot of boring configuration
  • Continuous Integration Tools
    • With Continuous Integration ever more widely used, there’s a maturing ecosystem of tools to get started like TravisCI, CicleCI, Codeship, AWS Codebuild, Jenkins etc.

Continuous Delivery

  • CI + the entire software release process is automated, it may be composed of multiple stages, and deployment to production is manual.
  • It is the practice of keeping your application deployable at any point. Beyond making sure your application passes automated tests it has to have all the configuration necessary to push it into production.

Continuous Deployment

  • CI + CD + fully automated deployment to production.
  • It is responsible to deploy the application latest version on test or production environment.
  • It is basically a combination of two parts: Configuration Management and Containerization.
  • Configuration Management
    • Establish and maintain the configuration of your server which will be compatible with your application functional requirements and performance.
    • Releasing deployments to the server.
    • Scheduling updates on all servers.
    • Maintain configuration consistency on all servers.
  • Containerization
    • It is a set of tools which will maintain the consistency across the environments.
    • It is a set of tools which is required to run my application in a single container on all my servers.
    • Docker is the first containerization tool.
    • Scheduling updates on all servers.

Continuous Monitoring

⚠️ **GitHub.com Fallback** ⚠️