Build and Push Docker Image Using Jenkins Docker Pipeline Plugin
📖 Scenario: You are working as a DevOps engineer. Your team wants to automate building and pushing Docker images using Jenkins. You will create a Jenkins pipeline script that uses the Docker Pipeline plugin to build a Docker image from a Dockerfile and push it to Docker Hub.
🎯 Goal: Build a Jenkins pipeline script that builds a Docker image named myapp with tag v1 from the current directory, then pushes it to Docker Hub repository yourdockerhubid/myapp:v1.
📋 What You'll Learn
Create a Docker image named myapp with tag v1 using the Docker Pipeline plugin
Use a variable dockerImage to hold the image object
Push the image to Docker Hub repository yourdockerhubid/myapp:v1
Print a message confirming the image push
💡 Why This Matters
🌍 Real World
Automating Docker image builds and pushes in Jenkins pipelines is common in continuous integration and continuous delivery (CI/CD) workflows.
💼 Career
DevOps engineers and automation specialists use Docker Pipeline plugin in Jenkins to streamline container image management and deployment.
Progress0 / 4 steps
1
Create Docker image variable
Create a variable called dockerImage that builds a Docker image named myapp:v1 from the current directory using docker.build.
Jenkins
Hint
Use docker.build('myapp:v1') to build the image and assign it to dockerImage.
2
Add Docker Hub repository variable
Create a variable called dockerRepo and set it to the string 'yourdockerhubid/myapp:v1' to specify the Docker Hub repository and tag.
Jenkins
Hint
Assign the exact string 'yourdockerhubid/myapp:v1' to dockerRepo.
3
Tag and push Docker image
Use the dockerImage variable to tag the image with dockerRepo and push it to Docker Hub using dockerImage.push().
Jenkins
Hint
Use dockerImage.tag(dockerRepo) to tag and dockerImage.push() to push the image.
4
Print confirmation message
Print the message "Docker image pushed to yourdockerhubid/myapp:v1" using echo.
Jenkins
Hint
Use echo "Docker image pushed to yourdockerhubid/myapp:v1" to print the confirmation.
Practice
(1/5)
1. What is the primary purpose of the docker.build() method in Jenkins Docker Pipeline plugin?
easy
A. To remove unused Docker images
B. To run a Docker container interactively
C. To build a Docker image from a Dockerfile
D. To push a Docker image to a registry
Solution
Step 1: Understand the role of docker.build()
This method is used to create a Docker image from a Dockerfile in the workspace.
Step 2: Differentiate from other Docker Pipeline methods
Running containers uses docker.image().inside { }, pushing uses docker.withRegistry(), and removing images is not handled by docker.build().
Final Answer:
To build a Docker image from a Dockerfile -> Option C
Quick Check:
docker.build() builds images [OK]
Hint: Remember: build = create image from Dockerfile [OK]
Common Mistakes:
Confusing build with push or run commands
Thinking docker.build() runs containers
Assuming it handles image removal
2. Which of the following is the correct syntax to run commands inside a Docker container in a Jenkins pipeline?
easy
A. docker.image('myimage').inside { sh 'echo Hello' }
B. docker.build('myimage') { sh 'echo Hello' }
C. docker.run('myimage') { sh 'echo Hello' }
D. docker.container('myimage').exec { sh 'echo Hello' }
Solution
Step 1: Identify the correct method to run commands inside a container
The docker.image('myimage').inside { } syntax runs commands inside a container created from the image.
Step 2: Check other options for syntax errors or misuse
docker.run() and docker.container() are not valid Jenkins Pipeline methods; docker.build() builds images but does not run containers.
Final Answer:
docker.image('myimage').inside { sh 'echo Hello' } -> Option A
Quick Check:
Use docker.image().inside { } to run commands [OK]
Hint: Use docker.image().inside { } to run commands inside containers [OK]
Common Mistakes:
Using docker.build() to run commands
Trying to use non-existent methods like docker.run()
Confusing image build and container run syntax
3. Given the following Jenkins pipeline snippet, what will be the output of the sh command inside the container?
def img = docker.build('myapp:latest')
img.inside {
sh 'echo Hello from Docker'
}
medium
A. Error: No such image 'myapp:latest'
B. Hello from Docker
C. Build logs of the Docker image
D. Nothing, the command is not executed
Solution
Step 1: Understand the build and run sequence
The docker.build('myapp:latest') creates the image, then img.inside { } runs commands inside a container from that image.
Step 2: Analyze the sh command inside the container
The shell command echo Hello from Docker runs inside the container and outputs the string.
Final Answer:
Hello from Docker -> Option B
Quick Check:
Commands inside img.inside { } run and output normally [OK]
Hint: Commands inside img.inside { } run inside container [OK]
Common Mistakes:
Assuming build only creates logs, not image
Thinking the command runs outside the container
Expecting an error if image was just built
4. Identify the error in this Jenkins pipeline snippet using Docker Pipeline plugin:
A. The img.push() should be called before docker.withRegistry
B. The docker.build method is missing the Dockerfile path
C. The credentials ID 'my-credentials' is invalid syntax
D. The img.inside block is outside the docker.withRegistry block and will fail
Solution
Step 1: Check scope of img variable
The variable img is defined inside the docker.withRegistry block, so it is not accessible outside that block.
Step 2: Identify the error with img.inside usage
Using img.inside outside the block where img is defined causes a runtime error because img is undefined there.
Final Answer:
The img.inside block is outside the docker.withRegistry block and will fail -> Option D
Quick Check:
Variable scope matters in Jenkins pipeline blocks [OK]
Hint: Keep variable usage inside the block where it's defined [OK]
Common Mistakes:
Assuming variables are global across blocks
Confusing credentials ID syntax
Thinking push must be outside withRegistry
5. You want to build a Docker image, run tests inside a container from that image, and then push the image to a private registry using Jenkins Docker Pipeline plugin. Which pipeline snippet correctly implements this workflow?
hard
A. def img = docker.build('myapp:test')
img.inside {
sh 'run-tests.sh'
}
docker.withRegistry('https://registry.example.com', 'creds') {
img.push()
}
B. docker.withRegistry('https://registry.example.com', 'creds') {
def img = docker.build('myapp:test')
img.push()
img.inside {
sh 'run-tests.sh'
}
}
C. docker.withRegistry('https://registry.example.com', 'creds') {
img.push()
def img = docker.build('myapp:test')
img.inside {
sh 'run-tests.sh'
}
}
D. def img = docker.build('myapp:test')
docker.withRegistry('https://registry.example.com', 'creds') {
img.push()
}
img.inside {
sh 'run-tests.sh'
}
Solution
Step 1: Build image and run tests inside container first
The image must be built before running tests inside it, so docker.build() and img.inside { } come first.
Step 2: Push image inside docker.withRegistry() block after tests
Pushing requires registry credentials, so img.push() must be inside docker.withRegistry() block after tests pass.
Step 3: Verify variable scope and order
def img = docker.build('myapp:test')
img.inside {
sh 'run-tests.sh'
}
docker.withRegistry('https://registry.example.com', 'creds') {
img.push()
} correctly builds image, runs tests inside container, then pushes image with credentials in proper order and scope.
Final Answer:
def img = docker.build('myapp:test')
img.inside {
sh 'run-tests.sh'
}
docker.withRegistry('https://registry.example.com', 'creds') {
img.push()
} -> Option A
Quick Check:
Build -> Test inside container -> Push with credentials [OK]
Hint: Build first, test inside container, then push inside withRegistry [OK]
Common Mistakes:
Pushing image before running tests
Using img.inside after pushing outside scope
Defining variables inside wrong blocks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.