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 |
|
|
|
|
category |
estReadingMinutes |
Fundamentals |
10 |
|
category |
estReadingMinutes |
exercises |
Fundamentals |
10 |
name |
description |
estMinutes |
technologies |
hello ssh |
create ssh keypair and ssh to a host |
15 |
|
|
|
|
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 |
|
|
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 |
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Dependabot |
Setup dependabot alerts, version and security updates |
20 |
|
|
name |
description |
estMinutes |
technologies |
Code-scanning |
Setup secret-scanning in your own repository and see how it prevents you from committing secrets |
20 |
|
|
|
|
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 |
|
|
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 |
|
|
|
|
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 |
|
|
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 |
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Hello Cloudfront |
Create a CloudFront distribution for your s3 website |
60 |
|
|
|
|
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 |
|
|
|
|
category |
estReadingMinutes |
exercises |
Cloud Computing |
20 |
name |
description |
estMinutes |
technologies |
Create EC2 instance with User Data |
Create an EC2 instance running Spring PetClinic. |
240 |
|
|
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 |
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Adding an autoscaler to your cluster |
Adding an autoscaler to your cluster |
240 |
|
|
name |
description |
estMinutes |
technologies |
Create a ClusterIP service |
Create a ClusterIP service |
60 |
|
|
name |
description |
estMinutes |
technologies |
Create a NodePort Service |
Create a NodePort Service |
60 |
|
|
name |
description |
estMinutes |
technologies |
Create a LoadBalancer Service |
Create a LoadBalancer Service |
30 |
|
|
name |
description |
estMinutes |
technologies |
Add an Ingress controller and your cluster |
Add an Ingress controller and your cluster |
60 |
|
|
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Branching and Merging |
Practice branching and merging with Git. |
30 |
|
|
name |
description |
estMinutes |
technologies |
Merge Conflicts |
Learn how to resolve merge conflicts in Git. |
30 |
|
|
name |
description |
estMinutes |
technologies |
Removing Secrets |
Learn how to remove secrets from Git history. |
30 |
|
|
|
|
category |
estReadingMinutes |
exercises |
Version Control |
25 |
name |
description |
estMinutes |
technologies |
Fork and Merge |
Practice forking and merging on GitHub |
30 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 (jest) and get 100% code coverage for a given module and tests. |
60 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
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 |
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Implementing the provider client |
Implement the Terraform provider client to interact with a custom API. |
240 |
|
|
name |
description |
estMinutes |
technologies |
Implementing Engineer resource and datasource |
Implement the CRUD operations for the Engineer resource and datasource. |
300 |
|
|
name |
description |
estMinutes |
technologies |
Testing |
Write comprehensive tests for the Engineer resource and datasource. |
120 |
|
|
name |
description |
estMinutes |
technologies |
Implementing Dev or Ops resource and datasource |
Implement the CRUD operations for the Dev or Ops resources and datasources. |
300 |
|
|
|
|
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 |
|
|
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 |
|
|
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Startup Probe Config |
Add a startup probe to the nginx deployment and check the logs. |
45 |
|
|
name |
description |
estMinutes |
technologies |
Readiness Probe Config |
Add a readiness probe to the nginx deployment and check the logs. |
45 |
|
|
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 |
|
|
|
|
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 |
|
|
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Decrease Server Load |
Decrease the server load and watch how the CPU load scales down. |
30 |
|
|
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 |
|
|
|
|
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 |
|
|
name |
description |
estMinutes |
technologies |
Mutating Webhooks |
Configure a mutating webhook for pod creation and test it using the given criteria. |
180 |
|
|
|
|
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 |
|
|
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 |
|
|
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 |
|
|
|
|
category |
estReadingMinutes |
exercises |
Backstage Software Catalog |
20 |
name |
description |
estMinutes |
technologies |
Entity Registration |
This exercise instructs students to register an entity to their local Backstage instance. The entity should correspond to a repo belonging to a GitHub organization that the student owns. This exercise will require students to configure their Backstage instance to have the permissions needed to access their GitHub organization and will help pave the way for the following exercise.
|
20 |
|
|
name |
description |
estMinutes |
technologies |
Catalog Ingestion |
Students will configure their Backstage instance to automatically perform read operations on a given GitHub organization and ingest `catalog-info.yaml` files existing in that organization in order to automatically register entities. They will need to configure GitHub as a catalog and ensure that their Backstage instance combs their organization for the correct file(s) at an appropriate interval.
|
80 |
|
|
name |
description |
estMinutes |
technologies |
Dependency Graphs |
Students will fork two interdependent repos to their organization and ensure that their Backstage instance recognizes the two repos while also displaying the repos' interdependence via the "Relations" section of their overviews in the UI. This requires a thorough understanding of the available fields in `catalog-info.yaml` files along with a Backstage app's configuration file.
|
120 |
|
|
name |
description |
estMinutes |
technologies |
OpenAPI Definitions |
Here, students are required to provide an OpenAPI specification which their Backstage instance can ingest and associate with a definition for an API having source code in a repo owned by the student's organization. Students may use a repo that already has an OpenAPI spec file or they may generate the necessary spec data from an API.
|
30 |
|
|
|
|
category |
estReadingMinutes |
exercises |
TechDocs |
10 |
name |
description |
estMinutes |
technologies |
Enable Documentation for an Existing Entity |
This exercise instructs students to add the bare minimum amount of files needed for their Backstage instance to generate an MkDocs site and associate it with an entity in their Software Catalog. Extra credit is offered for studying Backstage's ability to search within TechDocs stored in the Catalog -- the basic setup we point students towards in this exercise can lead to a search-related bug which is valuable for understanding the different ways Backstage can be configured to manage TechDocs.
|
40 |
|
|
|
|
category |
estReadingMinutes |
exercises |
Software Templates |
20 |
name |
description |
estMinutes |
technologies |
Create a Simple Template |
This exercise involves writing a custom Software Template and configuring Backstage to register it as an entity that can be used from the UI, and then using the template to publish a new repo in a GitHub organization. This can be achieved by following two separate guides in Spotify's official Backstage docs: one for writing the Software Template, and the other for providing Backstage with the necessary permissions to publish new GitHub repos using the Template. Some extra time is allotted for misc. debugging, since it seems that Backstage is in a transitory period and there's no telling whether their guides will remain accurate.
|
45 |
|
|
name |
description |
estMinutes |
technologies |
Write a Custom Action |
Students are to become acquainted with the Scaffold plugin and extend this plugin by writing a custom action which can be used in the custom template they wrote in the previous exercise. Some special instructions are provided because the only available official guides are outdated.
|
60 |
|
|
|
|
category |
estReadingMinutes |
exercises |
Backstage Plugins |
10 |
name |
description |
estMinutes |
technologies |
Explore the Plugin Directory |
Students receive an introduction to Backstage's plugin directory by adding a plugin from the directory to their Backstage instance. They are encouraged to look through the plugin's source code and gain a basic understanding of how it works.
|
30 |
|
|
name |
description |
estMinutes |
technologies |
Write a Custom Plugin |
Students will create their own Backstage plugin that exists outside of Backstage's repo so it can be easily imported into any Backstage instance.
|
3000 |
Backstage |
TypeScript |
GitHub |
|
|
|
|