DevOps Practice Tasks Hub
656+ free DevOps practice tasks for every lesson: git, Docker, Kubernetes, Jenkins, GitHub Actions, Terraform, Ansible and bash. Check your answer right in the browser.
Every task has why, what and how, plus a Hint and a Solution. Answers are checked instantly in your browser; nothing you type is sent anywhere.
What is DevOps
12 tasks
- Easy Name the practice
- Easy List all files with details
- Easy Which port does the user hit?
- Easy Stage every change
- Easy Stage one file
- Easy Clone a repository
- Easy Commit with a message
- Medium Delivery or deployment?
- Medium Run the build inside a Docker agent
- Hard Name the approach
- Hard Build and push an image from CI
- Hard Use Jenkins credentials safely
Git, GitHub and Git Bash
12 tasks
- Easy Set your Git email
- Easy Set your Git user name
- Easy List all files with details
- Easy Stage every change
- Easy Stage one file
- Easy Clone a repository
- Easy Commit with a message
- Easy Start a new Git repository
- Easy Create nested folders in one go
- Easy Show where you are
- Medium Stage tracked files and commit in one go
- Medium See staged changes
Branch, Merge, Rebase, Stash and Pull Requests
10 tasks
- Easy List branches
- Easy Create and switch to a branch
- Medium Merge a feature branch
- Medium Delete a merged branch
- Medium Park unfinished work
- Medium Deploy only from main
- Hard Merge with a merge commit
- Hard Rebase onto main
- Hard Copy one fix to a release branch
- Hard Delete a remote branch
Linux Ops Refresh for DevOps with Examples
10 tasks
- Easy Protect an SSH key file
- Easy Set normal web file permissions
- Easy Check memory
- Easy Create a team group
- Easy Set a user's password
- Easy Switch to another user
- Medium Give a folder to the web server user
- Medium Fix permissions on a whole folder
- Medium Playbook: create a deploy user
- Hard Find big files
Bash Scripting for Automation
12 tasks
- Easy Loop over servers
- Easy Find errors in a log
- Medium Disk usage alert
- Medium Health-check script
- Medium Safe deploy script header
- Medium Count matching lines
- Medium Case-insensitive search with line numbers
- Medium Find files by name
- Hard Dated backup with cleanup
- Hard Search a whole folder
- Hard Find old files
- Hard Find big files
Docker Images and Containers Tutorial
12 tasks
- Easy Static site image
- Easy Dockerfile for a Node.js app
- Easy Build an image
- Easy Run nginx in the background
- Medium Run the container as a non-root user
- Medium Dockerfile for a Python API
- Medium Build from another Dockerfile
- Medium Pass environment variables
- Medium Open a throw-away shell
- Hard Build argument for the version
- Hard Add a HEALTHCHECK
- Hard Multi-stage Go build
Why Docker, Images and How a Container Is Created
12 tasks
- Easy Static site image
- Easy Dockerfile for a Node.js app
- Easy Build an image
- Easy Run nginx in the background
- Medium Run the container as a non-root user
- Medium Dockerfile for a Python API
- Medium Build from another Dockerfile
- Medium Pass environment variables
- Medium Open a throw-away shell
- Hard Build argument for the version
- Hard Add a HEALTHCHECK
- Hard Multi-stage Go build
Docker Commands, Networks, Volumes and Compose
12 tasks
- Easy Read container logs
- Easy Compose: build from source
- Easy Start the compose stack
- Medium Compose: app + database
- Medium Logs of one compose service
- Medium Keep data in a named volume
- Medium Follow logs live
- Medium Compose: env file and restart policy
- Medium Rebuild and start
- Medium Stop and remove the stack with volumes
- Hard Compose: private backend network
- Hard Compose: wait for a healthy database
Docker Compose Volumes and Networks
12 tasks
- Easy Read container logs
- Easy Compose: build from source
- Easy Start the compose stack
- Medium Compose: app + database
- Medium Logs of one compose service
- Medium Keep data in a named volume
- Medium Follow logs live
- Medium Compose: env file and restart policy
- Medium Rebuild and start
- Medium Stop and remove the stack with volumes
- Hard Compose: private backend network
- Hard Compose: wait for a healthy database
CI/CD Concepts
12 tasks
- Easy GitHub Actions: test on every push
- Easy Name the practice
- Medium Deploy only after tests pass
- Medium Deploy only from main
- Medium Delivery or deployment?
- Medium Run only for main and pull requests
- Medium Nightly scheduled workflow
- Hard Matrix build on three Python versions
- Hard Manual approval before production
- Hard Parallel test stages
- Hard Name the approach
- Hard Cache dependencies
GitHub Actions Hands-On
12 tasks
- Easy GitHub Actions: test on every push
- Medium Run only for main and pull requests
- Medium Nightly scheduled workflow
- Medium Use a secret as an env variable
- Medium Deploy only after tests pass
- Medium Run the build inside a Docker agent
- Medium Delivery or deployment?
- Hard Matrix build on three Python versions
- Hard Build and push an image from CI
- Hard Cache dependencies
- Hard Use Jenkins credentials safely
- Hard Parallel test stages
Jenkins Introduction
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy Name the practice
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Medium Delivery or deployment?
- Medium Run only for main and pull requests
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
- Hard Name the approach
Ansible Introduction
12 tasks
- Easy Playbook: install and start nginx
- Easy Run a playbook
- Easy Ping all hosts
- Medium YAML inventory
- Medium Playbook: create a deploy user
- Medium Dry run with diff
- Medium Limit to one group and tag
- Medium Install several packages with a loop
- Medium Ad-hoc command with sudo
- Medium Give a folder to the web server user
- Hard Template with a handler
- Hard Encrypt a secrets file
Terraform Introduction
12 tasks
- Easy Format the code
- Easy Initialise a Terraform folder
- Easy Validate the config
- Easy Provider block
- Easy S3 bucket resource
- Medium Pin the provider version
- Medium EC2 instance using a variable
- Medium Save a plan file
- Medium Plan with a variable value
- Hard Create several copies with count
- Hard Security group for HTTPS
- Hard Plan one resource only
Monitoring Basics with Prometheus and Grafana
12 tasks
- Easy Check memory
- Medium Prometheus scrape config
- Medium CPU and memory of pods
- Medium Disk usage alert
- Medium Health-check script
- Hard Prometheus alert rule
- Hard ServiceMonitor for the Prometheus Operator
- Hard Name the metric
- Hard Error budget in minutes
- Hard Compose: wait for a healthy database
- Hard Add a HEALTHCHECK
- Hard Readiness and liveness probes
Logging and Observability
12 tasks
- Easy Read container logs
- Easy Find errors in a log
- Easy Pod logs
- Medium Follow logs live
- Medium Get a shell inside a container
- Medium Open a throw-away shell
- Medium Logs of one compose service
- Medium See the last lines of a log
- Hard Logs of the crashed container
- Hard Name the metric
- Hard Error budget in minutes
- Hard Compose: wait for a healthy database
Kubernetes Introduction with kind Tutorial
12 tasks
- Easy List pods in a namespace
- Easy Create a namespace
- Easy Pod manifest
- Easy Apply a manifest
- Easy Describe a pod
- Easy Pods with node and IP
- Medium Pods in all namespaces
- Medium Apply a whole folder
- Medium Deployment manifest
- Medium Requests and limits
- Medium Shell inside a pod
- Hard Readiness and liveness probes
DevOps Capstone: Ship It
12 tasks
- Easy Push to the registry
- Easy Apply a manifest
- Easy Scale a deployment
- Medium Tag for a registry
- Medium Deploy only after tests pass
- Medium Apply a whole folder
- Medium Create a deployment quickly
- Hard Build and push an image from CI
- Hard Readiness and liveness probes
- Hard Log in to a registry from CI
- Hard Compose: wait for a healthy database
- Hard Add a HEALTHCHECK
DevOps Interview Questions and Job Readiness
12 tasks
- Easy Which port does the user hit?
- Easy Name the practice
- Easy Name the practice
- Medium How many pods?
- Medium Delivery or deployment?
- Medium Run the build inside a Docker agent
- Medium Name the release strategy
- Hard Name the approach
- Hard Name the metric
- Hard Error budget in minutes
- Hard Build and push an image from CI
- Hard Use Jenkins credentials safely
Kubernetes Workloads
12 tasks
- Easy Scale a deployment
- Easy Apply a manifest
- Easy Watch a rollout
- Medium Update the image
- Medium Requests and limits
- Medium Apply a whole folder
- Medium Create a deployment quickly
- Medium Deployment manifest
- Medium Roll back a deployment
- Hard Autoscale on CPU
- Hard HPA manifest
- Hard Readiness and liveness probes
Why Docker and Container Basics Tutorial
12 tasks
- Easy Static site image
- Easy Dockerfile for a Node.js app
- Easy Build an image
- Easy Run nginx in the background
- Medium Run the container as a non-root user
- Medium Dockerfile for a Python API
- Medium Build from another Dockerfile
- Medium Pass environment variables
- Medium Open a throw-away shell
- Hard Build argument for the version
- Hard Add a HEALTHCHECK
- Hard Multi-stage Go build
Docker Commands Networks and Images
12 tasks
- Easy Read container logs
- Easy Compose: build from source
- Easy Start the compose stack
- Medium Compose: app + database
- Medium Logs of one compose service
- Medium Keep data in a named volume
- Medium Follow logs live
- Medium Compose: env file and restart policy
- Medium Rebuild and start
- Medium Stop and remove the stack with volumes
- Hard Compose: private backend network
- Hard Compose: wait for a healthy database
Kubernetes Services and Volumes Tutorial
12 tasks
- Easy ConfigMap manifest
- Medium Expose a deployment
- Medium Service manifest
- Medium Create a secret
- Medium Port-forward for a local test
- Medium Create a ConfigMap
- Medium How many pods?
- Medium Pods in all namespaces
- Hard Ingress for a domain
- Hard Env from ConfigMap and Secret
- Hard Encrypt a secrets file
- Hard Name the approach
Jenkins Manual Jobs Install Configure and Freestyle
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy Name the practice
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Medium Delivery or deployment?
- Medium Run only for main and pull requests
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
- Hard Name the approach
Kubernetes Workloads
12 tasks
- Easy Scale a deployment
- Easy Apply a manifest
- Easy Watch a rollout
- Medium Update the image
- Medium Requests and limits
- Medium Apply a whole folder
- Medium Create a deployment quickly
- Medium Deployment manifest
- Medium Roll back a deployment
- Hard Autoscale on CPU
- Hard HPA manifest
- Hard Readiness and liveness probes
Jenkins Pipeline and Jenkinsfile Tutorial
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy GitHub Actions: test on every push
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Compose: env file and restart policy
- Medium Pass environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Hard Parallel test stages
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Matrix build on three Python versions
Kubernetes Services and Volumes Tutorial
12 tasks
- Easy ConfigMap manifest
- Medium Expose a deployment
- Medium Service manifest
- Medium Create a secret
- Medium Port-forward for a local test
- Medium Create a ConfigMap
- Medium How many pods?
- Medium Pods in all namespaces
- Hard Ingress for a domain
- Hard Env from ConfigMap and Secret
- Hard Encrypt a secrets file
- Hard Name the approach
Jenkins Language Projects Java Spring NET PHP Python
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy GitHub Actions: test on every push
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Compose: env file and restart policy
- Medium Pass environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Hard Parallel test stages
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Matrix build on three Python versions
Jenkins Fundamentals Install and Architecture
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy Name the practice
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Medium Delivery or deployment?
- Medium Run only for main and pull requests
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
- Hard Name the approach
Jenkins with GitHub GitLab and Bitbucket
12 tasks
- Easy List branches
- Easy Create and switch to a branch
- Easy Declarative Jenkinsfile: build and test
- Medium Deploy only from main
- Medium Delete a merged branch
- Medium Merge a feature branch
- Medium Run only for main and pull requests
- Medium Nightly scheduled workflow
- Hard Copy one fix to a release branch
- Hard Merge with a merge commit
- Hard Delete a remote branch
- Hard Rebase onto main
Jenkins Shared Libraries Credentials and Environments
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Medium Pipeline environment variables
- Medium Run the build inside a Docker agent
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Medium Use a secret as an env variable
- Medium Create a secret
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
- Hard Encrypt a secrets file
- Hard Env from ConfigMap and Secret
Jenkins Security RBAC and Hardening
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Medium Give a folder to the web server user
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Medium Use a secret as an env variable
- Medium Create a secret
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
- Hard Encrypt a secrets file
Jenkins Agents
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy Which port does the user hit?
- Easy Compose: build from source
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Medium Compose: env file and restart policy
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
- Hard Compose: wait for a healthy database
Registries Kubernetes Terraform and Ansible from Jenkins
12 tasks
- Easy Push to the registry
- Easy Which port does the user hit?
- Easy Compose: build from source
- Medium Tag for a registry
- Medium Run the build inside a Docker agent
- Medium Compose: env file and restart policy
- Medium Compose: app + database
- Hard Log in to a registry from CI
- Hard Build and push an image from CI
- Hard Use Jenkins credentials safely
- Hard Compose: wait for a healthy database
- Hard Compose: private backend network
Jenkins Scan Pipeline
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy Static site image
- Easy Build an image
- Easy List local images
- Medium Run the container as a non-root user
- Medium Run the build inside a Docker agent
- Medium Build from another Dockerfile
- Hard Use Jenkins credentials safely
- Hard Parallel test stages
- Hard Build argument for the version
- Hard Add a HEALTHCHECK
- Hard Multi-stage Go build
Jenkins Artifacts Release Patterns and Quality Gates
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy Apply a manifest
- Medium Deploy only from main
- Medium Always archive, alert on failure
- Medium Name the release strategy
- Medium Name the release strategy
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Deploy only after tests pass
- Hard Manual approval before production
- Hard Use Jenkins credentials safely
- Hard Parallel test stages
Jenkins Backup Configuration as Code and Operations
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Always archive, alert on failure
- Medium Deploy only from main
- Medium Make a compressed backup
- Medium Extract a backup
- Medium Zip a folder
- Hard Dated backup with cleanup
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
Jenkins Governance Troubleshooting and Expert Projects
12 tasks
- Easy Declarative Jenkinsfile: build and test
- Easy Read container logs
- Easy Pod logs
- Medium Follow logs live
- Medium Always archive, alert on failure
- Medium Run the build inside a Docker agent
- Medium Pipeline environment variables
- Medium Deploy only from main
- Hard Logs of the crashed container
- Hard Use Jenkins credentials safely
- Hard Manual approval before production
- Hard Parallel test stages
Terraform Providers Resources Variables Outputs Locals and Data Sources
12 tasks
- Easy Provider block
- Easy S3 bucket resource
- Easy Input variable
- Easy Output a value
- Easy Read an output
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium Pin the provider version
- Medium Plan with a variable value
- Hard Create several copies with count
- Hard Security group for HTTPS
- Hard Remote state in S3
Terraform State Remote S3 Backend Locking and Workspaces
12 tasks
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Medium List resources in state
- Medium Create a workspace
- Medium EC2 instance using a variable
- Medium Pin the provider version
- Hard Remote state in S3
- Hard Import an existing bucket
- Hard Create several copies with count
- Hard Call a module
- Hard Security group for HTTPS
Terraform Modules Writing Using Registry and Versioning
12 tasks
- Easy Provider block
- Easy Output a value
- Easy S3 bucket resource
- Easy Read an output
- Easy Name the practice
- Medium Pin the provider version
- Medium EC2 instance using a variable
- Medium Apply the saved plan
- Hard Call a module
- Hard Remote state in S3
- Hard Create several copies with count
- Hard Security group for HTTPS
Terraform count for_each dynamic lifecycle and depends_on
12 tasks
- Easy S3 bucket resource
- Easy Input variable
- Easy Output a value
- Easy Provider block
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium Plan with a variable value
- Medium Install several packages with a loop
- Hard Create several copies with count
- Hard Security group for HTTPS
- Hard Remote state in S3
- Hard Call a module
Terraform Import Moved and Removed Blocks
12 tasks
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium List resources in state
- Medium Pin the provider version
- Hard Remote state in S3
- Hard Create several copies with count
- Hard Security group for HTTPS
- Hard Import an existing bucket
- Hard Call a module
Terraform CLI Commands fmt validate plan apply state and more
12 tasks
- Easy Format the code
- Easy Initialise a Terraform folder
- Easy Validate the config
- Easy Output a value
- Easy Name the practice
- Medium Save a plan file
- Medium Plan with a variable value
- Medium Apply the saved plan
- Medium List resources in state
- Hard Plan one resource only
- Hard Remote state in S3
- Hard Import an existing bucket
Terraform Provisioners Secrets and Sensitive Values
12 tasks
- Easy Input variable
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium Plan with a variable value
- Medium Apply the saved plan
- Hard Security group for HTTPS
- Hard Remote state in S3
- Hard Create several copies with count
- Hard Call a module
Terraform Real AWS Labs VPC EC2 nginx S3 and IAM Role
12 tasks
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Easy Connect to an EC2 server
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium Pin the provider version
- Medium Apply the saved plan
- Hard Security group for HTTPS
- Hard Create several copies with count
- Hard Call a module
- Hard Remote state in S3
Terraform Environments and Jenkins Plan Approval Apply Pipeline
12 tasks
- Easy Input variable
- Easy Name the practice
- Easy S3 bucket resource
- Medium Plan with a variable value
- Medium Create a workspace
- Medium Save a plan file
- Medium EC2 instance using a variable
- Hard Plan one resource only
- Hard Manual approval before production
- Hard Remote state in S3
- Hard Create several copies with count
- Hard Call a module
Terraform Drift and Troubleshooting
12 tasks
- Easy Name the practice
- Easy S3 bucket resource
- Easy Output a value
- Medium List resources in state
- Medium Save a plan file
- Medium Plan with a variable value
- Medium EC2 instance using a variable
- Hard Remote state in S3
- Hard Import an existing bucket
- Hard Plan one resource only
- Hard Create several copies with count
- Hard Call a module
Terraform Interview Questions and Capstone Project
12 tasks
- Easy Name the practice
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Medium EC2 instance using a variable
- Medium Pin the provider version
- Medium List resources in state
- Hard Remote state in S3
- Hard Call a module
- Hard Create several copies with count
- Hard Security group for HTTPS
- Hard Import an existing bucket
Terraform AWS Guides EC2 RDS S3 Security Groups IAM ALB and Auto Scaling
12 tasks
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Easy Connect to an EC2 server
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium Pin the provider version
- Medium Apply the saved plan
- Hard Security group for HTTPS
- Hard Create several copies with count
- Hard Call a module
- Hard Remote state in S3
Terraform 3-Tier Architecture in a Single Availability Zone
12 tasks
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Easy Connect to an EC2 server
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium Pin the provider version
- Medium Apply the saved plan
- Hard Security group for HTTPS
- Hard Create several copies with count
- Hard Call a module
- Hard Remote state in S3
Terraform 3-Tier Architecture Multi-AZ with ALBs Auto Scaling Bastion NAT and RDS
12 tasks
- Easy S3 bucket resource
- Easy Output a value
- Easy Provider block
- Easy Connect to an EC2 server
- Easy Name the practice
- Medium EC2 instance using a variable
- Medium Pin the provider version
- Medium Apply the saved plan
- Hard Security group for HTTPS
- Hard Create several copies with count
- Hard Call a module
- Hard Remote state in S3
How to Use This Free DevOps Course
12 tasks
- Easy Name the practice
- Easy List all files with details
- Easy Which port does the user hit?
- Easy Stage every change
- Easy Stage one file
- Easy Clone a repository
- Easy Commit with a message
- Medium Delivery or deployment?
- Medium Run the build inside a Docker agent
- Hard Name the approach
- Hard Build and push an image from CI
- Hard Use Jenkins credentials safely
What is DevOps: Beginner Guide
12 tasks
- Easy Name the practice
- Easy List all files with details
- Easy Which port does the user hit?
- Easy Stage every change
- Easy Stage one file
- Easy Clone a repository
- Easy Commit with a message
- Medium Delivery or deployment?
- Medium Run the build inside a Docker agent
- Hard Name the approach
- Hard Build and push an image from CI
- Hard Use Jenkins credentials safely
Git Basics for DevOps Beginners
12 tasks
- Easy Set your Git email
- Easy Set your Git user name
- Easy List all files with details
- Easy Stage every change
- Easy Stage one file
- Easy Clone a repository
- Easy Commit with a message
- Easy Start a new Git repository
- Easy Create nested folders in one go
- Easy Show where you are
- Medium Stage tracked files and commit in one go
- Medium See staged changes