DevOps has a wide variety of practices, tools, and methodologies, which enable it to be an important part of an agile delivery culture.
This ramp-up is presented as a series of challenges. Each challenge is chosen to show beginners the basics of some of the DevOps practices, and it is designed to help us use the same language after its completion. We are tool agnostics, so you can use any tool you like, but we do have a client base that need us to be proficient in some basic AWS concepts.
You are going to set up a Continuous Delivery pipeline for an application from scratch.
In challenges 1 to 4, you will have to set up the Source Code Management tool and branching methodologies, set up cloud based environments for the application, gain experience with configuration management tools, and set up Continuous Integration. All challenges are meant to use the same application.
Challenges 5 to 8 build upon your pipeline to include more practices. These ones are open for you to choose the tool stack of your preference.
This is an optional challenge and should be taken if you feel like refreshing your RHEL/GNU Linux knowledge. Just complete this course.
The objective of this challenge is to set up git-flow on a GitHub repository.
- Clone these repositories (if you are using Windows, install Git for Windows in case you haven't already...).
git clone https://github.com/juan-ruiz/movie-analyst-api.git
git clone https://github.com/juan-ruiz/movie-analyst-ui.git
-
Define a branching strategy that complies to GitFlow, and create the necessary branches (such as
develop
) on each repo -
Fix all bugs in the proper branches, until the app runs smoothly
-
Provide a diagram of your branching strategy
Porpuesta: Vagrant para virtualización y que ahí se desarrolle CM
The objective of this challenge is to set up the environments on which the application will run. To complete this challenge, create the environments to run the application you cloned in the last challenge.
Steps:
- Create an AWS account
- Setup a custom VPC.
- Create a public and a private subnet.
- Create route tables.
- Setup a connection to internet (Internet Gateway and NAT).
- Create ACL and SG's (Security).
- Setup EC2 instances.
- Create auto scaling groups
- Create a load balancer
To complete this challenge, use any CM tool to automate the deployment of the application requirements in the newly created environment. Dependencies required to run the app should be clear since challenge 1. Ansible is encouraged for beginners, but feel free to use Chef or Puppet instead. Proper management of key pairs for SSH access is crucial to this challenge. Remember dynamic inventory.
To complete this challenge, create all the Jenkins jobs needed to automate CI/CD on the newly created environment. Check the application folders, create separate repos and deploy them automatically every time there's a new change in the code repository. If you feel like using a different CI tool, please do!
To complete this challenge, define a tool stack, install and set up a monitoring strategy for the environments.
To complete this challenge, create registry, dockerfiles and images for the installed apps.
To complete this challenge, choose a tool and create cluster for the app we've used.
In case you already have some knowledge on AWS basics, this setup is meant to create a high availability architecture.
Additional steps for this setup.
- Setup an Elastic Load Balancer.
- Create a new subnet in a different availability zone.
- Set up a DMZ with a proxy server (Nginx is recommended).
- Use RDS service to create a read replica in one of the AZs.
To complete this challenge, choose tool and create the necessary scripts to automate the provisioning of the environments for the application.
To complete this challenge, harden your application.
If you still have time to spare, create your own challenge and show the rest of us the implementation of other DevOps dealings. Examples: Artifact Repository configuration, Test Automation Frameworks integration, Database deployment automation, packaging management automation, build scripting frameworks, release management tools, etc.