Jenkins and CI/CD: The Ultimate Guide to Streamlining Your Software Development

Jenkins and CI/CD: The Ultimate Guide to Streamlining Your Software Development

📍Introduction

Jenkins is an open-source automation server that helps automate part of the software development process. It allows developers to build test and deploy their code automatically, saving time and reducing errors. In this blog, we will discuss what is Jenkins and CICD its features and specifications.

CI/CD or Continuous Integration and Continuous Delivery is a software development methodology that aims to improve the speed and efficiency of the software development lifecycle. It involves automating the process of building, testing, and deploying code changes to production.

🔹What is CI/CD?

Continuous Integration and Continuous Delivery is the process to combine and make smoothen the automation of the task like compiling the code doing testing and deploying in our life cycle

Continuous Integration

  • Build - Create an artifact and report

  • Test – Check Features for Correctness

Continuous Delivery

  • Release – Make artifact available to use

  • Deploy – Deploy make to use

🔹Benefits of CICD

CICD has numerous benefits for the software development team, including:

  • Faster time to market: By automating the build, test and deployment process, CICD reduces the time it took to release new features and bug fixes to customers.

  • Improved quality: By catching and fixing bugs in the development process, CICD ensures that the code is of higher quality and more reliable.

  • Increased collaboration: By automating many of the development tasks, CI/CD encourages collaboration between developers, testers, and other stakeholders.

  • Greater agility: By making it easier to make and deploy changes, CI/CD allows development teams to respond quickly to changing market conditions and customer needs.

🔹What is Jenkins?

Jenkins is an open-source automation server that helps automate parts of the software development process. It allows developers to build, test, and deploy their code automatically, saving time and reducing errors.

Jenkins is often used as a Continuous Integration (CI) tool, which means it can automatically build and test code every time it is committed to a version control system like Git. It can also be used as a Continuous Delivery (CD) tool, which means it can automatically deploy code to various environments like staging or production once it passes the necessary tests.

Jenkins has a large community of users and a wide range of plugins and integrations, making it highly customizable and flexible. It can be run on a variety of operating systems and supports many programming languages and tools.

🔹Jenkins Architecture

Jenkins has plugins that are nothing but a feature. Jenkins works in Master-slave architecture. The master is supposing like a manager and the slave is an employee so the manager will give them to the employee and he will do the work after that he will report back to the manager.

Generally, it will be implemented organization-wide. There will be one centralized server that the DevOps team maintains and there will be slaves across the organization geographically that they will be using to perform the task.

🔹Jenkins Supports Two Pipeline formats.

  1. Scripted Pipeline

Starts With

node { }

Groovy-Based DSL(Domain-Specific Language)

  1. Declarative Pipeline

Starts With

pipeline { }

Specially designed for configuring Jenkins projects as code.

More easily capture the complete configuration of the project as code.

It has three required sections:

- agent

- stages

- stage

- steps

pipeline {
    agent any
        stages {
            stage(‘Hello’) {
                steps{
                    echo ‘Hello World’
                    }
                }
            }
        }

Agent:

Specifies where the pipeline will be run

Parameters:

- any: Jenkins assumes to run on the first available system.

agent any

- label: When we need to be specific about the agent that runs the pipeline we can use the label parameter.

This is helpful when we need to run a pipeline on a specific Operating System (OS) or on a server where specific tools have been installed.

agent { label ‘linux’ }

- docker: Docker agent let us run a pipeline inside a container either on the Jenkins server or another server where docker is installed.

agent {
    docker {
        image ‘maven’
    }
}

- none: None agent allows us to defer agent selection to the agent. It allows you to use a different agent for each stage in the pipeline.

🔹Use Variables in the Pipeline

Environment Variables

- Named with all capital letters

- Can be set globally or locally

  • Globally Scoped Variables
pipline {
    agent any
        environment{
            MAX_SIZE = 10
            MIN_SIZE = 1
    }
}
  • Locally Scoped Variables
pipeline {
    stages {
        stage(‘Scale by 10x’) {
            environment{
                MAX_SIZE = 10
                MIN_SIZE = 1
                }
            }
      }
}

CurrentBuild Variables

- Values running to the currently running build

- Properties of variables named current build:

- current build.<variable_name>

Parameter Variables

- Assign a value to the variable when the job is triggered

- must be a name, default value, and description

stage('Deploy to Production') {
            when {
                expression { 
                   return params.ENVIRONMENT == 'PROD'
                }
            }
            steps {
                    sh """
                    echo "deploy to production"
                    """
                }
            }
   }

🔹Declaring parameters

Each parameter definition must include a name, a default value, and a description that explains the type of value that should be entered.

For pipelines, there are five different types of parameters we can use:

  • String

  • Text

  • Boolean

  • Choice

  • Password

📍Conclusion

Continuous Integration and Continuous Delivery (CI/CD) is a methodology that automates the software development process and helps reduce errors, increase collaboration, and improve software quality. Jenkins, an open-source automation server, is a popular tool used for implementing CI/CD. It supports both scripted and declarative pipelines and has a wide range of plugins and integrations, making it highly customizable and flexible. By automating the build, test, and deployment process, Jenkins helps reduce time-to-market and improve software reliability. Overall, Jenkins is a valuable tool for DevOps teams looking to implement CI/CD and streamline their software development process.

Did you find this article valuable?

Support Ashutosh Mahajan's blog by becoming a sponsor. Any amount is appreciated!