First rule of DevOps is: you do not talk about DevOps
I always admired those statements, when somebody tried to impress me with some numbers. "Amazon deploys into production 10 times per minute!", they've say. Not that I would doubt that, not that I would actually need that, but I decided to find out, how exactly is this done.
I started to use AWS in April 2016 and my goal was to create fully automatic pipeline in a form of PaaS - meaning infrastructure build, test and deployment, application build, test and deployment, and all of that without a touch of human hand. And because I have only free account, I decided to do this with limited or no budget at all.
First week - Elastic Beanstalk and manual deployment from prepared ZIP file.
Second week - AWS CodePipeline with connection to GitHub repository, deploying new webapp to the webserver.
Third week - Java pipeline with build step and more complex deployment process with multiple scripts, again, all controlled from GitHub repository.
Fourth week - AWS Opsworks with CodePipeline, taking source code of infrastructure from various Chef recipes stored on GitHub, deploying application with next step. Manual approval added for higher control, where it's needed.
Fifth week - Hubot integration into a Slack channel, where each developer from the team can execute predefined set of AWS command, to give them environment on demand.
Sixth week - Dockerization of whole application, deployment to Docker host on local machine, later also to cloud host.
Seventh week - playing with Heroku to get inspiration of faster deployments, leading to discovery of Empire and Rancher (meaning your application and deployment is not bonded with specific cloud provider, you can deploy with the very same pipeline on bare metal machine as well).
Eight week - migrating developers from obsolete Subversion and Clearcase to GitHub Enterprise, teaching them new workflow and social elements, supporting community development.
After two months, I can proudly announce, that my initial goal was fulfilled. Not exactly as I planned, I had to change some concepts, based on things I learned. It was actually better than I was planning, it was really working, not only some theory on a piece of paper. It allowed me to really look at our company with different eyes, enabling me to improve culture (because technology will always follow, that's the least problem).
That was easier than I thought!
So what is next?
I need to discover automated testing and test driven development, as natural part of my pipeline. That also implies I would need to have slightly more complex staging for any software component (so not only application, but also infrastructure).
I need to learn GoLang and I need to learn serverless concepts like AWS Lambda (which I'm currently using in my AWS pipeline, but only to do some simple messaging to Slack).
Finally, I have to change culture or DNA of our company, to use all of the knowledge in right way.
Ask me in two months again. Let's see, what I can achieve.