Skip to main content

Command Palette

Search for a command to run...

๐ŸงฌDay 27 - Jenkins Declarative Pipeline with Docker

Updated
โ€ข3 min read
๐ŸงฌDay 27 - Jenkins Declarative Pipeline with Docker
P

Hey there! ๐Ÿ‘‹

I'm Pratik R. Mandge, a DevOps Engineer passionate about all things AWS DevOps Technology. Currently on a learning adventure, I'm here to share my journey and Blog's in the world of cloud and DevOps.

๐Ÿ› ๏ธ My focus? Making sense of AWS services, improving CI/CD, and diving into infrastructure as code. Whether you're fellow interns or curious enthusiasts, let's grow together in the vibrant DevOps space.

๐ŸŒ Connect with me for friendly chats, shared experiences, and learning moments. Here's to embracing the learning curve and thriving in the exciting world of AWS DevOps Technology!

Follow me on LinkedIn: https://www.linkedin.com/in/pratik-mandge363

#Day26 was all about a Declarative pipeline, now its time to level up things, let's integrate Docker and your Jenkins declarative pipeline.

๐ŸŽ†Let's Docker Build and Run Knowledge

docker build - Building Docker Images.

In the context of our pipeline, it's like creating a blueprint for your application and packaging it into a standalone image.

stages {
    stage('Build') {
        steps {
            sh 'docker build -t mandgepratik/django-app:latest .'
        }
    }
}

docker run - Run Docker Container.

In our pipeline, it's like deploying your application in an isolated environment.

stages {
    stage('Run') {
        steps {
            sh 'docker run -d mandgepratik/django-app:latest'
        }
    }
}

Now Let's tackle our tasks,

๐Ÿ•นTask 1: Create a Docker-Integrated Jenkins Declarative Pipeline.

๐Ÿ”นFor Jenkins Installation You need to Install Java.

sudo apt update    #update system
sudo apt install fontconfig openjdk-17-jre   #Java Installation

๐Ÿ”นThen, Install Jenkins, Docker & Docker-compose.

# Full Installation of Jenkins

sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins       

-----------------------------------------------------------

# Full Installation Of Docker & Docker-Compose

sudo apt-get install docker.io docker-compose -y

๐Ÿ”นEnable Jenkins & Docker

sudo systemctl enable jenkins
sudo systemctl enable docker

๐Ÿ”นThen, Add Users in docker group

sudo usermod -aG docker $USER   #ubuntu user
sudo usermod -aG docker jenkins #Jenkins user
cat /etc/group                  # check both user add or not

๐Ÿ”นGo to security group, open port 8080 for Jenkins & 8000 for Docker.

๐Ÿ”นThen Access Jenkins Portal using your EC2 public-ip:8080

๐Ÿ”นNow, creating new pipeline job. Go to New Item->Give name of Project->select Pipeline->Click OK.

๐Ÿ”นGo to pipeline, Configure you pipeline.

๐Ÿ”นGo to last, select Pipeline script-> write this script-> Save it.

pipeline {
    agent any

    stages {
        stage("code") {
            steps {
                git url: "https://github.com/mandgepratik/node-todo-cicd.git", branch: "master"
                echo "code cloned successfully"
            }
        }

        stage("build") {
            steps {
                sh 'docker build . -t todo-app'
                echo "code build successfully"
            }
        }

        stage("deploy") {
            steps {
                sh "docker run -p 8000:8000 -d todo-app" 
                echo "Node-app deployed successfully"
            }
        }
    }
}

๐Ÿ”นOn the Left, Click on Build Now.

๐Ÿ”นOn First Click your Pipeline runs successfully.

๐Ÿ”นYou will face errors(port no. 8000 is already allocated) in case of running a job twice, as the docker container will be already created, so for that do task 2.

So, remove/ delete your 1st image using command sudo docker rmi <img-id> --force

๐Ÿ•นTask 2: Enhance Pipeline with Docker Groovy Syntax

  • Create a docker-integrated Jenkins declarative pipeline using the docker groovy syntax inside the stage block.

๐Ÿ”นNow you just go back to the configuration of your pipeline job.

๐Ÿ”นModify the Pipeline Script.

pipeline {
    agent any

    stages {
        stage("code") {
            steps {
                git url: "https://github.com/mandgepratik/node-todo-cicd.git", branch: "master"
                echo "code cloned successfully"
            }
        }

         stage("build and test"){
            steps{
                sh "docker build -t node-app-test-new ."
                echo 'Code Build Successfully'
            }
        }

        stage("deploy") {
            steps {
                sh "docker-compose down && docker-compose up -d"
                echo "Node-app deployed successfully"
            }
        }
    }
}

๐Ÿ”นRemove port no. 8000 from Security groups.

๐Ÿ”นSave & Run once again.

๐Ÿ”นCongratulations, your pipeline is running successfully.๐ŸŽŠ

๐Ÿ”นThen check your application, use your EC2 public-ip:8000

๐Ÿ”นYou can check on your terminal, You'll get latest image of your repository.

๐ŸŒŒConclusion

In conclusion, using a declarative CI/CD pipeline with Docker commands in Groovy syntax offers a streamlined and efficient way to automate your build, test, and deployment processes. By defining your pipeline stages and steps within a Jenkinsfile, you can easily manage and version control your CI/CD workflow.

I believe this blog will be really helpful, giving you fresh perspectives and teaching you something new and interesting. ๐Ÿ™

๐Ÿ˜Š Enjoy learning!

More from this blog

๐Ÿš€ ๐——๐—ฎ๐˜† ๐Ÿญ ๐—ผ๐—ณ ๐— ๐˜† ๐Ÿณ-๐——๐—ฎ๐˜† ๐—”๐—ช๐—ฆ ๐—–๐—ต๐—ฎ๐—น๐—น๐—ฒ๐—ป๐—ด๐—ฒ ๐ŸŒŸ

Today, I kicked off my AWS Challenge with a deep dive into several fundamental concepts. Hereโ€™s what I covered: ๐Ÿท๏ธ ๐˜ผ๐™’๐™Ž ๐™‹๐™ง๐™ž๐™˜๐™ž๐™ฃ๐™œ ๐™ˆ๐™ค๐™™๐™š๐™ก๐™จ:AWS offers various pricing models to cater to different business needs: ๐Ÿญ) ๐—ข๐—ป-๐——๐—ฒ๐—บ๐—ฎ๐—ป๐—ฑ ๐—œ๐—ป...

May 22, 20242 min read
๐Ÿš€ ๐——๐—ฎ๐˜† ๐Ÿญ ๐—ผ๐—ณ ๐— ๐˜† ๐Ÿณ-๐——๐—ฎ๐˜† ๐—”๐—ช๐—ฆ ๐—–๐—ต๐—ฎ๐—น๐—น๐—ฒ๐—ป๐—ด๐—ฒ ๐ŸŒŸ

๐ŸŒŸ ๐—˜๐˜…๐—ฝ๐—น๐—ผ๐—ฟ๐—ถ๐—ป๐—ด ๐˜๐—ต๐—ฒ ๐—ž๐—ฒ๐˜† ๐—–๐—ผ๐—บ๐—ฝ๐—ผ๐—ป๐—ฒ๐—ป๐˜๐˜€ ๐—ผ๐—ณ ๐—ž๐˜‚๐—ฏ๐—ฒ๐—ฟ๐—ป๐—ฒ๐˜๐—ฒ๐˜€ ! ๐ŸŒŸ

Kubernetes is designed to automate the deployment, scaling, and operation of application containers. The architecture is divided into two main components: ๐™ˆ๐™–๐™จ๐™ฉ๐™š๐™ง and ๐™’๐™ค๐™ง๐™ ๐™š๐™ง. Hereโ€™s a detailed breakdown: ๐Ÿ”ถ๐™ˆ๐™–๐™จ๐™ฉ๐™š๐™ง ๐™‰๐™ค๐™™๐™š ๐˜พ๐™ค๐™ข๐™ฅ๐™ค๏ฟฝ...

May 19, 20242 min read
๐ŸŒŸ ๐—˜๐˜…๐—ฝ๐—น๐—ผ๐—ฟ๐—ถ๐—ป๐—ด ๐˜๐—ต๐—ฒ ๐—ž๐—ฒ๐˜† ๐—–๐—ผ๐—บ๐—ฝ๐—ผ๐—ป๐—ฒ๐—ป๐˜๐˜€ ๐—ผ๐—ณ ๐—ž๐˜‚๐—ฏ๐—ฒ๐—ฟ๐—ป๐—ฒ๐˜๐—ฒ๐˜€ ! ๐ŸŒŸ

โ›…๏ธImportant AWS Services: Part - 3

๐Ÿš€๐™€๐™ญ๐™˜๐™ž๐™ฉ๐™š๐™™ ๐™ฉ๐™ค ๐™จ๐™๐™–๐™ง๐™š ๐™ข๐™ฎ ๐™š๐™ญ๐™ฅ๐™š๐™ง๐™ฉ๐™ž๐™จ๐™š ๐™ž๐™ฃ ๐˜ผ๐™’๐™Ž ๐™ฌ๐™ž๐™ฉ๐™ ๐™– ๐™›๐™ค๐™˜๐™ช๐™จ ๐™ค๐™ฃ ๐™˜๐™ค๐™ฃ๐™ฉ๐™–๐™ž๐™ฃ๐™š๐™ง๐™ž๐™ฏ๐™–๐™ฉ๐™ž๐™ค๐™ฃ ๐™–๐™ฃ๐™™ ๐™™๐™š๐™ฅ๐™ก๐™ค๐™ฎ โ–ถ๏ธ๐—”๐—บ๐—ฎ๐˜‡๐—ผ๐—ป ๐—˜๐—น๐—ฎ๐˜€๐˜๐—ถ๐—ฐ ๐—ž๐˜‚๐—ฏ๐—ฒ๐—ฟ๐—ป๐—ฒ๐˜๐—ฒ๐˜€ ๐—ฆ๐—ฒ๐—ฟ๐˜ƒ๐—ถ๐—ฐ๐—ฒ (๐—˜๐—ž๐—ฆ): โ–ช๏ธFully managed Kuberne...

May 12, 20242 min read
โ›…๏ธImportant AWS Services: Part - 3

โ›…๏ธImportant AWS Services: Part - 2

โšœ๏ธ๐™„๐™ข๐™ฅ๐™ค๐™ง๐™ฉ๐™–๐™ฃ๐™ฉ ๐™ฌ๐™ž๐™™๐™š ๐™ง๐™–๐™ฃ๐™œ๐™š ๐™ค๐™› ๐˜ผ๐™’๐™Ž ๐™จ๐™š๐™ง๐™ซ๐™ž๐™˜๐™š๐™จ ๐™ฉ๐™๐™–๐™ฉ ๐™˜๐™–๐™ฃ ๐™š๐™ฃ๐™–๐™—๐™ก๐™š ๐™ฉ๐™ค ๐™–๐™ง๐™˜๐™๐™ž๐™ฉ๐™š๐™˜๐™ฉ ๐™จ๐™˜๐™–๐™ก๐™–๐™—๐™ก๐™š, ๐™จ๐™š๐™˜๐™ช๐™ง๐™š, ๐™–๐™ฃ๐™™ ๐™š๐™›๐™›๐™ž๐™˜๐™ž๐™š๐™ฃ๐™ฉ ๐™˜๐™ก๐™ค๐™ช๐™™ ๐™จ๐™ค๐™ก๐™ช๐™ฉ๐™ž๐™ค๐™ฃ๐™จ. ๐™ƒ๐™š๐™ง๐™š ๐™–๐™ง๐™š ๐™จ๐™ค๐™ข๐™š ๐™ ๐™š๐™ฎ ๐™จ๐™š๐™ง...

May 10, 20243 min read
โ›…๏ธImportant AWS Services: Part - 2

PratikM's Blog

49 posts