Bird
Raised Fist0
Jenkinsdevops~5 mins

Docker agent in Jenkinsfile - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Docker agent in a Jenkinsfile?
A Docker agent in a Jenkinsfile is a way to run Jenkins pipeline steps inside a Docker container. It helps create a consistent environment for builds.
Click to reveal answer
beginner
How do you specify a Docker agent in a Jenkins declarative pipeline?
Use the agent { docker { image 'image-name' } } syntax inside the Jenkinsfile to run steps inside the specified Docker image.
Click to reveal answer
beginner
Why use a Docker agent in Jenkins pipelines?
Using a Docker agent ensures the build runs in a clean, isolated environment with all required tools, avoiding conflicts and making builds reproducible.
Click to reveal answer
intermediate
What happens if the Docker image specified in the Jenkinsfile is not available on the Jenkins host?
Jenkins will try to pull the Docker image from the configured Docker registry before running the build inside the container.
Click to reveal answer
beginner
Show a simple Jenkinsfile snippet using a Docker agent with the image 'python:3.12'.
pipeline {
  agent {
    docker { image 'python:3.12' }
  }
  stages {
    stage('Test') {
      steps {
        sh 'python --version'
      }
    }
  }
}
Click to reveal answer
What does the 'agent { docker { image "node:18" } }' block do in a Jenkinsfile?
APushes the 'node:18' image to Docker Hub.
BBuilds a Docker image named 'node:18'.
CRuns pipeline steps inside a Docker container using the 'node:18' image.
DStarts a Docker daemon on the Jenkins server.
If the Docker image is not found locally, what does Jenkins do?
APulls the image from the Docker registry.
BFails the build immediately.
CBuilds the image from a Dockerfile automatically.
DSkips the Docker agent and runs on the Jenkins host.
Which Jenkinsfile syntax is correct to use a Docker agent?
Aagent { docker { image 'ubuntu:20.04' } }
Bagent { shell 'docker run ubuntu' }
Cagent { label 'docker' }
Dagent { dockerfile 'Dockerfile' }
What is a key benefit of using Docker agents in Jenkins pipelines?
AUnlimited build concurrency.
BFaster network speed.
CAutomatic code deployment.
DConsistent and isolated build environments.
Can you run multiple stages inside the same Docker agent container in a Jenkins pipeline?
AOnly if you use scripted pipeline syntax.
BYes, all stages share the same Docker container if agent is defined at pipeline level.
CNo, each stage creates a new container.
DOnly if you disable Docker caching.
Explain how to use a Docker agent in a Jenkinsfile and why it is useful.
Think about how Docker containers help keep builds clean and repeatable.
You got /3 concepts.
    Describe what happens when Jenkins runs a pipeline with a Docker agent but the image is not present locally.
    Consider how Docker handles missing images on a host.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a docker agent in a Jenkinsfile?
      easy
      A. To speed up the Jenkins UI loading time
      B. To run the build inside a container for a consistent environment
      C. To deploy the application automatically after build
      D. To backup Jenkins configuration files

      Solution

      1. Step 1: Understand what a Docker agent does in Jenkins

        A Docker agent runs the build steps inside a Docker container, ensuring the environment is consistent and isolated.
      2. Step 2: Compare options with this purpose

        Only To run the build inside a container for a consistent environment describes running builds inside containers for consistency. Other options describe unrelated tasks.
      3. Final Answer:

        To run the build inside a container for a consistent environment -> Option B
      4. Quick Check:

        Docker agent purpose = consistent build environment [OK]
      Hint: Docker agent means build runs inside container [OK]
      Common Mistakes:
      • Confusing Docker agent with deployment step
      • Thinking Docker agent speeds up UI
      • Assuming Docker agent manages backups
      2. Which of the following is the correct syntax to specify a Docker agent in a Jenkinsfile?
      easy
      A. agent { docker image 'node:14' }
      B. agent docker image: 'node:14'
      C. agent docker { 'node:14' }
      D. agent { docker { image 'node:14' } }

      Solution

      1. Step 1: Recall Jenkinsfile Docker agent syntax

        The correct syntax uses a block: agent { docker { image 'node:14' } }.
      2. Step 2: Check each option

        agent { docker { image 'node:14' } } matches the correct block syntax. Options A, B, and D have syntax errors or missing braces.
      3. Final Answer:

        agent { docker { image 'node:14' } } -> Option D
      4. Quick Check:

        Correct Docker agent syntax = agent { docker { image 'node:14' } } [OK]
      Hint: Docker agent uses nested braces with image key [OK]
      Common Mistakes:
      • Omitting braces around docker block
      • Using colon instead of braces
      • Placing image outside docker block
      3. Given this Jenkinsfile snippet:
      pipeline {
        agent {
          docker {
            image 'python:3.12'
            args '-v /tmp:/tmp'
          }
        }
        stages {
          stage('Test') {
            steps {
              sh 'python --version'
            }
          }
        }
      }

      What will be the output of the sh 'python --version' command?
      medium
      A. Python 3.12.x
      B. Python 2.7.x
      C. Command not found error
      D. Python 3.8.x

      Solution

      1. Step 1: Identify the Docker image used

        The image specified is 'python:3.12', which contains Python version 3.12.
      2. Step 2: Understand the command inside the container

        The command python --version runs inside the container, so it will output the Python version installed in that image, which is 3.12.x.
      3. Final Answer:

        Python 3.12.x -> Option A
      4. Quick Check:

        Docker image version matches command output [OK]
      Hint: Output matches Docker image Python version [OK]
      Common Mistakes:
      • Assuming host Python version is used
      • Confusing image tag with Python version
      • Expecting command not found error
      4. You wrote this Jenkinsfile snippet:
      pipeline {
        agent {
          docker {
            image 'ubuntu'
            args '-it'
          }
        }
        stages {
          stage('Build') {
            steps {
              sh 'echo Hello'
            }
          }
        }
      }

      But the build fails with error: docker: Error response from daemon: the input device is not a TTY. What is the best fix?
      medium
      A. Change image to ubuntu:latest
      B. Add tty true to the docker agent block
      C. Remove the -it argument from args
      D. Replace sh with bat

      Solution

      1. Step 1: Understand the error message

        The error says the input device is not a TTY, caused by using -it (interactive + tty) in a non-interactive Jenkins build.
      2. Step 2: Fix the Docker args

        Removing -it from args avoids requesting a TTY, fixing the error.
      3. Final Answer:

        Remove the -it argument from args -> Option C
      4. Quick Check:

        Remove interactive TTY args in Jenkins Docker agent [OK]
      Hint: Avoid -it args in Jenkins Docker agents [OK]
      Common Mistakes:
      • Adding tty true without removing -it
      • Changing image without fixing args
      • Using Windows bat step on Linux agent
      5. You want to run a Jenkins pipeline using a Docker agent with the image maven:3.8.6-jdk-17 and mount the host directory /var/maven-repo to /root/.m2/repository inside the container. Which Jenkinsfile snippet correctly sets this up?
      hard
      A. agent { docker { image 'maven:3.8.6-jdk-17' args '-v /var/maven-repo:/root/.m2/repository' } }
      B. agent { docker { image 'maven:3.8.6-jdk-17' args '-v /root/.m2/repository:/var/maven-repo' } }
      C. agent { docker { image 'maven:3.8.6-jdk-17' args '-v /var/maven-repo' } }
      D. agent { docker { image 'maven:3.8.6-jdk-17' args '--mount source=/var/maven-repo,target=/root/.m2/repository' } }

      Solution

      1. Step 1: Understand Docker volume mount syntax

        The syntax to mount a host directory to a container path is -v host_path:container_path.
      2. Step 2: Match the mount paths correctly

        The host directory /var/maven-repo should be mounted to /root/.m2/repository inside the container, so the args must be -v /var/maven-repo:/root/.m2/repository.
      3. Step 3: Check options

        agent { docker { image 'maven:3.8.6-jdk-17' args '-v /var/maven-repo:/root/.m2/repository' } } matches the correct syntax and paths. agent { docker { image 'maven:3.8.6-jdk-17' args '-v /root/.m2/repository:/var/maven-repo' } } reverses paths. agent { docker { image 'maven:3.8.6-jdk-17' args '-v /var/maven-repo' } } misses container path. agent { docker { image 'maven:3.8.6-jdk-17' args '--mount source=/var/maven-repo,target=/root/.m2/repository' } } uses incorrect mount syntax for Docker CLI.
      4. Final Answer:

        agent { docker { image 'maven:3.8.6-jdk-17' args '-v /var/maven-repo:/root/.m2/repository' } } -> Option A
      5. Quick Check:

        Correct volume mount syntax = agent { docker { image 'maven:3.8.6-jdk-17' args '-v /var/maven-repo:/root/.m2/repository' } } [OK]
      Hint: Use -v host:container for volume mounts in Docker args [OK]
      Common Mistakes:
      • Reversing host and container paths
      • Omitting container path in volume mount
      • Using --mount instead of -v in args
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard