Sling Academy
Home/DevOps/How to set up Jenkins in Kubernetes environment

How to set up Jenkins in Kubernetes environment

Last updated: February 03, 2024

Introduction

Jenkins is an open-source automation server that enables developers around the world to reliably build, test, and deploy their software. When combined with Kubernetes, a portable, extensible open-source platform for managing containerized workloads and services, it provides a robust foundation for a Continuous Integration/Continuous Deployment (CI/CD) pipeline. In this tutorial, we’ll walk through setting up Jenkins in a Kubernetes environment, going from basic to advanced configurations, with code examples and expected outcomes where applicable.

Prerequisites

  • Kubernetes cluster (You can use Minikube for a local setup)
  • kubectl installed and configured to talk to your cluster
  • Helm v3 installed
  • Basic knowledge of Kubernetes and Jenkins

Step 1: Install Jenkins Using Helm

First, we need to add the Jenkins Helm chart repository and update our Helm repo list:

helm repo add jenkinsci https://charts.jenkins.io
helm repo update

Now, let’s install Jenkins using Helm by creating a custom values file to configure Jenkins parameters:

cat >> jenkins-values.yaml <<EOF
controller:
  adminUser: admin
  adminPassword: <your_password>
  serviceType: NodePort
  nodePort: 32000
  persistence:
    storageClass: use-the-existing-storage-class-here
EOF

Install Jenkins:

helm install jenkins jenkinsci/jenkins -f jenkins-values.yaml

This will set up Jenkins with the specified parameters. You can access Jenkins by finding the NodePort exposed on your Kubernetes cluster:

kubectl get svc -n default

This command lists all services in the default namespace. Look for the ‘jenkins’ service and note the NodePort next to it.

Step 2: Configure Jenkins

Once Jenkins is up, navigate to it using your browser. You’ll be prompted to login with the `admin` username and the password you set in the jenkins-values.yaml file.

After logging in, you’ll be able to customize Jenkins, install plugins, and configure it according to your project needs.

Step 3: Setting up a Jenkins Pipeline

Jenkins pipelines are automated paths that software development processes follow from version control to deployment. To set up a Jenkins pipeline in Kubernetes, create a Jenkinsfile in your repository with the following content:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'echo "Building..."'
            }
        }
        stage('Test') {
            steps {
                sh 'echo "Testing..."'
            }
        }
        stage('Deploy') {
            steps {
                sh 'echo "Deploying to Kubernetes"'
            }
        }
    }
}

Now, configure Jenkins to build this pipeline:

  • Go to Jenkins dashboard
  • Click on ‘New Item’
  • Name your pipeline and choose ‘Pipeline’ project
  • In the pipeline configuration, select ‘Pipeline script from SCM’
  • Choose the SCM (e.g., Git), enter your repository URL, and path to your Jenkinsfile

When you run this pipeline, Jenkins will execute each stage in the Jenkinsfile, echoing the build, test, and deployment steps.

Step 4: Advanced Configuration – Utilizing Kubernetes Resources

For more advanced Kubernetes integrations, you can configure Jenkins pipelines to utilize Kubernetes resources such as Pods and Volumes directly. This requires installing the Kubernetes plugin in Jenkins.

Once the plugin is installed, you can define a pipeline that runs each stage inside a Kubernetes pod:

pipeline {
    agent {
        kubernetes {
            yaml """
            apiVersion: v1
            kind: Pod
            spec:
              containers:
              - name: maven
                image: maven:3-alpine
                command:
                - cat
                tty: true
            """
        }
    }
    stages {
        stage('Build') {
            steps {
                container('maven') {
                    sh 'mvn clean package'
                }
            }
        }
        stage('Test') {
            steps {
                container('maven') {
                    sh 'mvn test'
                }
            }
        }
    }
}

This Jenkinsfile specifies a pipeline that runs in a Kubernetes pod using a Maven container for build and test stages.

Conclusion

Setting up Jenkins in a Kubernetes environment harnesses the power of both platforms, bringing together the flexibility of Jenkins pipelines with the scalability and resilience of Kubernetes. Following the steps outlined in this tutorial, you can set up a basic Jenkins instance ready for CI/CD in Kubernetes and explore more complex configurations utilizing Kubernetes resources. The journey to fully automated, scalable CI/CD pipelines is an exciting one, and Jenkins with Kubernetes is an excellent place to start.

Next Article: 3 Ways to Install Jenkins on Windows

Previous Article: How to install Jenkins with Docker and Docker Compose

Series: Jenkins Tutorials

DevOps

You May Also Like

  • How to reset Ubuntu to factory settings (4 approaches)
  • Making GET requests with cURL: A practical guide (with examples)
  • Git: What is .DS_Store and should you ignore it?
  • NGINX underscores_in_headers: Explained with examples
  • How to use Jenkins CI with private GitHub repositories
  • Terraform: Understanding State and State Files (with Examples)
  • SHA1, SHA256, and SHA512 in Terraform: A Practical Guide
  • CSRF Protection in Jenkins: An In-depth Guide (with examples)
  • Terraform: How to Merge 2 Maps
  • Terraform: How to extract filename/extension from a path
  • JSON encoding/decoding in Terraform: Explained with examples
  • Sorting Lists in Terraform: A Practical Guide
  • Terraform: How to trigger a Lambda function on resource creation
  • How to use Terraform templates
  • Understanding terraform_remote_state data source: Explained with examples
  • Jenkins Authorization: A Practical Guide (with examples)
  • Solving Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
  • Understanding Artifacts in Jenkins: A Practical Guide (with examples)
  • Using Jenkins with AWS EC2 and S3: A Practical Guide