Introduction to DevOps and deploying applications in the cloud. (What is the “Ops” part of DevOps and what tools are commonly used and why)
Overview of scripting languages (Bash, we can include Python if we would like)
Linux essentials for DevOps (file systems, permissions, command line tools (Linux Course))
Automating tasks with scripting (Linux Course has intro to Scripting and automating the process of deploying an application)
Version control systems (e.g., Git) and their importance in DevOps workflows (Also included within the Linux course)
Week 2: AWS
Setting up an AWS account and accessing AWS resources (This will most likely include an intro to accessing our AWS account using an IAM user created for each student. We can even automate this with Terraform as a demo)
Understanding key AWS services for DevOps (e.g., EC2, S3, RDS) (These are the “Core” AWS resources and simply the most relavant to what the learners will most likely already know about)
Provisioning and managing infrastructure using AWS CloudFormation or Terraform (This process can look like the following: Completing everything within the console, take everything that we did and move it to Terraform)
Deploying applications on AWS (we can potentially use Digital Ocean for this class as well. There are some benefits like referring a friend to receive credits in the future.)
This is already included in a walkthrough or two within the AWS curriculum that has been created. We can customize it as we would like.
Week 3: CI/CD Pipelines / Testing
Continuous Integration and Continuous Deployment concepts (This is the why)
Setting up CI/CD pipelines using popular tools (e.g., Jenkins, GitLab CI/CD, Github Actions)
Jenkins hardware requirements:
Minimum hardware requirements:
256 MB of RAM
1 GB of drive space (although 10 GB is a recommended minimum if running Jenkins as a Docker container)
Introduction to testing methodologies (unit, integration, system testing)
Test automation frameworks and tools (e.g., JUnit, Selenium, Cypress)
Security best practices in DevOps (vulnerability scanning, secure coding practices)
Implementing security measures in CI/CD pipelines (Environment Variables, common problem among learners)
Week 4-5: Containerization and any additional Security / Logging
Introduction to containerization and its benefits (Why do it? What are the benefits? What kinds of architechtures use containers ie: Monolithic vs Microservices)
Docker fundamentals (containers, images, Dockerfile)
- gisdevops has a what is docker and installation steps for MAC
- gisdevops walkthrough: intro to docker includes the following:
- common docker commands
- simple python web app
- creating a dockerfile
- creating a container
- a more complex python app
- docker compose file
- docker logs
Building and managing Docker containers (Common commands, ports to open, how to access container with shell)
Container orchestration with Kubernetes (Introduced with Minikube)
Deploying and scaling applications using Kubernetes (Can also be completed with Minikube)
Course Delivery:
Ideally one lead instructor and 1-2 TAs depending on the size of the class
I think that the walkthrough style of the Linux course is great to allow asynchronous delivery
This would leave space to create additional requirements for assignments for the in-class participants
This would allow instructors creative freedom to deliver material outside of the content within the book to expand on certain topics
Course Content / Goals
I think that similar to LC101 and other courses we would want to have assignments due at the end of each week.
To this same regard I think that each Friday or the 5th day should leave a decent chunk of time to complete the assignment
In relation to a project I believe that the ideal candidate for this class already has a working application that can either be:
refactored in some way to be an ideal target for deployments
We want the learners of this course to be focused on manipulating the application so that it can be packaged, tested, and delivered with the push of a button.
If we decide to have the learners build their own application within a 4-5 week course my concern is that it would take too much time and be a blocker from learning other content within the course.
Ideal Project Requirements
Project must be in a working state
Project ideally is connected to a database
Project must have tests
Any language is okay
Template Projects
Provide template projects for deployment targets?
Other Project Ideas
Should we have each learner deploy a hugo project that acts as their own personal website?