Giter VIP home page Giter VIP logo

devops-bootcamp's Introduction

docs/1-introduction/1.1-devops-defined.md docs/1-introduction/1.2-liatrio-and-devops.md docs/1-introduction/1.2.1-dojo.md docs/1-introduction/1.3.1-unix.md docs/1-introduction/1.3.2-vim.md docs/1-introduction/1.3.3-installations.md docs/1-introduction/1.3.4-passwords-and-keys.md docs/1-introduction/1.3.5-networking.md docs/1-introduction/1.4-external-resources.md docs/2-Github/2.2-Actions.md docs/2-Github/2.3-Projects.md docs/2-Github/2.4-APIs.md docs/2-Github/2.5-Security.md docs/3-virtual-machines-containers/3.1-golden-images.md docs/3-virtual-machines-containers/3.2-local-development.md docs/3-virtual-machines-containers/3.3-managing-infrastructure.md docs/3-virtual-machines-containers/3.4-containers.md docs/3-virtual-machines-containers/3.5.1-docker-compose.md docs/3-virtual-machines-containers/3.5.2-kubernetes.md docs/4-cloud-computing/4.0-overview.md docs/4-cloud-computing/4.1.1-aws.md docs/4-cloud-computing/4.1.2-azure.md docs/4-cloud-computing/4.2.1-s3-cloudfront.md docs/4-cloud-computing/4.2.2-ec2.md docs/4-cloud-computing/4.2.3-auto-scaling.md docs/4-cloud-computing/4.2.4-aws-packer.md docs/4-cloud-computing/4.2.5-lambda.md docs/4-cloud-computing/4.2.6-ecs.md docs/4-cloud-computing/4.3.1-storage-accounts.md docs/4-cloud-computing/4.3.2-virtual-machines.md docs/4-cloud-computing/4.3.3-vmss.md docs/4-cloud-computing/4.3.4-az-packer.md docs/4-cloud-computing/4.3.5-aci.md docs/4-cloud-computing/4.3.6-aks.md docs/4-cloud-computing/4.3.7-app-service.md docs/5-software-development-practices/5.1-overview.md docs/5-software-development-practices/5.2-jira.md docs/5-software-development-practices/5.3.1-branching-merging.md docs/5-software-development-practices/5.3.2-git.md docs/5-software-development-practices/5.3.3-github.md docs/5-software-development-practices/5.4-pairprogramming.md docs/5-software-development-practices/5.5.1-unit-testing.md docs/5-software-development-practices/5.5.2-functional-testing.md docs/5-software-development-practices/5.5.3-code-styling.md docs/5-software-development-practices/5.5.4-code-coverage.md docs/5-software-development-practices/5.5.5-test-automation.md docs/5-software-development-practices/5.5.6-sonarqube.md docs/5-software-development-practices/5.5.7-code-review.md docs/5-software-development-practices/5.6-hello-devops.md docs/6-release-management/6.1-versioning.md docs/6-release-management/6.2.1-maven.md docs/6-release-management/6.2.2-maven-integration.md docs/6-release-management/6.2.3-make.md docs/6-release-management/6.2.4-npm.md docs/6-release-management/6.2.5-go-releaser.md docs/6-release-management/6.3.1-docker.md docs/6-release-management/6.3.2-helm.md docs/7-infrastructure-configuration-management/7.1.1-terraform-getting-started.md docs/7-infrastructure-configuration-management/7.1.2-terraform-backends.md docs/7-infrastructure-configuration-management/7.1.3-terraform-modules.md docs/7-infrastructure-configuration-management/7.1.4-terraform-providers.md docs/7-infrastructure-configuration-management/7.2-ansible.md docs/8-kubernetes-container-orchestration/8.1-kubectl-ref.md docs/8-kubernetes-container-orchestration/8.2-volumes.md docs/8-kubernetes-container-orchestration/8.3-probes.md docs/8-kubernetes-container-orchestration/8.4-rbac.md docs/8-kubernetes-container-orchestration/8.5-hpas.md docs/8-kubernetes-container-orchestration/8.6-webhooks.md docs/8-kubernetes-container-orchestration/8.8-hello-k8s.md docs/9-platform-engineering/9.0-overview.md docs/9-platform-engineering/9.1-backstage.md
category estReadingMinutes
Fundamentals
30
category estReadingMinutes
Fundamentals
5
category estReadingMinutes
Fundamentals
5
category estReadingMinutes
Fundamentals
30
category estReadingMinutes exercises
Fundamentals
15
name description estMinutes technologies
hello vim
create a file in Vim
5
Vim
category estReadingMinutes
Fundamentals
10
category estReadingMinutes exercises
Fundamentals
10
name description estMinutes technologies
hello ssh
create ssh keypair and ssh to a host
15
ssh
category estReadingMinutes exercises
Fundamentals
10
name description estMinutes
hello network
explore the network of your local computer
15
category estReadingMinutes
Fundamentals
50
category estReadingMinutes exercises
CI/CD
20
name description estMinutes technologies
Augment basic workflow
Take a basic workflow and update it to include a few common things you'll see inside GitHub Actions
60
GitHub Actions
name description estMinutes technologies
Going Deeper
Take the newly improved workflow and use different methods to achieve the same thing. Introduces new important concepts/actions
120
GitHub Actions
name description estMinutes technologies
Consolidate what we have and make it reusable
Now we go one step further and take one of our jobs and make it into a composite action then take our whole workflow and bundle it into a reusable version
240
GitHub Actions
category estReadingMinutes exercises
Agile Development
5
name description estMinutes technologies
Create your own Project
Play around with GitHub Projects and get used to using its many features and interfaces to organize your work.
80
GitHub Projects
category estReadingMinutes exercises
Fundamentals
30
name description estMinutes technologies
Interact with GitHub using its two available APIs
Create and retrieve resources in GitHub using the REST and GraphQL APIs. Get some experience using them and compare the two approaches.
180
APIs
Javascript
category estReadingMinutes exercises
Fundamentals
30
name description estMinutes technologies
Code-scanning
Setup code-scanning in your own repository and view its results in the Security tab
30
GitHub Security
name description estMinutes technologies
Dependabot
Setup dependabot alerts, version and security updates
20
GitHub Security
name description estMinutes technologies
Code-scanning
Setup secret-scanning in your own repository and see how it prevents you from committing secrets
20
GitHub Security
category estReadingMinutes exercises
Virtualization
15
name description estMinutes technologies
Hello VMWare Fusion
Configure a VM with VMWare Fusion. Install some software and configure it for SSH
90
VMWare Fusion
Debian
name description estMinutes technologies
hello Packer
Use Packer to create an OVF configured identically to the VM you configured in exercise 1
210
VMWare Fusion
Packer
Debian
category estReadingMinutes exercises
Virtualization
15
name description estMinutes technologies
Packer to Vagrant
Use Packer to create an image compatible with Vagrants Base Box requirements. Leverage a Packer provisioner to add ssh key, install dependencies and tools, leverage Packer post-processor to output an vmx and a vagrant box
420
Vagrant
Packer
Debian
category estReadingMinutes exercises
Virtualization
10
name description estMinutes technologies
GitHub self-hosted runner and Nexus on VMs
Create a VM from your golden image and install and configure Nexus OSS and deploy an artifact to that VM from a GitHub Action
390
Vagrant
Debian
GitHub Actions
Nexus OSS
category estReadingMinutes exercises
Containerization
20
name description estMinutes technologies
Hello Containers
Complete Docker's 'Hello World'
30
Docker
name description estMinutes technologies
Self-hosted GitHub Action to Nexus containerized
Containerize a self-hosted GitHub Action and Nexus and build a pipeline that pushes a PetClinic build artifact from one container to the other.
150
Docker
GitHub Actions
Nexus OSS
category estReadingMinutes exercises
Container Orchestration
5
name description estMinutes technologies
Docker Compose GitHub Actions and Nexus
Create a compose file that spins up your GitHub Actions and Nexus containers, exposing ports, and using volumes for persistent storage
120
Docker
Docker Compose
GitHub Actions
Nexus OSS
category estReadingMinutes exercises
Container Orchestration
15
name description estMinutes technologies
Hello Minikube
Complete the 'Hello Minikube' tutorial
60
Kubernetes
name description estMinutes technologies
Kind cluster GitHub Actions and Nexus
Create a Kind cluster running your GitHub Actions and Nexus containers
600
Kubernetes
GitHub Actions
Nexus OSS
category estReadingMinutes
Cloud Computing
30
category estReadingMinutes
Cloud Computing
60
category estReadingMinutes
Cloud Computing
30
category estReadingMinutes exercises
Cloud Computing
20
name description estMinutes technologies
Hello S3
Host a static website in s3 publicly
150
AWS S3
AWS
name description estMinutes technologies
Hello Cloudfront
Create a CloudFront distribution for your s3 website
60
AWS S3
AWS
CloudFront
category estReadingMinutes exercises
Cloud Computing
30
name description estMinutes technologies
Hello EC2
Create EC2 VMs and configure one as a Jenkins controller server and the other as a Jenkins agent registered to the server.
240
AWS
EC2
Jenkins
category estReadingMinutes exercises
Cloud Computing
20
name description estMinutes technologies
Create EC2 instance with User Data
Create an EC2 instance running Spring PetClinic.
240
AWS
EC2
name description estMinutes technologies
Setup a Network Load Balancer
Create a Load Balancer in AWS and register 2 EC2 configured to host a web application via User Data.
60
AWS
EC2
AWS ELB
name description estMinutes technologies
Launch Templates
Create a Launch Template that will create EC2 instances configured like the vm you made in exercise 1
60
AWS
EC2
AWS Launch Templates
name description estMinutes technologies
Auto Scaling Groups
Create an AutoScaling group leveraging the Launch Template you made in exercise 3
60
AWS
EC2
AWS Launch Templates
AWS Auto Scaling Groups
AWS ELB
category estReadingMinutes exercises
Cloud Computing
20
name description estMinutes technologies
Creating a custom AMI
Create an AMI with Packer that creates a provisioned machine like the one you made in exercise 1 from 4.2.3. Create a Launch Template and Auto Scaling group to leverage your new AMI via the AWS cli
180
AWS
EC2
AWS Launch Templates
AWS Auto Scaling Groups
Packer
category estReadingMinutes exercises
Cloud Computing
20
name description estMinutes technologies
Creating a Lambda function with a trigger
Create a Lambda function that sets up an s3 bucket and a DynamoDB, downloads a csv file, and then uses a python script to parse the csv and push all the data into DynamoDB.
480
AWS
AWS Lambda
AWS S3
AWS DynamoDB
category estReadingMinutes exercises
Cloud Computing
20
name description estMinutes technologies
Creating an EKS cluster
Deploy the SockShop Demo on EKS
480
AWS
AWS EKS
Kubernetes
name description estMinutes technologies
Adding an autoscaler to your cluster
Adding an autoscaler to your cluster
240
AWS
AWS EKS
Kubernetes
name description estMinutes technologies
Create a ClusterIP service
Create a ClusterIP service
60
AWS
AWS EKS
Kubernetes
name description estMinutes technologies
Create a NodePort Service
Create a NodePort Service
60
AWS
AWS EKS
Kubernetes
name description estMinutes technologies
Create a LoadBalancer Service
Create a LoadBalancer Service
30
AWS
AWS EKS
Kubernetes
name description estMinutes technologies
Add an Ingress controller and your cluster
Add an Ingress controller and your cluster
60
AWS
AWS EKS
Kubernetes
category estReadingMinutes exercises
Cloud Computing
10
name description estMinutes technologies
Static website on Azure Blob Storage
Create a basic Angular application and deploy it to an Azure Blob Storage with an Azure CDN.
240
Azure
Azure Blob Storage
Azure CDN
Angular
category estReadingMinutes exercises
Cloud Computing
10
name description estMinutes technologies
Create Azure VM with NGINX via cloud-init
Create an Azure VM and configure it as an NGINX web server via cloud-init file.
360
Azure
Azure VM
NGINX
cloud-init
category estReadingMinutes exercises
Cloud Computing
15
name description estMinutes technologies
Create VMSS and serve content from Azure Storage Account
Create a VMSS and serve content from an Azure Storage Account. Do this via the cli, deploying a simple node web app and provision the VM's with cloud-init.
330
Azure
Azure VMSS
Azure Storage Account
Node.js
cloud-init
category estReadingMinutes exercises
Cloud Computing
5
name description estMinutes technologies
Create Shared Image Gallery with custom Azure VM image
Create a Shared Image Gallery and put a custom Azure VM image in it. Then redo the exercise in 4.3.2 with the custom image.
360
Azure
Packer
Shared Image Gallery
Azure VM
category estReadingMinutes exercises
Cloud Computing
10
name description estMinutes technologies
Deploy Node app using Docker, ACR, and ACI
Create a docker image for your Node application. Push your image into ACR. Then deploy your image via ACI.
360
Azure
Azure Container Instances (ACI)
Azure Container Registry (ACR)
Docker
Node.js
category estReadingMinutes exercises
Cloud Computing
10
name description estMinutes technologies
Deploy Node app to AKS using ACR image
Create an AKS cluster and deploy the Node application via the image uploaded to ACR made in the previous section.
240
Azure
Azure Kubernetes Service (AKS)
Azure Container Registry (ACR)
Node.js
category estReadingMinutes exercises
Cloud Computing
10
name description estMinutes technologies
Deploy Simple Web Application to App Service
Create A Web App and Scale and Monitor
240
Azure
Azure App Service
Azure CLI
category estReadingMinutes
Agile Development
90
category estReadingMinutes
Agile Development
30
category estReadingMinutes
Version Control
15
category estReadingMinutes exercises
Version Control
25
name description estMinutes technologies
Git Basics
Learn the basics of Git.
30
Git
name description estMinutes technologies
Branching and Merging
Practice branching and merging with Git.
30
Git
name description estMinutes technologies
Merge Conflicts
Learn how to resolve merge conflicts in Git.
30
Git
name description estMinutes technologies
Removing Secrets
Learn how to remove secrets from Git history.
30
Git
category estReadingMinutes exercises
Version Control
25
name description estMinutes technologies
Fork and Merge
Practice forking and merging on GitHub
30
Git
GitHub
category estReadingMinutes exercises
Agile Development
20
name description estMinutes technologies
Pair Programing
Using 'Live Share' or some equivillant try pair programming a 'Hello World' app in the language of your choice
30
VSCode
category estReadingMinutes exercises
Software Quality
20
name description estMinutes technologies
Solve a problem in Go with TDD
Solve a given problem in Go using test-driven development (TDD).
120
Go
TDD
category estReadingMinutes exercises
Software Quality
20
name description estMinutes technologies
Create functional tests with Selenium in Python
Create functional tests for the bootcamp using Selenium in Python.
120
Selenium
Python
category estReadingMinutes
Software Quality
30
category estReadingMinutes exercises
Software Quality
20
name description estMinutes technologies
Achieve 100% code coverage
Install node dependencies for code coverage (mocha, chai, nyc) and get 100% code coverage for a given module and tests.
60
Node.js
Mocha
Chai
NYC
category estReadingMinutes exercises
Software Quality
5
name description estMinutes technologies
Create a GitHub Action to test a Go project
Create a GitHub Action that will run Unit Tests when a change is pushed
180
GitHub Actions
Go
category estReadingMinutes exercises
Software Quality
10
name description estMinutes technologies
Setup SonarQube and GitHub Integration
Create a SonarQube server and add GitHub action to run SonarQube in our build pipeline.
180
SonarQube
GitHub Actions
category estReadingMinutes
Software Quality
10
category estReadingMinutes exercises
Agile Development
5
name description estMinutes
Build an application
Using what you have leanred thus far create a production ready application
3000
category estReadingMinutes exercises
Version Control
5
name description estMinutes technologies
Docker Image Versioning
Build a few docker images and play with tagging them with semantic versioning.
30
Docker
category estReadingMinutes exercises
CI/CD
20
name description estMinutes technologies
Maven Web App Creation
Create a skeleton web application using Maven, add a plugin to help with local development, update the version number and create a release.
60
Maven
category estReadingMinutes exercises
CI/CD
30
name description estMinutes technologies
Maven Integration
Get an introduction into how Maven interacts with Nexus and how to use Maven in GitHub Actions. Fork several projects, use GitHub Actions to create GitHub workflow jobs that build these projects, deploy artifacts to Nexus, set up jobs to build on commit, make changes and observe the results.
240
Maven
GitHub Actions
Nexus OSS
category estReadingMinutes exercises
CI/CD
20
name description estMinutes technologies
Makefile Exploration
Explore the Makefile of a complex project (e.g., Rode) to understand its structure and functioning. No code writing is required for this exercise, but you should spend time studying and understanding the Makefile.
60
Make
category estReadingMinutes exercises
CI/CD
15
name description estMinutes technologies
npm Practice
Install and run the Dromedary app. Determine and run the appropriate command to test the app.
45
npm
Node.js
Java
category estReadingMinutes exercises
CI/CD
5
name description estMinutes technologies
Go Releaser Exercise
Fork and clone an open source Go project, update a Self-Hosted GitHub Actions Runner to deploy a release with Go Releaser.
240
Go
Go Releaser
GitHub
GitHub Actions
category estReadingMinutes exercises
Container Orchestration
10
name description estMinutes technologies
Dockerhub Exercise
Create a Dockerhub account, create repositories, clone DevOps Knowledge Share repositories, build container images, push them to Dockerhub, create a Docker Compose file, and create a GitHub Actions Workflow.
360
Docker
Dockerhub
GitHub
GitHub Actions
category estReadingMinutes exercises
Container Orchestration
15
name description estMinutes technologies
Helm Exercise 1
Install Helm and create, install, and update a basic chart with a ConfigMap Kubernetes resource.
180
Helm
Kubernetes
name description estMinutes technologies
Helm Exercise 2
Modify an existing Helm chart to deploy the DevOps Knowledge Share API.
120
Helm
Kubernetes
Docker
GitHub
name description estMinutes technologies
Helm Exercise 3
Add a Kubernetes deployment and service to our Helm chart to deploy the DKS frontend application.
180
Helm
Kubernetes
Docker
name description estMinutes technologies
Helm Exercise 4
Create another Helm chart using the Helm Create command and configure it to deploy a GitHub self-hosted runner.
120
Helm
Kubernetes
Docker
GitHub
category estReadingMinutes exercises
Infrastructure as Code
45
name description estMinutes technologies
Getting Started with Terraform
Run through Hashicorp's tutorials to get started with either AWS or Azure. Share your experiences and learnings with your team.
60
Terraform
AWS
Azure
category estReadingMinutes exercises
Infrastructure as Code
20
name description estMinutes technologies
Sharing Terraform Workspaces
Learn how to share a Terraform workspace with your teammates and understand the role of `terraform.lock.hcl`.
60
Terraform
Terraform Cloud
GitHub
name description estMinutes technologies
Cloud Native Backends
Transition from using Terraform Cloud to using cloud native storage solutions for storing Terraform state.
120
Terraform
AWS S3
Azure Resource Manager
name description estMinutes technologies
Terraform CI/CD Automation
Create a CI/CD pipeline that enforces the main branch as the source of truth for the state of the Terraform.
420
Terraform
GitHub Actions
category estReadingMinutes exercises
Infrastructure as Code
15
name description estMinutes technologies
Registry Modules
Learn how to use registry modules to create an EC2 instance and VPC in AWS, or add an EC2 instance to an existing VPC.
90
Terraform
AWS EC2
AWS VPC
name description estMinutes technologies
Custom Modules/Local Modules
Create and use a local module for an S3 bucket in AWS.
75
Terraform
AWS S3
category estReadingMinutes exercises
Infrastructure as Code
20
name description estMinutes technologies
Provider Boilerplate
Set up the boilerplate for a Terraform provider and test it locally.
120
Terraform
Go
name description estMinutes technologies
Implementing the provider client
Implement the Terraform provider client to interact with a custom API.
240
Terraform
Go
name description estMinutes technologies
Implementing Engineer resource and datasource
Implement the CRUD operations for the Engineer resource and datasource.
300
Terraform
Go
name description estMinutes technologies
Testing
Write comprehensive tests for the Engineer resource and datasource.
120
Terraform
Go
name description estMinutes technologies
Implementing Dev or Ops resource and datasource
Implement the CRUD operations for the Dev or Ops resources and datasources.
300
Terraform
Go
category estReadingMinutes exercises
Infrastructure as Code
15
name description estMinutes technologies
Vagrant and Ansible
Provision a virtual machine and install a GitHub self-hosted runner using Ansible as a provisioner in Vagrant.
300
Ansible
Vagrant
GitHub self-hosted runner
name description estMinutes technologies
Idempotency
Provision a virtual machine and install a GitHub self-hosted runner using Ansible as a provisioner in Vagrant while maintaining idempotency.
300
Ansible
Vagrant
GitHub self-hosted runner
name description estMinutes technologies
Ansible and AWS EC2
Provision an AWS EC2 instance and install a GitHub self-hosted runner using Ansible.
300
Ansible
AWS EC2
GitHub self-hosted runner
name description estMinutes technologies
Terraform and Ansible
Provision an EC2 instance using Terraform and install a GitHub self-hosted runner with Ansible.
360
Terraform
Ansible
AWS EC2
GitHub self-hosted runner
category estReadingMinutes
Container Orchestration
120
category estReadingMinutes exercises
Container Orchestration
10
name description estMinutes technologies
Creating Persistent Volumes and Persistent Volume Claims
Create a simple Persistent Volume (PV) and Persistent Volume Claim (PVC) in Kubernetes, understand the lifecycle of PVs and PVCs, and explore how to utilize them in a pod.
120
Kubernetes
name description estMinutes technologies
Dynamic Provisioning with Storage Classes
Learn about dynamic provisioning of Persistent Volumes (PVs) using Storage Classes, create a StorageClass object, provision a PVC dynamically, and deploy Jenkins in the cluster with persistent data.
360
Kubernetes
Jenkins
category estReadingMinutes exercises
Container Orchestration
10
name description estMinutes technologies
Setup
Create a service of type NodePort and a deployment for nginx in the default namespace using Docker Desktop.
25
Docker
Kubernetes
name description estMinutes technologies
Startup Probe Config
Add a startup probe to the nginx deployment and check the logs.
45
Kubernetes
name description estMinutes technologies
Readiness Probe Config
Add a readiness probe to the nginx deployment and check the logs.
45
Kubernetes
name description estMinutes technologies
Liveness Probe Config
Add a liveness probe to the nginx deployment, configure a hostPath volume and volumeMount, and check the logs.
45
Kubernetes
category estReadingMinutes exercises
Container Orchestration
15
name description estMinutes technologies
Grant New Permissions to a ServiceAccount
Create a namespace for Jenkins, install Jenkins using helm, discover new roles, create credentials using a Kubernetes secret, and setup Jenkins.
180
Docker
Kubernetes
Helm
Jenkins
name description estMinutes technologies
Verifying RBAC Permissions
Create a new namespace, service account, cluster role, and cluster role binding, and verify the permissions.
120
Docker
Kubernetes
category estReadingMinutes exercises
Container Orchestration
15
name description estMinutes technologies
Create an HPA
Install Metrics Server, apply the deployment and service for a CPU-intensive PHP image, and create an HPA that will scale the PHP deployment based on CPU usage.
120
Docker
Kubernetes
Metrics Server
name description estMinutes technologies
Increase Server Load
Increase the PHP server load and watch how the CPU load scales.
30
Docker
Kubernetes
name description estMinutes technologies
Decrease Server Load
Decrease the server load and watch how the CPU load scales down.
30
Docker
Kubernetes
name description estMinutes technologies
HPAs with Multiple Metrics
Configure the HPA to use multiple metrics, add memory as a resource in the PHP-Apache deployment, update the HPA, and verify its functionality.
180
Docker
Kubernetes
category estReadingMinutes exercises
Container Orchestration
15
name description estMinutes technologies
Setup
Set up the environment for admission webhooks by deploying a KIND cluster with Admission Controller enabled, installing cert-manager, and creating a validation namespace, root CA, and self-signed certificate.
60
Kubernetes
KIND
cert-manager
name description estMinutes technologies
Validating Webhooks
Configure a validating webhook for pod creation and test it using the given criteria.
90
Kubernetes
Python
name description estMinutes technologies
Mutating Webhooks
Configure a mutating webhook for pod creation and test it using the given criteria.
180
Kubernetes
Python
category estReadingMinutes exercises
Container Orchestration
15
name description estMinutes technologies
Kubernetes Custom Project
Create a custom Kubernetes project, utilizing webhooks, creating a custom resource, and using Kubebuilder to create a controller which reconciles changes to the custom resource.
4800
Kubernetes
Webhooks
Custom Resources
Kubebuilder
category estReadingMinutes
Platform Engineering
15
category estReadingMinutes exercises
Platform Engineering
20
name description estMinutes technologies
Create a GitHub Organization
This exercise involves creating a GitHub Organization to simulate an integrated SCM environment, similar to what you would find in a real-world development ecosystem. Each student will create their own GitHub Organization following the provided instructions.
30
GitHub
name description estMinutes technologies
Stand up local instance of Backstage
Students will set up a local instance of Backstage by following the official Getting Started guide. This exercise covers starting the local instance, familiarizing with the UI, and customizing the appearance of the Backstage instance including logo and application name changes. Extra credit is given for applying a custom theme. The customized instance should then be pushed to a repo in the newly created GitHub Organization.
60
Backstage
Docker
name description estMinutes technologies
Configure Authentication via GitHub
This exercise focuses on configuring authentication for the Backstage instance using GitHub. Students will create an OAuth app within their GitHub Organization and integrate it with Backstage for authentication purposes. This includes not storing secrets in plain text and ensuring secure authentication practices. Verification of login functionality through GitHub is the final step to confirm successful integration.
120
Backstage
GitHub

Liatrio Logomark

Liatrio's DevOps Bootcamp

Introduction

Welcome! You must be here because you're interested in DevOps. Don't worry, we'll get to that in a moment! First, let's briefly go over some details.

"1.0" can be referred to as "Chapter One," while "1.2" can be referred to as "Chapter One, Section Two."

Target Audience

This DevOps Bootcamp is used as an introduction to DevOps for Liatrio's apprentices. Therefore, there are deliverables at the end of each section and knowledge checks sprinkled throughout that help guide the apprentices' training. However, anyone can go through the DevOps Bootcamp. Feel free to ignore the deliverables, knowledge checks, etc. This bootcamp also assumes the bootcamper is using a Mac for the deliverables.

Disclaimer

This bootcamp alone will by no means make anyone an expert on DevOps; that's where real, in-the-field experience engineering and shadowing come in. However, this bootcamp is a great start for anyone entering the world of DevOps! It is recommended that anyone going through this bootcamp have a mentor to fill in the gaps of information and answer questions, as well. Also, many of the exercises proposed in this bootcamp have no solution listed. This is because it is up to the bootcamper to come up with the solution on their own. So, if you're wondering where a solution to an exercise is - there is likely none; that's up to you!

Learning Goals

  1. Introduction to DevOps
  2. GitHub
  3. Virtual Machines and Containers
  4. Cloud Computing
  5. Development Practices
  6. Release Management
  7. Infrastructure and Configuration
  8. Kubernetes

Expectations

  1. Share what you learn. Knowledge is best retained when you can teach it back yourself.
  2. If you're participating in the bootcamp with others, lift them up instead of speeding past them.
  3. Your learning should be in a demonstrable state at any given time.
  4. Slow and steady wins the race. If you don't fully understand something, speak up for help and spend more time on it.
  5. Be transparent in your progress.
  6. Have fun!

"It's better to over communicate than to under communicate."

Deliverable and Knowledge Check Format

Deliverables

If you are an apprentice (or if you just want to add to your learning), here's a little insight on the deliverables the bootcamp will provide. At the end of each section, you will typically encounter a bulleted list of deliverables. They will usually be structured to get you thinking/reflecting/researching key points that the section covered.

Knowledge Checks

As mentioned before, you'll also find small knowledge checks sprinkled throughout the bootcamp. Don't worry, they aren't graded and scores aren't tracked, so there's zero pressure when it comes to them. That being said, they are very valuable for learning, so it would be wise to take the time to not only get the correct answers on them, but to really understand why those are the correct answers.

Here's a sample knowledge check to show you how they'll behave:

Contributing

This bootcamp was adapted from an apprentice training program, and some mistakes may have slipped through the cracks. If you see any errors, outdated methods, or citation errors please submit a pull request.

Local Development

Below are a number of ways to develop locally, choose whichever you are most comfortable with.

Using Package.json Recommended

Install Docsify locally (in current directory)

  1. Run npm install
  2. Run npm start
  3. Open http://localhost:3000

Global Install

Install Docsify Globally in your system

  1. Install docsify
  2. Navigate to local library of onboarding
  3. Run docsify serve .
  4. Open http://localhost:3000

Docker

Use Docker to build and serve the content, but remember to rebuild the Docker image to review changes

Build and Run Docker Container

  1. Execute docker build . -t devops-bootcamp from the project's root directory to generate a container image
  2. Run docker run -d -p 3000:3000 --name devops-bootcamp devops-bootcamp to run a detached Docker container
  3. Open http://localhost:3000

Docker Compose

  1. Run docker compose up -d
  2. Open http://localhost:3000

More Information on Contributing

  • Images should be placed under the root img folder and referred to using HTML <img> tags
  • H3 header (###) should be the default header within a page
  • H2 header (##) will appear in the navigation as the page's table of contents

Contributors

classroom image classroom image

devops-bootcamp's People

Contributors

amber-beasley-liatrio avatar bfisch14 avatar cfculler avatar chodges7 avatar chrisschreiber avatar densellp avatar dependabot[bot] avatar empyreus avatar gnmeyer avatar ianhundere avatar jburns24 avatar jonrudy avatar kdeardorff2 avatar kialryan avatar matt2m avatar mcbillings avatar meher-liatrio avatar micahperez2 avatar minecraftst3v3 avatar nsshaddox avatar pactionly avatar ramcguire avatar renovate[bot] avatar shanemacbride avatar sloanetribble avatar snowmang1 avatar ssmathistad avatar tnishida1 avatar wolftousen avatar zjorge96 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

devops-bootcamp's Issues

define markdown linting rules

We have added markdown linting to the bootcamp and a github action. The CI action does not block any merges or pushes as there are still violations we need to make a choice on.

The action on this ticket is to

  • Review violations and make executive choice on if we should fix or ignore the rule
  • Build out rule file
  • Fix or exclude all rule violations
  • change github action to block on error

Update 3.2.3 Exercise 1

Apprentices said they had issues with the exercise. Most of the issues seemed to getting spring petclinic running in centOS 7. we should be using CentOS 9 since 7 is EOL. And getting the official spring petclinic running on centOS 9 was straight forward. This seems like a good update as it removes tech debt and allows campers to focus on the exercise lesson of spinning up EC2 instances with userdata

Refactor Lambda Section

  • Fix Formatting
  • Remove alternative step to create DB through Lambda
  • Clarify Step for s3 event creation
  • Add deliverables
  • Benefits and Use Cases of Lambdas

Creating Github section

Adding initial Github sections to the bootcamp involving Actions, Projects, API's, and maybe a little bit about Security. Goal is to create an iterative project where you end up with a pretty flushed out Org, repos, workflows etc to reference later. Should be easy to add on to.

Review section 3.2.3 "AWS Auto Scaling"

https://devops-bootcamp.liatr.io/#/3-cloud-computing/3.2.3-auto-scaling

Image

Amazon is deprecating 'launch configurations' for Amazon EC2 Auto Scaling and is migrating to 'Launch Templates'. We need to update 3.2.3 to use Launch Templates

Migrate to Launch Templates

Tasks

2.5.1 Jenkins replacement - Docker Compose

Depends on #302

Learning Goal

Docker Compose

This one looks pretty straight forward but depends on 2.4. Just update it to mention GitHub runner. This section is also missing Deliverables so that would be a welcome add

3.2.2 Jenkins replacement - EC2

Learning Goal

Introduction to EC2

The exercise in this section is to spin up two EC2 instances make one a Jenkins server and the other a Jenkins agent. Then run some builds on the hosts. Really Jenkins just servers as a 'thing to install' that also communicates with another host. We can do lots of things here.

I am not really opposed to keeping this section as Jenkins. Since it is still a relevant CI/CD tool that some of our clients use. If we keep this as Jenkins given we are stripping much of the other Jenkins sections out we should update this section to have more general information about Jenkins and point apprentices to docs so for creating a pipeline.

If we want to remove Jenkins here are a few ideas for alternatives I think would be beneficial:

Grafana -- one node as a Grafana server the other node running a data collection agent like telegraf https://grafana.com/tutorials/stream-metrics-from-telegraf-to-grafana

Ansible -- one node as an Ansible server the other as a node with the Ansible agent. Then apply a simple playbook that installs put a hello world text file on the node with the agent.

Zabbix server -- setup basic monitor on other node

  • Deliverables could use some love here

Make Chapter 3 exercises M1/M2 compatible

The Problem

Chapter 2 of the bootcamp is centered around Virtualization. The chapter tells the following 'story' with its exercises. The camper is introduced to virtualization via a GUI and VirtualBox. Then they are introduced to Packer leveraging VirtualBox plugins to build custom vbox images. Then they are shown Vagrant and leverage their Packer script to create custom vbox machines with Vagrant.

As a company we have moved to Apple Silicon which is an ARM processor. VirtualBox is an x86 hypervisor and while there is a developer build that runs on m1/m2 chips this build essentially converts ARM commands to x86 commands and does so poorly. The result is this build does not work for any modern nix system. Threads suggest this will never really become a production ready thing and so alternatives are needed.

Options

The options for ARM virtualization is limited. Especially if we are looking for free solutions. There seems to be well supported paid solutions in VMWare and Parallels that integrate (seemingly) well with both Packer and Vagrant so either of these appear to be near 1-to-1 substitutions with VirtualBox bound exercises. As for free options there really is only QEMU.

QEMU

QEMU is a generic machine emulator with support for a wide array of architectures, aarch64 included. At a glance it seems like a good fit as there is the UTM project for a simple GUI experience, there is a Packer QEMU Builder, and a Vagrant QEMU Provider. But the devil is in the details.

UTM

This seems to work well enough for the exercises. It is already in the bootcamp and works with CentOS 9 images. I did have issues booting CentOS 7 images but if we have one (and the preferred most recent version of redhat we are probably OK)

QEMU Packer Builder

This builder targets KVM. This really is the 'normal' way that QEMU does virtualization. As previously stated QEMU is an emulator. Actually virtualization happens with KVM. KVM is and x86 project and not available on apple silicon. So without it QEMU has to emulate using accelerators and JIT translations. The packer builder is not really made for aarch64 versions of QEMU. And while it can can be modified I was unable to get it to work. Below are some of the stand out changes that had to be made and were I got blocked

source "qemu" "centos9" {
  iso_url = "https://mirror.stream.centos.org/9-stream/BaseOS/aarch64/iso/CentOS-Stream-9-20230508.0-aarch64-dvd1.iso"
  iso_checksum = "766b79db253487ad0ccebcc6dd4f72848357e10cffe03adc6a03a70d6bdbe6c7"
  disk_size = 10240
  headless = true
  use_default_display=true
  qemu_binary = "/opt/homebrew/bin/qemu-system-aarch64"
  machine_type = "virt"
  memory = 4096
  format = "qcow2"
  http_directory = "http"
  http_port_min = 8000
  http_port_max = 9000
  boot_wait = "2s"
  boot_command = ["<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/anaconda-ks.cfg<enter><wait>"]
  ssh_username = "jburns"
  ssh_password = "vagrant"
  ssh_port = 22
  ssh_wait_timeout = "10000s"
  shutdown_command = "echo 'jburns'|sudo -S shutdown -P now"
}

build {
  sources = [
    "source.qemu.centos9"
  ]
}

headless = true -- was required as gtk is the default and did not work. I did not dig into this any further as headless should be fine
accelerator='tcg' -- or omitting the accelerator parameter is required. This defaults to KVM which is x86 and does not work on m1/m2s.
qemu_binary = "/opt/homebrew/bin/qemu-system-aarch64" -- This is required as by default since this targets KVM it tries to launch the x86 build of QEMU which will not work. Overriding this will target the correct arch for m1/m2
machine_type = "virt" -- Because we change the qemu_binary we have to update this option as the default does not work. This is concerning as it shows the plugin is opinionated towards x86 qemu and many options could need to be changed.

This is where my investigation was stopped. First this is hacky and not how this builder is intended to work. Secondly I never got it to work. With these changes I was running into this error 2023/05/15 14:14:23 packer-builder-qemu plugin: Qemu stderr: qemu-system-aarch64: no function defined to set boot device list for this architecture which from what I could gather was because the machine_type passed does not support the -boot flag that the plugin was trying to execute with. A suggested option was to supply the builder with etk2 bios but this needs to be compiled for you architecture and that is where I figured I am trying to fit a square peg into a round hole.

Vagrant QEMU plugin

Simple example of this worked OOTB and might be a good replacement. Though this is not a true test and we would need to see if we could get this provider to work with an image built by packer which I could never get working.

Parallels

At a glance it works on M1/M2 chips but is a paid product. Looks like we could get 5 seats for $89.99 a year with a 2 year contract. These seats can be reassigned. Parallels is well supported both in Packer and Vagrant. Could be an alternative but has a cost

VMWare

Also well supported with Packer and Vagrant and does work in M1/M2 chips. They do have a Free Personal License that we might be able to leverage for this section as it is for home use, educational purpose or Open Source contributors. Given the bootcamp is non commercial I am interested to see if this could work for us. Otherwise I think cost prohibits this option

Add word cloud to devops bootcamp showing technologies we cover

In a recent PR (#286) we added metadata about the bootcamp. This metadata allows us to to create some visualizations using chart.js. One of the things collected in the metadata is an array of technologies that are used in each exercise. Usuing this data and chartjs-chart-wordcloud we can create a wordcloud of technologies we use. This would be a good add to the bootcamp landing page

2.5.2 Jenkins replacement - Kubernetes

Testing the changes here will depend on the images created in #302

Learning Goal

Crash course on Kubernetes -- This gets covered in a much greater depth later in the bootcamp

The task here is to migrate Exercise 2 to leverage the Github self-hosted runner Artifactory pipeline we have been working with in chapter 2. But this time to deploy the containers created in 2.4 via k8. Ultimately building Spring Pet Clinic on the pods

5.4.1 Jenkins replacement - Docker

Learning Goal

Using a pipeline to build and publish Docker images

Previously this was done in a Jenkins pipeline. Switch this to use a GHA, seems straight forward

4.5.6 Jenkins replacement - SonarQube

Tasks

I have found this; an official plugin for GitHub actions from SonarQube that could make this replacement simple. This should use a simplistic actions as the point of this section is SonarQube,
not GitHub actions. If the plugin is used please include a link or reference so that more information is available, if desired.

7.2 7.4 Jenkins replacement

I personally think it is fine to leave Jenkins in both of these sections.

Depending on what we decide to do with #305 we might want to update 7.2 to have a brief introduction to Jenkins since that might be the first time it is encountered.

SPIKE: Reviewing/doing DevOps Bootcamp for edits/feedback

Description

As a pair of fresh 👀, read/do devops bootcamp in order to provide either overall feedback or edits which could include either removing or adding sections to the overall program. Comments will be left below as well as potential changes and/or feedback via DevOps Bootcamp Content Review.

Acceptance Criteria

  • Review and/or do DevOps Camp
    • ch1
    • ch2
    • ch3
    • ch4
    • ch5
    • ch6
    • ch7
    • addendum
  • Provide potential:
    • add markdown config file; .markdownlint.json
    • various edits / additions

Update Chapter 2 Vagrant sections of the bootcamp to use QEMU vagrant provider

We recently reworked chapter 2 of the bootcamp because at this time VirtualBox does not work with M1/M2 macs. VirtualBox is the default provider for Vagrant making the Vagrants sections DOA. Found a Vagrant Plugin that adds QEMU as a provider for VirtualBox. At a glance this looks like it will allow us to still do the Vagrant sections as it is tested on M1 macs and with a CentOS 7 image.

https://github.com/ppggff/vagrant-qemu

Swap Aritfactory out for a FOSS alternative

Artifactory looks to no longer be free. It has a 14 day trial but that is no good since we ask apprentices to use this server multiple times in the bootcamp.

Sonatype Nexus Repository -- Looks like a popular FOSS alternative

Bootcamp time estimate

We want to get an estimate on the Bootcamp. To make sure it fits within our 6 month goal. This doc will be our living estimate doc. I hope to get feedback from current apprentices and future apprentices so we can refine our estimates

Continious Testing Project

Tasks

Create dynamic charts in the bootcamp to show where time in the bootcamp is spent

There has been an effort to get an idea of what is covered in the bootcamp. At a high level we want to know roughly how long the bootcamp takes and what technologies and categories are covered. Initially I was going the route of putting this in a google sheet which works for quick and dirty stuff but ultimately we want this information to be shared with the world and talked about putting this in a blog post.

This kind of sucks as the blog post will not age well. Instead we should come up with a dynamic way to put this metadata in the bootcamp and have visualizations generated on the bootcamp

5.4.2 Jenkins replacement - Helm

Learning Goal

helm create

Update Exercise 4 to create a chart to deploy a GH self-hosted runner. This should leverage the image created in previous chapters

Jenkins 2.3 replacement - Managing Infrastucture

Tasks

Learning Goal

'Real world' example configuring vm's and communicating between your vms

What it does now

Leverages a Golden Image created in an earlier exercise (centos7 with java installed) to stand up a Jenkins server. Using the same golden image stand up an Artifactory server. Connect the two and build a pipeline that publishes a build artifact to the artifactory instance

What it should go to

Using the Golden Image (For the developer just stand up a centos7 vm locally that should be good enough) make it a self-hosted GitHub runner. Standup another CentOS7 vm and install Artifactory on it. Create workflow that uses jFrog Artifactory action to push to artifactory vm after build of spring pet clinic.

Resolve text-linter job violations

Description

Now that the text-linter job is working against all markdown files, the violations associated with those files need to be resolved. This can be done manually by fixing each such violation, via the .markdownlint.json file, or a combination of the two. Ideally, this is done in collaboration with the Flywheel Team as a whole to ensure we're not simply ignoring all violations via the .markdownlint.json file.

Acceptance Criteria

  • All violations have been resolved:
    • manually
    • using the .markdownlint.json file
  • reenable glob:
          globs: |
            *.md
            **/*.md

Fix up 3.2.1

  • Update repo so it works
  • Update section in bootcamp to reference new repo
  • Add section about bucket policies

Review 3.2.6 Exercise 2

In the glowing jaguars we due to time constrains skipped exercise 2 in 3.2.6 (ECS Socks Shop). An apprentice briefly attempted this section and reported that the deploy script for ECS did not work. This needs to be reviewed and possibly fixed

Research alternative spell check packages

We recently added a spell check package to the bootcamp to fix errors easily and have some automation around typos. The package we picked markdown-spellchecker is not well maintained and not very extensible

https://www.npmjs.com/package/markdown-spellcheck
https://www.npmjs.com/package/cspell

Let's explore something like cspell or another well maintained npm spell checker. Things that I am looking for are

  • well maintained
  • extensible configuration
  • pattern support in dictionaries
  • git hook on pre-commit
  • and then github action on pull request

bootcamp deploy action investigation

tasklist

  • fork bootcamp
  • write build and deploy actions

checks

  • is the deployment lib out of date in builtin deploy action?
  • is the auto deploy action causing problems across all browsers?

Remove Realworld from the bootcamp

Realworld is an outdated set of frontend and backend applications intended to function together, but in actuality are quite difficult to configure to work with one another. This causes an unnecessary blocker, halting the learning process of deploying containers to AWS/Azure. Proposing the creation of a simple, Liatrio managed frontend and backend that serves the same learning purpose as Realworld.

It is mostly used throughout chapter 3 with references in chapter 5. First look is linked below.

https://devops-bootcamp.liatr.io/#/3-cloud-computing/3.2.1-s3-cloudfront?id=create-a-website-using-an-s3-bucket
https://codebase.show/projects/realworld

5.3.5 Jenkins replacement - Go Releaser

Learning Goal

Making Go releases with GoReleaser

Pretty straight forward one changing a Jenkins pipeline that builds a Go binary and publishes it to a GitHub repo to a GHA pipeline that does the same thing

Add all the linting to devops-bootcamp

I was reviewing the devops-bootcamp repo and realized that we didn’t support local development on it well (globally installing npm packages with vulnerability is ). As a quick and dirty way to get this spun up I leveraged the package choices I found in the liatrio onboarding repo.

The dev dependency that got added was a linter called remark which we use in the onboarding repo. This got me thinking and looking into other linters we can add specifically for spelling, and clarity. But I also think we can reevaluate the markdown linter. A quick search lead me to this post where someone talked about what they thought were good linters and why. https://earthly.dev/blog/markdown-lint/

The way I see this ticket there are a few things to research and decide on:

What linters should we add (I am inclined to say for sure a markdown linter and a spelling linter)

Which linter should we use. I am usually inclined to go with tools that get active development, fit our existing tech stack.

And then add these linters.

I would guess that after adding linters we might find many violations. I would suggest addressing those violations as a fast-follow to keep pr’s segregated

Fix link & punctuation for section 3.2.4

  • The link is "Build an image" which links to a docker tutorial. We want the AWS version. Press the docker button in the top left to go back and get the AWS link.
  • Run it through Grammerly or other.

4.5.5 Jenkins replacement - Automated Tests

Tasks

Learning Goal: Test automation in a pipeline

Currently: Leverages a Docker container running Jenkins to run automated tests from a forked repo

We should migrate this to setting up a github action that runs your Go unit tests. Then a dependent action that builds your application.

I am not sure if the best practice is to separate these into different workflow files and link them or have them in a single job. Please try to reflect either the industry best practice here or Liatrio's POV

Think it would be cool if we also added a section about status badges for the Automated Tests workflow

Check these

  • Go unit tests can be run simply by GitHub actions

Research adding regression test automation to the bootcamp

Poking around the bootcamp I found an unfinished webdriver file. It would be nice to get some basic smoke tests added to the bootcamp so eventually we can add some automation around running these.

I am not sure if webdriver is the right tool for the job. But this concern is mainly thinking ahead on how this might be automated. My first instinct was to want these tests eventually added to a GitHub action. And I am not sure how this would work in a headless environment (I know webdriver can handle headless environments but can GitHub actions?). If this is overly complicated then maybe checking for a 200 is all we need. Does that happen pre or post merge? If so do we auto rollback?

Maybe the juice isn't worth the squeeze for fully automated regression tests. And maybe we just want to clean up this webdriver file.

TL'DR: there is an incomplete and seemingly unused test file. We should do something about it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.