DEV Community

Kannan
Kannan

Posted on

3 1 1

Build and Push Docker images to DockerHub using Jenkins pipeline

We are going to build an Docker image and push the image to Dockerhub using Jenkins pipeline.

We have already installed the Jenkins and done the required settings.

  • step 1: Add your user to the docker group This command adds your current user to the docker group, which grants permission to access the Docker socket
sudo usermod -aG docker jenkins

Enter fullscreen mode Exit fullscreen mode
  • step 2: Now restart the Jenkins using
sudo systemctl restart jenkins
Enter fullscreen mode Exit fullscreen mode
  • step 3:
    Install docker related plugins in jenkins
    docker
    docker commons
    docker API
    docker pipeline
    docker-build-step
    CloudBees Docker Build and Publish

  • step 4:
    Login to Dockerhub and create a personal access token.

Image description

  • step 5: Add the created personal access token to jenkins credentials

Image description

  • step 6: Created a Dockerfile on the Github project Repository
kannan@kannan-PC:~/dockerhub_jenkins$ vi Dockerfile
kannan@kannan-PC:~/dockerhub_jenkins$ cat Dockerfile 
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update
RUN apt install apache2 -y
RUN apt install apache2-utils -y
RUN apt clean
COPY index.html /var/www/html
EXPOSE 80
CMD ["apache2ctl","-D","FOREGROUND"]
kannan@kannan-PC:~/dockerhub_jenkins$ vi index.html
kannan@kannan-PC:~/dockerhub_jenkins$ cat index.html 
<h1>Image created and push to Dockerhub</h1>


Enter fullscreen mode Exit fullscreen mode
  • step 7: Create a jenkinsfile and add to the Gitghub project Repository
kannan@kannan-PC:~/dockerhub_jenkins$ vim Jenkinsfile
kannan@kannan-PC:~/dockerhub_jenkins$ cat Jenkinsfile 
pipeline {
  agent any
  options {
    buildDiscarder(logRotator(numToKeepStr: '5'))
  }
  environment {
    DOCKERHUB_CREDENTIALS = credentials('kannanb95-dockerhub')
  }
  stages {
    stage('Build') {
      steps {
        sh 'docker build -t kannanb95/kaniyam:latest .'
      }
    }
    stage('Login') {
      steps {
        sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin'
      }
    }
    stage('Push') {
      steps {
        sh 'docker push kannanb95/kaniyam:latest'
      }
    }
  }
  post {
    always {
      sh 'docker logout'
    }
  }
}
kannan@kannan-PC:~/dockerhub_jenkins$ ls
Dockerfile  index.html  Jenkinsfile  README.md

Enter fullscreen mode Exit fullscreen mode

Now add,commit and push to the git main

kannan@kannan-PC:~/dockerhub_jenkins$ git add .
kannan@kannan-PC:~/dockerhub_jenkins$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   Dockerfile
    new file:   Jenkinsfile
    new file:   index.html

kannan@kannan-PC:~/dockerhub_jenkins$ git commit -m "commit dockerhub_jenkins"
[main 5b006c5] commit dockerhub_jenkins
 3 files changed, 41 insertions(+)
 create mode 100644 Dockerfile
 create mode 100644 Jenkinsfile
 create mode 100644 index.html
kannan@kannan-PC:~/dockerhub_jenkins$ git push origin main
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 884 bytes | 884.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:kannanb95/dockerhub_jenkins.git
   397a453..5b006c5  main -> main

Enter fullscreen mode Exit fullscreen mode
  • step 8: Configure the pipeline definition as "pipeline script from SCM" and add the "Github project Repository URL" and branch as "main"

Build the Jenkins pipeline
Successfully completed the build verify the build history "Console output"
Image description

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

Try REST API Generation for Snowflake

DevOps for Private APIs. Automate the building, securing, and documenting of internal/private REST APIs with built-in enterprise security on bare-metal, VMs, or containers.

  • Auto-generated live APIs mapped from Snowflake database schema
  • Interactive Swagger API documentation
  • Scripting engine to customize your API
  • Built-in role-based access control

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay