DevOps Job Ready Program

Learn • Practice • Get Hired

Jenkins: Introduction, Installation & Configuration

What is Jenkins?

Jenkins is an open-source automation server used to automate software development processes such as building, testing, and deploying applications. It is one of the most widely used tools in DevOps and CI/CD pipelines. Jenkins helps development and operations teams automate repetitive tasks and deliver software faster with fewer errors.

Jenkins in DevOps Workflow

Workflow: Developer (Git Push) → GitHub/GitLab Repository → Jenkins Pipeline (Build → Test → Docker Image → Deploy) → Production Environment.

Why Jenkins is Used?

Jenkins Architecture

Components:

Jenkins Installation on Ubuntu

System Requirements: 2 Core CPU, 2GB RAM, 20GB Storage, Ubuntu 22.04/24.04, JDK 17.

Initial Configuration

Advanced Configuration

Jenkins Jobs & Pipelines

Freestyle Project: Configure Source Code Management (Git) and Build Steps (Shell scripts).

Pipeline Example:

    pipeline {
        agent any
        stages {
            stage('Build') { steps { echo 'Building Application' } }
            stage('Test') { steps { echo 'Running Tests' } }
            stage('Deploy') { steps { echo 'Deploying Application' } }
        }
    }
    

Jenkins Security Best Practices

Jenkins in DevOps Toolchain

StageTool
Code ManagementGitHub/GitLab
BuildJenkins
ContainerDocker
OrchestrationKubernetes
InfrastructureTerraform
ConfigurationAnsible
MonitoringNagios/Grafana

What is Jenkins Architecture?

Jenkins architecture defines how different components work together to automate Continuous Integration (CI) and Continuous Delivery/Deployment (CD) processes. It follows a Controller-Agent architecture where the Controller manages tasks and Agents execute them.

Jenkins Architecture Diagram

    Developer --> Git Repository --> Webhook --> Jenkins Controller (Master)
                                                      |
                                          -------------------------
                                          |           |           |
                                     Agent Node   Agent Node  Agent Node
                                      (Linux)     (Docker)       (K8s)
                                          |           |           |
                                        Build       Testing    Deployment
                                                      |
                                            Production Environment
    

1. Jenkins Controller (Master)

The central component managing the environment.

2. Jenkins Agent (Worker Node)

Machines that execute the actual build tasks (Source code checkout, compilation, testing, docker image creation, deployment).

Core Components

Communication Methods

Real-World Scenarios

AWS Example

    Internet --> Load Balancer --> Jenkins Server (EC2)
                                        |
                            --------------------------
                            |           |            |
                        EC2 Agent    Docker Agent   EKS Cluster
    

Jenkins Architecture Summary

ComponentPurpose
Jenkins ControllerManagement and scheduling
Jenkins AgentExecutes tasks
JobDefines automation tasks
PipelineCI/CD workflow
ExecutorRuns builds
WorkspaceStores build files
PluginsExtend functionality
CredentialsSecure access management

Benefits: Scalable build environment, supports distributed builds, reduces deployment time, and automates complete CI/CD lifecycles.

Pipeline as Code in Jenkins

What is Pipeline as Code?

Pipeline as Code is a DevOps practice where the entire CI/CD pipeline configuration is written as a code file and stored along with the application source code in a version control system such as GitHub or GitLab. In Jenkins, this is implemented using a file called Jenkinsfile.

Instead of manually configuring Jenkins jobs through the web interface, developers define build, test, and deployment steps in a script.

Traditional Jenkins Job vs Pipeline as Code

Traditional Jenkins Configuration

Steps: Jenkins UI → Create Job → Configure Build Steps → Add Credentials → Configure Deployment → Save.

Problems: Manual configuration, difficult to track changes, not easy to migrate, configuration drift risk.

Pipeline as Code

Flow: Developer → Git Repository → Jenkinsfile → Jenkins Pipeline → Build → Test → Deploy.

Advantages: Version controlled, Repeatable, Automated, Easy collaboration.

Jenkinsfile

A Jenkinsfile is a text file written in Groovy-based syntax that defines the Jenkins pipeline workflow.

Repository structure:

    my-application/
    │
    ├── src/
    ├── Dockerfile
    ├── package.json
    └── Jenkinsfile
    

Types of Jenkins Pipeline

Jenkins Pipeline Structure

A Jenkinsfile contains these sections: pipeline, agent, environment, stages, steps, post.

Complete Java Application CI/CD Pipeline

    pipeline {
        agent any
        environment { IMAGE_NAME = "myapp" }
        stages {
            stage('Checkout') { steps { git 'https://github.com/user/project.git' } }
            stage('Build') { steps { sh 'mvn clean package' } }
            stage('Testing') { steps { sh 'mvn test' } }
            stage('Docker Build') { steps { sh 'docker build -t $IMAGE_NAME .' } }
            stage('Deploy') { steps { sh 'docker run -d -p 8080:8080 $IMAGE_NAME' } }
        }
        post {
            success { echo "Application deployed successfully" }
            failure { echo "Deployment failed" }
        }
    }
    

Pipeline as Code Workflow

Pipelines with Docker & Kubernetes

Docker Example:

    stage('Docker Build') { steps { sh 'docker build -t webapp .' } }
    stage('Docker Run') { steps { sh 'docker run -d -p 80:80 webapp' } }
    

Kubernetes Example:

    stage('Deploy Kubernetes') { steps { sh 'kubectl apply -f deployment.yaml' } }
    

Pipeline as Code Best Practices

  1. Store Jenkinsfile in Git: Keep it in the project root.
  2. Credentials Management: Never store passwords inside Jenkinsfile.
  3. Code Review: Use Pull Request workflow for pipeline changes.
  4. Shared Libraries: Create a Jenkins Shared Library for reusable functions.

Pipeline as Code Benefits Table

BenefitDescription
Version ControlPipeline changes tracked in Git
AutomationNo manual job configuration
CollaborationTeams review pipeline code
ReusabilityShare common pipeline functions
RecoveryEasy backup and restore
ScalabilitySupports multiple applications

Pipeline as Code in DevOps Toolchain

Summary: Pipeline as Code allows DevOps teams to define CI/CD workflows as software code using a Jenkinsfile. It provides automation, version control, repeatability, and collaboration, making it a fundamental practice in modern DevOps environments.

Jenkins Shared Libraries

What are Jenkins Shared Libraries?

Jenkins Shared Libraries allow you to create reusable pipeline code that can be shared across multiple projects and teams. Instead of writing the same scripts repeatedly, teams create common functions in a centralized library.

Why Use Jenkins Shared Libraries?

Problems without Shared Libraries: Duplicate code, difficult maintenance, and inconsistent standards.

Benefits with Shared Libraries: Write once, reuse everywhere; Centralized CI/CD logic; Faster development; Easier maintenance.

Jenkins Shared Library Architecture

    jenkins-shared-library/
    ├── vars/        # Reusable pipeline steps
    ├── src/         # Helper Groovy classes
    ├── resources/   # Config/Template files
    └── README.md
    

Main Components

Creating Shared Library

  1. Create Git Repo: e.g., github.com/company/jenkins-shared-library
  2. Create Function: Inside vars/buildApp.groovy.
  3. Configure Jenkins: Manage Jenkins → System Configuration → Global Pipeline Libraries.

Usage in Jenkinsfile

    @Library('company-library') _
    pipeline {
        agent any
        stages {
            stage('Build') {
                steps { buildApp() }
            }
        }
    }
    

Types of Jenkins Shared Libraries

Best Practices

Advantages Table

FeatureBenefit
ReusabilityWrite once, use everywhere
StandardizationSame CI/CD process globally
MaintenanceSingle location updates
ScalabilitySupports 100s of projects

Shared Library with DevOps Tools

Summary: Jenkins Shared Libraries provide a centralized, scalable method to standardize automation across modern DevOps environments.

GitHub Integration with Jenkins

1. What is GitHub Integration?

GitHub Integration with Jenkins enables the automation of the CI/CD pipeline. By connecting these two, Jenkins listens for events from GitHub (like a code push). Once triggered, Jenkins performs automated tasks like cloning, building, testing, and deploying the application, ensuring that code quality is maintained automatically.

2. Jenkins + GitHub CI/CD Workflow

The workflow follows a trigger-based approach: The developer pushes code to the GitHub Repository, which sends a notification via Webhook to the Jenkins Server. Jenkins then performs the following: Checkout Code → Build → Run Tests → Build Docker Image → Deploy to Server.

3. Benefits of Integration

FeatureBenefit
Automatic BuildsBuild starts instantly after Git push
Continuous IntegrationFrequent automated code testing
Deployment AutomationEliminates manual effort, faster releases
VisibilityEasily track pipeline health in GitHub

4. Requirements

Before beginning, ensure you have:

5. Detailed Setup Guide

Step-by-Step Configuration:

  1. Install Git: Run sudo apt install git -y on your Jenkins server.
  2. Install Plugins: Go to Manage Jenkins → Manage Plugins and install the GitHub suite.
  3. Authentication: Generate a Personal Access Token (PAT) in GitHub under Developer Settings with repo and admin:repo_hook permissions.
  4. Add Credentials: In Jenkins, navigate to Credentials → Global Credentials and add your GitHub username and Token.
  5. Create Pipeline: Create a new Pipeline item. Select Pipeline script from SCM and provide your repo URL and credentials.

6. Configuring GitHub Webhook

A Webhook allows GitHub to push notifications to Jenkins automatically. In your GitHub Repository settings, navigate to Webhooks and add the Payload URL: http://YOUR-JENKINS-IP:8080/github-webhook/. Ensure Content Type is set to application/json.

7. Best Practices

8. Real-World DevOps Architecture

In enterprise environments, this integration connects the developer to the cloud. By pushing a commit, the developer initiates a chain: Jenkins → Docker Build → Push to Registry → Kubernetes Deployment → AWS/Azure Cloud.

Summary: GitHub Integration is the standard for modern CI/CD. It allows for reliable, repeatable, and scalable deployments, making it a mandatory skill for all DevOps Engineers.

Build Automation in Jenkins

What is Build Automation?

Build Automation is the process of automatically compiling source code, managing dependencies, running tests, creating packages, and preparing applications for deployment. In Jenkins, this is the core of Continuous Integration (CI).

Build Automation Workflow

Workflow: Developer Commit → Git Push → Jenkins Trigger → Checkout → Install Dependencies → Compile → Test → Package → Artifact Creation → Deploy.

Why Build Automation is Required?

Manual builds lead to human errors, slow delivery, and inconsistent environments. Automated builds provide:

Jenkins Build Automation Architecture

Jenkins Build Process Stages

  1. Source Code Checkout: Jenkins pulls code from Git.
    stage('Checkout') { steps { git 'https://github.com/company/app.git' } }
  2. Dependency Installation: Installing libraries (e.g., npm install, mvn install).
  3. Compile Source Code: Transforming code into executables (e.g., mvn compile).
  4. Automated Tests: Executing unit tests (e.g., mvn test, pytest).
  5. Create Build Artifact: Producing the final output (JAR, WAR, or Container Image).
  6. Store Artifacts: Archiving files in storage systems like Nexus, Artifactory, or AWS S3.

Artifact Management

ApplicationProduced Artifact
Java.jar / .war
Node.jsnpm package
DockerContainer image
PythonWheel package

Example - Archiving Artifacts in Jenkinsfile:

    post {
        success {
            archiveArtifacts artifacts: '**/*.jar', fingerprint: true
        }
    }
    

Jenkins Build Job Types

Build Automation Tools

LanguageToolsExample Command
JavaMaven, Gradle, Antmvn clean package
Node.jsnpm, yarnnpm install
Pythonpip, pytestpytest

Docker Build Automation

Jenkins can automatically create container images:

    stage('Docker Build') {
        steps { sh 'docker build -t webapp .' }
    }
    

Example: Java Maven Project

    pipeline {
        agent any
        stages {
            stage('Checkout') { steps { git 'https://github.com/company/java-app.git' } }
            stage('Build') { steps { sh 'mvn clean package' } }
            stage('Test') { steps { sh 'mvn test' } }
            stage('Archive') { steps { archiveArtifacts 'target/*.jar' } }
        }
    }
    

Build Triggers in Jenkins

Build Failure Handling

Jenkins logs errors in Console Output. You can integrate notifications with:

Jenkins Build Best Practices

Real-World CI/CD Build Automation

Workflow Summary: Developer Push → GitHub → Jenkins → Maven Build → Docker Image → Security Scan → Artifact Repository → Production.

Testing Automation in Jenkins

What is Testing Automation?

Testing Automation is the process of using software tools and scripts to automatically execute tests, compare actual results with expected results, and generate reports without manual intervention. In Jenkins CI/CD pipelines, automated testing ensures that every code change is validated before it is deployed to production.

Testing Automation in DevOps Pipeline

Pipeline Flow: Code Commit → GitHub → Jenkins Build → Automated Testing (Unit, Integration, API, Security, Performance) → Deployment.

Why Testing Automation is Important?

Manual testing is time-consuming, prone to human error, and fails to keep up with frequent releases. Automation provides:

Jenkins Testing Automation Architecture

The architecture allows Jenkins to trigger various test suites on Build Agents, capture the output, and make a decision to proceed with deployment based on the Test Reports.

Types of Automated Testing

Jenkins supports various test types to ensure complete application health:

1. Unit Testing

Validates individual functions or components. Tools: JUnit, PyTest.

@Test public void testLogin() { assertEquals(true, login()); }

2. Integration Testing

Tests the communication between components, such as the application and the database. Tools: JUnit, TestNG.

3. Functional Testing

Checks application features from a user perspective (e.g., Login, Checkout). Tools: Selenium, Cypress, Playwright.

4. API Testing

Tests backend services and REST APIs to ensure correct data exchange. Tools: Postman, REST Assured, SoapUI.

5. Security Testing

Checks for vulnerabilities and secret leaks. Tools: SonarQube, OWASP Dependency Check, Trivy.

6. Performance Testing

Evaluates application speed and scalability under load. Tools: JMeter, Gatling, LoadRunner.

Summary

Testing Automation is the backbone of a successful CI/CD pipeline. By integrating Unit, Functional, API, Security, and Performance tests into Jenkins, DevOps engineers ensure that only high-quality, bug-free code reaches the production environment.

Testing Stages in Pipeline

A standard Jenkins testing pipeline consists of sequential stages to ensure code health:

Full Testing Pipeline Example

    pipeline {
        agent any
        stages {
            stage('Build') { steps { sh 'mvn clean package' } }
            stage('Unit Testing') { steps { sh 'mvn test' } }
            stage('Security Scan') { steps { sh 'trivy image myapp' } }
            stage('Deploy') { steps { echo "Deploying Application" } }
        }
    }
    

Testing Tools Integration

ToolPurpose
JUnit / TestNGJava Testing
SeleniumBrowser Automation
PyTestPython Testing
PostmanAPI Testing
SonarQubeCode Quality Analysis
JMeterPerformance Testing
TrivyContainer Security

Jenkins + Selenium Automation

Jenkins triggers Selenium scripts to perform browser-based functional testing:

    stage('Selenium Test') {
        steps { sh 'python selenium_test.py' }
    }
    

SonarQube Code Quality Testing

Workflow: Commit → Jenkins → SonarQube Analysis → Quality Gate → Deploy/Reject.

    stage('Code Analysis') {
        steps { sh 'sonar-scanner' }
    }
    

Summary: By integrating these testing tools directly into the Jenkins pipeline, DevOps teams achieve an automated "Quality Gate," ensuring that only secure, tested, and high-performance code proceeds to deployment.

Testing Container Images

Testing in Docker ensures that the containerized application is secure and functional before it reaches production. The workflow is as follows:

  1. Build: docker build -t webapp .
  2. Security Scan: trivy image webapp
  3. Push: Upload the verified image to the Container Registry.

Automated Testing Reports in Jenkins

Jenkins provides detailed visibility into the health of your application through:

    Build #25:
    ✔ Unit Tests: 250 Passed
    ✔ API Tests: 80 Passed
    ✘ Security Tests: 2 Failed
    Status: FAILED
    

Testing Automation Best Practices

Real-World CI/CD Testing Architecture

In a production environment, this architecture acts as a Quality Gate. Only after Unit Tests, Selenium Tests, and Security Scans are passed does Jenkins approve the deployment to Docker/Kubernetes environments.

Summary

Testing Automation is the foundation of modern DevOps. By combining Jenkins with Docker and automated testing tools, teams ensure that every release is secure, reliable, and high-quality. This approach enables rapid deployment without compromising on stability.

Deployment Automation in Jenkins

What is Deployment Automation?

Deployment Automation is the process of releasing applications, configurations, and infrastructure changes to different environments without manual intervention. It is the final and most critical phase of the Continuous Deployment (CD) pipeline.

Deployment Automation Workflow

Workflow: Git Push → GitHub → Jenkins Build → Automated Tests → Artifact Creation → Deployment → Verification.

Why Deployment Automation is Important?

Manual deployments are prone to human error and inconsistency. Automation offers:

Jenkins Deployment Architecture

Jenkins Controller acts as the orchestrator, while Jenkins Agents perform the deployment tasks to Docker, Kubernetes, or Cloud environments.

Deployment Environments Flow

Applications are promoted through stages to ensure quality:

Developer → Dev Env → Testing Env → Staging → Production

Jenkins Deployment Pipeline Stages

  1. Checkout Code: git 'https://github.com/company/app.git'
  2. Build Application: sh 'mvn clean package' (Creates application.jar)
  3. Testing: sh 'mvn test' (Ensures quality before release)
  4. Package Application: docker build -t webapp:v1 . or helm package
  5. Deploy: Executing commands like kubectl apply -f deployment.yaml or restarting services.

1. SSH Deployment

Deploy application directly to a Linux server using SSH.

stage('Deploy') {
    steps {
        sh '''
        scp app.jar user@server:/app/
        ssh user@server "systemctl restart app"
        '''
    }
}
    

2. Docker Deployment

Jenkins builds, tags, and runs containers automatically.

stage('Docker Deploy') {
    steps {
        sh '''
        docker build -t webapp .
        docker run -d -p 80:80 webapp
        '''
    }
}
    

3. Kubernetes Deployment

Modern cloud-native deployment using orchestrators.

stage('Kubernetes Deploy') {
    steps {
        sh 'kubectl apply -f deployment.yaml'
    }
}
    

Kubernetes Deployment Example

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: webapp:v1
        ports:
        - containerPort: 80
    

Command to deploy: kubectl apply -f deployment.yaml

4. Cloud Deployment

Jenkins manages deployments across AWS, Azure, and Google Cloud using provider credentials to manage EC2, ECS, or EKS resources.

Jenkins Deployment Strategies

Strategy Process Benefits
Blue-Green Deploy to Green, test, switch traffic, remove Blue. Zero downtime, easy rollback.
Rolling Update servers gradually (Pod 1 to v2, then Pod 2 to v2). Resource efficient, stable.
Canary Deploy to 5% of users, monitor feedback, then scale. Risk reduction, performance tracking.

1. Jenkins with Ansible

Ansible is used for configuration management and application deployment across multiple servers.

    stage('Deploy') {
        steps {
            sh 'ansible-playbook deploy.yml'
        }
    }
    

2. Jenkins with Terraform

Automating infrastructure provisioning (Infrastructure as Code) using Terraform.

    stage('Infrastructure') {
        steps {
            sh '''
            terraform init
            terraform apply -auto-approve
            '''
        }
    }
    

3. Deployment Rollback

If a deployment fails, Jenkins initiates a rollback to the previous stable state.

Kubernetes Example: kubectl rollout undo deployment/webapp

4. Deployment Notifications

Jenkins keeps teams updated via:

    Deployment Status:
    Application: WebApp | Env: Production | Status: SUCCESS
    

5. Deployment Best Practices

6. Real-World Jenkins Deployment Architecture

A typical enterprise pipeline integrates CI (Jenkins) with Provisioning (Terraform) and Orchestration (Kubernetes) to deliver high-quality software to production.

Summary

Deployment Automation in Jenkins simplifies the release process by integrating tools like Docker, Kubernetes, Terraform, and Ansible. It is a critical skill for DevOps Engineers to achieve zero-downtime, scalable, and secure production releases.

Jenkins Backup & Recovery

What is Jenkins Backup & Recovery?

Jenkins Backup & Recovery is the critical process of protecting Jenkins configurations, job definitions, pipelines, plugins, credentials, and build data. A robust backup strategy ensures that Jenkins can be fully restored in the event of unforeseen failures, including:

Importance: A well-defined backup strategy guarantees business continuity and minimizes downtime for your CI/CD pipelines.

Jenkins Data Architecture

Jenkins stores almost all its vital configuration and application data within the Jenkins Home Directory. Backing up this specific directory is the foundation of any disaster recovery plan.

Default Location: /var/lib/jenkins

Directory Structure Overview:

/var/lib/jenkins
├── jobs/           # Project configurations and job histories
│   ├── Project-A/
│   └── Project-B/
├── workspace/      # Working directory for active builds
├── plugins/        # Installed Jenkins plugins
├── users/          # User profiles and records
├── secrets/        # Encryption keys and sensitive data
├── credentials.xml # Global credentials storage
├── config.xml      # Core system configuration
└── builds/         # Build history and logs
    

What Should Be Backed Up?

To ensure a full recovery, you must back up the core components of the Jenkins Home Directory. Here is the breakdown of the essential items:

1. Jenkins Configuration

This includes the primary system settings that define how your Jenkins instance behaves.

2. Jenkins Jobs

Every job definition and build configuration is stored here. If this folder is lost, all job history and project setups are gone.

3. Jenkins Pipelines

Pipelines are the heart of automation. While Jenkinsfile often resides in Git, the Jenkins server also stores:

4. Plugins

Ensures that your Jenkins instance retains its functionality upon restoration.

5. Credentials

Crucial: These are the sensitive secrets that provide Jenkins access to external resources.

6. User Information

Contains the user records, profiles, and permissions (RBAC) configured within Jenkins.


Pro-Tip: Always ensure the /secrets/ directory is backed up securely, as it contains the keys required to decrypt the sensitive information in credentials.xml.

Jenkins Backup Methods

1. Manual File System Backup

The simplest approach involves creating a compressed archive of the Jenkins Home directory.

# Stop Jenkins to ensure data integrity
sudo systemctl stop jenkins

# Create compressed backup
sudo tar -czvf jenkins-backup.tar.gz /var/lib/jenkins

# Restart Jenkins
sudo systemctl start jenkins
    

Result: A portable file jenkins-backup.tar.gz ready for storage.

2. Using Rsync Backup

Rsync is ideal for remote backups, offering incremental updates to save time and bandwidth.

rsync -avz /var/lib/jenkins/ backup-server:/backup/jenkins/

Benefits: Faster performance and efficient use of storage space.

3. Jenkins ThinBackup Plugin

The ThinBackup plugin provides an automated, Jenkins-native way to manage backups without needing shell access.

4. Cloud Backup

For long-term retention, store backups in cloud object storage like AWS S3, Azure Storage, or Google Cloud Storage.

Example Workflow:

  1. Jenkins generates the backup archive.
  2. An automated script uploads the archive to an S3 Bucket.
  3. Lifecycle policies move files to "Glacier" for long-term, cost-effective storage.

Jenkins Backup Automation

1. Jenkins Backup Script (jenkins_backup.sh)

Using a shell script is the most reliable way to perform manual or automated backups of the JENKINS_HOME directory.

#!/bin/bash

# Configuration
DATE=$(date +%F)
BACKUP_DIR="/backup"
JENKINS_HOME="/var/lib/jenkins"

# Create compressed archive
tar -czf $BACKUP_DIR/jenkins-$DATE.tar.gz $JENKINS_HOME

echo "Backup completed successfully on $DATE"
    

Execution Steps:

  1. Save the file as jenkins_backup.sh.
  2. Make the script executable: chmod +x jenkins_backup.sh
  3. Execute: ./jenkins_backup.sh

2. Automate Backup Using Cron

To ensure your data is safe without manual intervention, schedule the backup using the Linux crontab.

Steps to schedule:

  1. Open cron editor: crontab -e
  2. Add the following line to schedule a daily backup at 2:00 AM:
0 2 * * * /scripts/jenkins_backup.sh

Automation Workflow:

  1. Trigger: Clock hits 2:00 AM every day.
  2. Action: Cron executes jenkins_backup.sh.
  3. Process: Jenkins data is compressed and moved to the designated backup directory.

Jenkins Recovery Process

Scenario: Jenkins Server Failure

Recovery steps:

Install New Jenkins Server
          ↓
Install Java
          ↓
Install Jenkins
          ↓
Stop Jenkins Service
          ↓
Restore Backup Data
          ↓
Start Jenkins
          ↓
Verify Jobs & Pipelines

Step 1: Install Jenkins on New Server

Prepare the new environment by installing Java and the Jenkins package.

sudo apt update
sudo apt install openjdk-17-jdk -y
sudo apt install jenkins -y
    

Step 2: Stop Jenkins

Ensure the Jenkins service is not running before overwriting the data directory.

sudo systemctl stop jenkins

Step 3: Restore Jenkins Backup

Extract your backup archive to the system root to restore the /var/lib/jenkins directory.

sudo tar -xzvf jenkins-backup.tar.gz -C /

Step 4: Fix Permissions

It is vital to ensure that the Jenkins service owns its home directory to avoid access errors.

sudo chown -R jenkins:jenkins /var/lib/jenkins

Step 5: Start Jenkins

Restart the service and confirm it is running correctly.

sudo systemctl start jenkins
sudo systemctl status jenkins
    

Step 6: Verify Recovery

After the service is up, perform a sanity check on the critical components:

Jenkins Disaster Recovery

Disaster Recovery Architecture

A resilient setup ensures that data flows from the Production Jenkins server to both Local and Cloud backups, allowing for a seamless transition to a Disaster Recovery Server if the main instance fails.

Jenkins Backup with AWS S3

Automate your off-site storage by pushing backups to an S3 bucket.

aws s3 cp jenkins-backup.tar.gz s3://company-jenkins-backup/

Jenkins Recovery Best Practices

Backup CategoryFrequency
Jenkins ConfigurationDaily
JobsDaily
PluginsWeekly
Full ServerWeekly

Jenkins Backup in Kubernetes

For Jenkins on Kubernetes, focus on snapshots of the Persistent Volume (PV) that holds the Jenkins Home directory.

Jenkins Backup Tools

ToolPurpose
ThinBackup PluginJenkins backup automation
RsyncServer-to-server backup
TarManual file compression
VeleroKubernetes-native backup

Backup & Recovery Checklist

Summary

Professional DevOps teams rely on automated backups, off-site storage, and regular disaster recovery drills to ensure 99.9% uptime. The core of any recovery is the Jenkins Home Directory, which must be backed up consistently and verified through testing.

Questions & Answers

Q1: What is Jenkins?

Answer: Jenkins is an open-source automation server used to implement Continuous Integration (CI) and Continuous Delivery/Deployment (CD) pipelines. It automates building, testing, and deploying applications.

Q2: What is CI/CD?

Answer: CI/CD stands for Continuous Integration and Continuous Delivery/Deployment. It automates software development workflows from code integration to production deployment.

Q3: What is Continuous Integration (CI)?

Answer: Continuous Integration is the practice of frequently merging code changes into a shared repository and automatically building and testing the application.

Q4: What is Continuous Delivery?

Answer: Continuous Delivery automatically prepares software releases and ensures applications are always ready for deployment.

Q5: What is Continuous Deployment?

Answer: Continuous Deployment automatically deploys tested applications directly into production without manual approval.

Q6: What are the main components of Jenkins?

Answer: Main Jenkins components are: Jenkins Controller, Agents, Jobs, Pipelines, Plugins, Workspace, and Executors.

Q7: What is Jenkins Controller?

Answer: Jenkins Controller manages jobs, schedules builds, manages plugins, security, and controls Jenkins agents.

Q8: What is a Jenkins Agent?

Answer: A Jenkins Agent is a machine that executes build, testing, and deployment tasks assigned by the Jenkins Controller.

Q9: What is Jenkins Pipeline?

Answer: A Jenkins Pipeline is a collection of automated steps that define the CI/CD workflow such as build, test, and deployment.

Q10: What is Jenkinsfile?

Answer: A Jenkinsfile is a text file containing Jenkins pipeline code written using Groovy syntax.

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        echo 'Building Application'
      }
    }
  }
}
        

Installation & Configuration

Q11: Which operating systems support Jenkins?

Answer: Jenkins is cross-platform and supports Linux, Windows, macOS, and can be run via Docker containers.

Q12: What Java version is required for Jenkins?

Answer: Modern Jenkins versions require Java 17 or later to function correctly.

Q13: What is the default Jenkins port?

Answer: The default port for the Jenkins web interface is 8080.

Q14: How do you check Jenkins service status?

Answer: Use the command: systemctl status jenkins

Q15: How do you start Jenkins?

Answer: Use the command: systemctl start jenkins

Q16: How do you restart Jenkins?

Answer: Use the command: systemctl restart jenkins

Q17: Where is Jenkins home directory located?

Answer: By default, it is located at /var/lib/jenkins.

Q18: How do you access Jenkins?

Answer: Access via a web browser using the URL: http://server-ip:8080

Q19: How do you get the initial Jenkins password?

Answer: Run: cat /var/lib/jenkins/secrets/initialAdminPassword

Q20: What are Jenkins plugins?

Answer: Plugins are add-ons that extend Jenkins functionality by providing integration with external tools like GitHub, Docker, Kubernetes, and AWS.

Jenkins Jobs

Q21: What is a Jenkins Job?

Answer: A Jenkins Job defines specific tasks that Jenkins executes, such as building source code, running automated tests, or deploying artifacts.

Q22: What are Jenkins job types?

Answer: Common types include: Freestyle Project, Pipeline Job, Multibranch Pipeline, and Maven Project.

Q23: What is a Freestyle Job?

Answer: A Freestyle Job is a flexible, GUI-based project type where users configure build steps, triggers, and post-build actions manually.

Q24: What is a Pipeline Job?

Answer: A Pipeline Job defines a complete CI/CD workflow using code (Jenkinsfile) instead of manual GUI configuration.

Q25: What is a Multibranch Pipeline?

Answer: A Multibranch Pipeline automatically creates and manages pipelines for different branches in your Git repository (e.g., feature branches, main branch).

Q26: What are the main sections of Jenkins Pipeline?

Answer: The main sections are: agent, environment, stages, steps, and post actions.

Q27: What is an Agent in Jenkins Pipeline?

Answer: The agent section defines where the pipeline or specific stage will execute. Example: agent any.

Q28: What are Jenkins Pipeline Stages?

Answer: Stages divide the pipeline into distinct, logical sections for better organization. Examples: Build, Test, Deploy.

Q29: What are Pipeline Steps?

Answer: Steps are the individual commands or tasks executed within a stage. Example: sh 'mvn test'.

Q30: What is the post section in Jenkins Pipeline?

Answer: The post section contains steps that execute after the pipeline finishes, regardless of the outcome (e.g., sending emails or generating reports).

GitHub Integration

Q31: How does Jenkins integrate with GitHub?

Answer: Jenkins integrates via the Git plugin, saved credentials, and webhooks to trigger automation.

Q32: What is a GitHub webhook?

Answer: A webhook is an automated notification sent from GitHub to Jenkins, triggering a build immediately upon code changes.

Q33: What happens after Git push?

Answer: The workflow is: Git PushGitHubWebhookJenkins Build.

Q34: How do you clone Git repository in Jenkins?

Answer: You define the URL in the pipeline code using: git '[https://github.com/project.git](https://github.com/project.git)'

Q35: What is SCM in Jenkins?

Answer: SCM stands for Source Code Management. It is the system Jenkins uses to retrieve source code. Examples include Git and SVN.

Build Automation

Q36: What is Build Automation?

Answer: Build automation is the process of automatically compiling source code and creating deployable packages from it.

Q37: Which build tools are used with Jenkins?

Answer: Common tools include: Maven, Gradle, Ant, and npm.

Q38: How do you execute shell commands in Jenkins?

Answer: Use the sh step: sh 'command'.

Q39: What is a build artifact?

Answer: A build artifact is the final deployable package generated by a build process, such as a JAR, WAR, or a Docker image.

Q40: Where does Jenkins store build files?

Answer: Jenkins stores build artifacts and source code in the workspace: /var/lib/jenkins/workspace/.

Testing Automation

Q41: What is Testing Automation?

Answer: It is the use of software tools and scripts to automatically verify the quality and correctness of an application.

Q42: Which testing tools integrate with Jenkins?

Answer: Commonly used tools: JUnit, Selenium, TestNG, SonarQube, and JMeter.

Q43: What is Unit Testing?

Answer: It is the practice of testing individual functions or components of an application in isolation.

Q44: What is Integration Testing?

Answer: It is the process of testing how multiple application components communicate and work together.

Q45: What is Selenium used for?

Answer: Selenium is used to automate functional and regression testing within web browsers.

Docker Integration

Q46: How does Jenkins work with Docker?

Answer: Jenkins pipelines can automatically build Docker images from source code and deploy them as containers.

Q47: What is Docker Build stage?

Answer: It is the stage where the Docker engine creates an image. Example command: docker build -t app .

Q48: What is Docker Registry?

Answer: A storage service for container images. Examples include Docker Hub and Amazon ECR.

Q49: How can Jenkins push Docker images?

Answer: By executing the command: docker push image-name.

Q50: Why use Docker in Jenkins pipeline?

Answer: It provides a consistent environment, simplifies deployment, and ensures application isolation.

Kubernetes Deployment

Q51: How does Jenkins deploy to Kubernetes?

Answer: Jenkins uses the kubectl CLI tool or native Kubernetes plugins to interact with the cluster and deploy resources.

Q52: What command deploys Kubernetes resources?

Answer: The command used is: kubectl apply -f deployment.yaml

Q53: What is Kubernetes Rolling Deployment?

Answer: A strategy that gradually replaces old application pods with new ones to ensure zero downtime.

Q54: What is Blue-Green Deployment?

Answer: A technique where two identical production environments exist; traffic is switched from the 'old' (Blue) to the 'new' (Green) environment.

Q55: What is Canary Deployment?

Answer: A strategy where a new version is released to a small subset of users to test stability before a full rollout.

Jenkins Security

Q56: Why is Jenkins security important?

Answer: Jenkins holds sensitive assets, including production passwords, API tokens, and cloud deployment credentials.

Q57: What is Jenkins Authentication?

Answer: It is the process of verifying the identity of a user or system attempting to access Jenkins.

Q58: What is Jenkins Authorization?

Answer: It defines what actions or resources a verified user is allowed to access (e.g., RBAC).

Q59: What is Jenkins Credential Management?

Answer: It is a centralized system to store and manage secrets like passwords and keys securely.

Q60: Why should secrets not be stored in Jenkinsfile?

Answer: Jenkinsfiles are committed to Git. Storing secrets there exposes them to anyone with repository access.

Jenkins Shared Libraries

Q61: What are Jenkins Shared Libraries?

Answer: They are a collection of reusable pipeline code used to standardize processes across multiple projects.

Q62: Why use Shared Libraries?

Answer: They offer code reuse, maintainability, and ensure standard pipeline structures.

Q63: Where are Shared Library functions stored?

Answer: They are stored in vars/, src/, and resources/ directories.

Q64: How do you load a Shared Library?

Answer: By using the annotation: @Library('library-name').

Q65: What is the purpose of vars directory?

Answer: The vars/ directory holds reusable pipeline functions that can be called directly in Jenkinsfiles.

Jenkins Backup and Recovery

Q66: What should be backed up in Jenkins?

Answer: Jobs, Plugins, Credentials, Configurations, and Pipeline definitions.

Q67: What is Jenkins Backup location?

Answer: The source directory is /var/lib/jenkins.

Q68: How do you backup Jenkins manually?

Answer: By archiving the home directory: tar -czf backup.tar.gz /var/lib/jenkins.

Q69: What is ThinBackup plugin?

Answer: A dedicated Jenkins plugin used to schedule and automate backup/restore processes.

Q70: Why test Jenkins recovery?

Answer: To ensure that the backup data is valid and can restore service continuity in the event of a disaster.

Advanced Jenkins Concepts

Q71: What is Jenkins Executor?

Answer: An executor is a processing slot on an agent or controller that performs the actual execution of a Jenkins job.

Q72: What is Jenkins Workspace?

Answer: It is the unique directory on a node where Jenkins downloads source code and performs build and test operations.

Q73: What is Jenkins Master-Agent architecture?

Answer: A distributed setup where the Controller handles orchestration and scheduling, while multiple Agents handle the heavy-lifting of task execution.

Q74: What is Jenkins Distributed Build?

Answer: The practice of distributing build and test loads across multiple Jenkins agents to reduce total build time.

Q75: What is Jenkins Environment Variable?

Answer: Key-value pairs available to the pipeline, such as BUILD_NUMBER or BRANCH_NAME, used to control execution flow.

Q76: What is Jenkins Artifact Repository?

Answer: A specialized storage system for build outputs. Popular tools include Sonatype Nexus and JFrog Artifactory.

Q77: What is Jenkins Approval Process?

Answer: A gatekeeping mechanism that requires a human to manually click "Proceed" before a pipeline continues to a sensitive stage like Production.

Q78: What is Jenkins Notification?

Answer: Automated alerts sent via Email, Slack, or Microsoft Teams to inform teams about build statuses.

Q79: What is Jenkins Blue Ocean?

Answer: A redesigned, modern user interface for Jenkins that provides intuitive pipeline visualization.

Q80: What is Jenkins CLI?

Answer: A command-line interface that allows administrators to manage Jenkins, execute commands, and control jobs remotely.

CI/CD Real World Questions

Q81: Explain Jenkins CI/CD workflow.

Answer: The flow: DeveloperGitHubJenkinsBuildTestDockerDeploy.

Q82: How do you automate deployment using Jenkins?

Answer: By using Pipeline scripts integrated with Infrastructure-as-Code (IaC) tools like Ansible, Terraform, or Kubernetes.

Q83: How do you trigger Jenkins automatically?

Answer: Through Webhooks, Time-based Scheduled Jobs (Cron), or API triggers.

Q84: How do you rollback deployment?

Answer: In Kubernetes, you use: kubectl rollout undo deployment/app.

Q85: How do you improve Jenkins performance?

Answer: Add more agents, enable parallel builds, optimize plugin count, and clear workspace directories periodically.

Q86: What is Jenkins Parallel Execution?

Answer: A pipeline feature that allows multiple independent stages (e.g., unit tests and linting) to run at the same time.

Q87: What is Jenkins Pipeline as Code?

Answer: Storing the pipeline definition in a Jenkinsfile within version control (Git), allowing for versioned and peer-reviewed build processes.

Q88: What is Infrastructure Deployment using Jenkins?

Answer: Using Jenkins to run Terraform or CloudFormation scripts to provision and manage cloud infrastructure.

Q89: How does Jenkins integrate with AWS?

Answer: Through AWS plugins, the AWS CLI, and IaC tools like Terraform to manage resources on AWS cloud.

Q90: How does Jenkins integrate with Ansible?

Answer: Jenkins triggers Ansible Playbooks via the shell or Ansible plugin to perform configuration management and application deployment.

Interview Questions

Q91: Difference between CI and CD?

Answer: CI focuses on frequent code integration and automated testing. CD focuses on the automated delivery and deployment of that code to production.

Q92: Difference between Freestyle and Pipeline jobs?

Answer: Freestyle jobs are configured manually via the Jenkins GUI, while Pipeline jobs are defined as code using a Jenkinsfile.

Q93: Difference between Controller and Agent?

Answer: The Controller acts as the orchestrator that manages jobs and configuration, while the Agent is the worker node that executes the actual tasks.

Q94: What happens when a Jenkins build fails?

Answer: The pipeline execution stops, logs are generated for debugging, and automated notifications (e.g., Slack/Email) are sent to the team.

Q95: How do you secure Jenkins?

Answer: By enabling authentication, implementing RBAC (Role-Based Access Control), securing credentials, regularly updating plugins, and forcing HTTPS/SSL.

Q96: How do you monitor Jenkins?

Answer: By using monitoring plugins, integration with Prometheus for metrics, Grafana for visualization, and analyzing system logs.

Q97: Where is Jenkinsfile stored?

Answer: It is typically stored in the root directory of the application's source code Git repository.

Q98: Why is Jenkins popular in DevOps?

Answer: It is open-source, highly flexible, has a massive plugin ecosystem, and integrates with nearly every modern development tool.

Q99: What tools commonly integrate with Jenkins?

Answer: GitHub, Docker, Kubernetes, Terraform, Ansible, AWS, and SonarQube.

Q100: Explain complete Jenkins CI/CD pipeline.

Answer: The pipeline automates the entire software lifecycle: Developer Push → GitHub Webhook → Jenkins Orchestration → Build → Unit Test → Security Scan → Containerization → Image Registry → Deployment to Kubernetes → Production environment.