operators work in harmony with little or no organizational barriers between them, towards a common goal. • Is not a way to get developers doing operational tasks so that you can get rid of the operations team and vice versa. • Is not a person who does system operational tasks Principles and definitions DevOps
the environment in which your application will run (hardware configuration, software, infrastructure, and external services.) • Installing the correct version of your application into it. • Configuring your application, including any data or state it requires. Principles of software delivery Definition of Deploy
multiple environments ? • Can we access the binary and source repositories ? • Can we remotely invoke and control the installation process on the server it’s been deployed to ? • Are we capable of deploying database changes ? • Can we manage or at least reference environment/server specific configuration and deploy that along with the binary ? • Do we have functionality to allow for queuing up releases ? • Do we audit what has been deployed, when, and by whom ? Intro
interact with the infrastructure to allow for no-downtime deployments ? • Can we orchestrate automated infrastructure provisioning ? • Can we extend to interact with other systems and solutions such as email, change management, issue management, and project management solutions ? • Do we have a simple and easy to understand dashboard that can be displayed on big screens around the office ? • Can we interact with/or orchestrate the CI solution ? • Will it grow with our needs ? • Is it simple enough for anyone and everyone to use ? Intro
(Git) • CircleCI running tests • Development environment close to staging and prod • One VM per project • Each VM was provisioned with Ansible • Data stores in VM’s (Redis and Disk) • Deploy with VCS (git checkout version) The root What we had on development
(Git) • CircleCI running tests • One EC2 instance for all projects • Manual provision • Different datastores (one for staging and other for production) • Deploy with VCS (git checkout version) The root What we had on staging and production
build assets, update php dependencies etc…) • All projects in the same machine, if one project creates a problem in some service on the EC2 Instance or something happens to the EC2 instance, every project will be down. • If after a year we had to redeploy not only the code but the whole infrastructure we didn’t had an automated way to do that. The root Some pitfalls
multiple environments ? • Can we access the binary and source repositories ? ✔ • Can we remotely invoke and control the installation process on the server it’s been deployed to ? ✔ • Are we capable of deploying database changes ? ✔ • Can we manage or at least reference environment/server specific configuration and deploy that along with the binary ? ✔ • Do we have functionality to allow for queuing up releases ? • Do we audit what has been deployed, when, and by whom ? The root
interact with the infrastructure to allow for no-downtime deployments ? • Can we orchestrate automated infrastructure provisioning ? • Can we extend to interact with other systems and solutions such as email, change management, issue management, and project management solutions ? • Do we have a simple and easy to understand dashboard that can be displayed on big screens around the office ? • Can we interact with/or orchestrate the CI solution ? ✔ • Will it grow with our needs ? • Is it simple enough for anyone and everyone to use ? The root
only one cluster. It has it’s own data stores (same services, different hosts) and it’s own jobs. Qaprod1 has the same setup and shares production data stores. The present And this isn’t everything, don’t forget staging and qaprod1 !
Records on Route53 (prod1, prod2, qaprod1 and staging clusters) • 21 Amazon Elastic Load Balancers. • At least 24 Amazon EC2 instances. • 9 projects The present
multiple environments ? • Can we access the binary and source repositories ? ✔ • Can we remotely invoke and control the installation process on the server it’s been deployed to ? ✔ • Are we capable of deploying database changes ? ✔ • Can we manage or at least reference environment/server specific configuration and deploy that along with the binary ? ✔ • Do we have functionality to allow for queuing up releases ? • Do we audit what has been deployed, when, and by whom ? The present
interact with the infrastructure to allow for no-downtime deployments ? • Can we orchestrate automated infrastructure provisioning ? ✔ • Can we extend to interact with other systems and solutions such as email, change management, issue management, and project management solutions ? • Do we have a simple and easy to understand dashboard that can be displayed on big screens around the office ? • Can we interact with/or orchestrate the CI solution ? ✔ • Will it grow with our needs ? • Is it simple enough for anyone and everyone to use ? ✔ The present
by identifier and create EC2 instance from it. • Configure environment variables and start required services. • Remove old EC2 instance from the same project. • Attach new instance on project ELB.
multiple environments ? ✔ • Can we access the binary and source repositories ? ✔ • Can we remotely invoke and control the installation process on the server it’s been deployed to ? ✔ • Are we capable of deploying database changes ? ✔ • Can we manage or at least reference environment/server specific configuration and deploy that along with the binary ? ✔ • Do we have functionality to allow for queuing up releases ? • Do we audit what has been deployed, when, and by whom ? ✔ The present
cover this here for now, just ask anything you need :) ) ✔ • Can we interact with the infrastructure to allow for no-downtime deployments ? • Can we orchestrate automated infrastructure provisioning ? ✔ • Can we extend to interact with other systems and solutions such as email, change management, issue management, and project management solutions ? ✔ • Do we have a simple and easy to understand dashboard that can be displayed on big screens around the office ? • Can we interact with/or orchestrate the CI solution ? ✔ • Will it grow with our needs ? ✔ • Is it simple enough for anyone and everyone to use ? ✔ The present
multiple environments ? ✔ • Can we access the binary and source repositories ? ✔ • Can we remotely invoke and control the installation process on the server it’s been deployed to ? ✔ • Are we capable of deploying database changes ? ✔ • Can we manage or at least reference environment/server specific configuration and deploy that along with the binary ? ✔ • Do we have functionality to allow for queuing up releases ? • Do we audit what has been deployed, when, and by whom ? ✔ The present
cover this here for now, just ask anything you need :) ) ✔ • Can we interact with the infrastructure to allow for no-downtime deployments ? ✔ • Can we orchestrate automated infrastructure provisioning ? ✔ • Can we extend to interact with other systems and solutions such as email, change management, issue management, and project management solutions ? ✔ • Do we have a simple and easy to understand dashboard that can be displayed on big screens around the office ? ✔ • Can we interact with/or orchestrate the CI solution ? ✔ • Will it grow with our needs ? ✔ • Is it simple enough for anyone and everyone to use ? ✔ The present