In this course, you will gain practical exposure to the skills, tools, and knowledge needed in automating software engineering processes and infrastructure necessary for continuous deployment of software. Students will have the chance to build new or extend existing software engineering tools and design an automated deployment pipeline.
In the course, a mixture of traditional lectures with activities and in-class workshops will be used. During lectures, we will cover core concepts related to a topic. During the in-class workshops, we will perform sample exercises with relevant tools that reinforce lecture material. Evaluation will be based on tech talks, homework assignments, workshop attendance, and final project.
After the course, students are able to:
- Programmatically provision images.
- Automatically apply configuration management to production environments.
- Automatically create and maintain build environments.
- Maintain test suites and measure testing quality and coverage.
- Automatically generate new tests, using feedback-directed random testing, fuzzing, and data-flow analysis.
- Programmatically measure code quality via static and dynamic code analysis.
- Understand components of infrastructure.
- Remotely regulate behavior of deployed software via feature flags and configuration servers.
- Apply advanced strategies for deployment of software.
- Monitor and analyze telemetry data.
- Implement resilience testing on production environments (e.g., Chaos Monkey).
📹 Live stream and recorded videos
The following schedule is subject to change.
Class | Topics | Activities | Assignments |
---|---|---|---|
➡️ | Setup | ||
Jan 10 | Intro | ||
Course overview | Passing opunit checks | ||
Jan 12 | Basics | Basics workshop | HW-Basics |
Terminals, making windows awesome, package managers, shells | Customize your prompt, install the things | ||
markdown, git, virtualization, kanban | |||
Jan 17 | No class | ||
Jan 19 | Basics continued; What's DevOps? | ||
🧱 Computing Environments ☢️ | |||
Jan 24 | Computing Environments | ||
Headless infrastructure, virtualization concepts | Practice: Node Essentials: Promises | ||
Jan 26 | VM workshop | HW-V | |
Virtual Box and Virtualization Framework Internals | Build vagrant from scratch and bash provisioning script | ||
Jan 31 | Debugging Virtualization Problems | ||
Feb 2 | OS Virtualization | ||
Containers, overlayfs, cgroup | Build docker from scratch | ||
Feb 7 | Images | ||
Building disk images, initrd, rootfs, kernel | Build packer from scratch | ||
Feb 9 | Cloud provisioning | Build doctl from scratch | HW-P |
🚰🚀 Pipelines, CI/CD 🧪✅ | |||
Feb 14 | Pipelines | ||
Feb 16 | Pipelines Workshop | Build a deployment pipeline from scratch | |
git hooks, pre-commit, post-receive, bare repositories, process managers | |||
Feb 21 | Configuration Management | M1 | |
Feb 23 | CM, Ansible | ||
Feb 28 | Testing+Analysis | ||
Mar 2 | Fuzzing | ||
Mar 7 | Static Analysis/Code Complexity | ||
Mar 9 | Code coverage | ||
Mar 14 | Spring break | ||
Mar 16 | Spring break | ||
🚧 Infrastructure + Operations 🏗️ | |||
Mar 21 | Infrastructure concepts | M2 | |
Mar 23 | Redis | ||
Mar 28 | Deployment strategies | ||
Mar 30 | Deployment workshop | ||
Apr 4 | Monitoring | ||
Apr 6 | Monitoring workshop | ||
Apr 11 | Incidents | ||
Apr 18 | Chao engineering/feature experimentation | M3 | |
Apr 20 | Chao experiment | ||
Apr 25 | No class | ||
May 4 | Final Exam |