Skip to content

Latest commit

 

History

History

jenkins-kubernetes-plugin-with-build-cache

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

First, you will have to create a StorageClass:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: jenkins-maven-cache
  annotations:
    reclaimable-pv-releaser.kubernetes.io/controller-id: dynamic-reclaimable-pvc-controllers
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: jenkins-golang-cache
  annotations:
    reclaimable-pv-releaser.kubernetes.io/controller-id: dynamic-reclaimable-pvc-controllers
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer

For maximizing cache hit ratio - you may want to have a separate SC per each cache type, i.e. Maven, Gradle, Go, etc.

Now, you can create a pod with ephemeral volumes using that reclaimable storage classes via a podTemplate in your Jenkinsfile:

podTemplate(yaml: """
    apiVersion: v1
    kind: Pod
    metadata:
    spec:
      volumes:
        - name: maven-cache
          ephemeral:
            volumeClaimTemplate:
              spec:
                storageClassName: jenkins-maven-cache
                resources:
                  requests:
                    storage: 1Gi
                accessModes:
                  - ReadWriteOnce
        - name: golang-cache
          ephemeral:
            volumeClaimTemplate:
              spec:
                storageClassName: jenkins-golang-cache
                resources:
                  requests:
                    storage: 1Gi
                accessModes:
                  - ReadWriteOnce
      securityContext:
        supplementalGroups: [1000]
        fsGroup: 1000
      containers:
        - name: maven
          image: maven:3.8.1-jdk-8
          command:
            - sleep
          args:
            - 99d
          volumeMounts:
            - name: maven-cache
              mountPath: /root/.m2/repository
        - name: golang
          image: golang:1.16.5
          command:
            - sleep
          args:
            - 99d
          volumeMounts:
            - name: golang-cache
              mountPath: /go/pkg/mod
""") {
    node(POD_LABEL) {
      stage('Get a Maven project') {
        git 'https://github.com/jenkinsci/kubernetes-plugin.git'
        container('maven') {
          stage('Build a Maven project') {
            sh 'mvn -B -ntp clean install'
          }
        }
      }

      stage('Get a Golang project') {
        git url: 'https://github.com/plumber-cd/kubernetes-dynamic-reclaimable-pvc-controllers.git', branch: 'main'
        container('golang') {
          stage('Build a Go project') {
            sh 'mkdir bin && go build -o ./bin ./...'
          }
        }
      }
    }
}