import java.text.SimpleDateFormat def label = "worker-${UUID.randomUUID().toString()}" podTemplate( label: label, containers: [ containerTemplate( name: 'gradle', image: 'gradle:7.6.0-jdk11', command: 'sleep', args: '30d' ), containerTemplate( name: 'docker', image: 'docker:latest', command: 'cat', ttyEnabled: true ), containerTemplate( name: 'kubectl', image: 'bitnami/kubectl:latest', command: 'cat', ttyEnabled: true ), containerTemplate( name: 'helm', image: 'alpine/helm:latest', command: 'cat', ttyEnabled: true ) ], volumes: [ hostPathVolume(mountPath: '/home/gradle/.gradle', hostPath: '/tmp/jenkins/.gradle'), hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock') ] ) { node(label) { def dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") def date = new Date() def BUILD_DATE = dateFormat.format(date) def myRepo = checkout scm def gitCommit = myRepo.GIT_COMMIT def gitBranch = myRepo.GIT_BRANCH def shortGitCommit = "${gitCommit[0..10]}" def previousGitCommit = sh(script: "git rev-parse ${gitCommit}~", returnStdout: true) def dockerRegistryUrl = "harbor.loafle.net" stage('Test') { try { container('gradle') { def projectName = sh(returnStdout: true, script: "gradle -q projectName").trim() def projectVersion = sh(returnStdout: true, script: "gradle -q projectVersion").trim() env.PROJECT_NAME = projectName env.PROJECT_VERSION = projectVersion sh """ pwd echo "GIT_BRANCH=${gitBranch}" >> /etc/environment echo "GIT_COMMIT=${gitCommit}" >> /etc/environment gradle test """ } } catch (exc) { println "Failed to test - ${currentBuild.fullDisplayName}" throw(exc) } } stage('Build') { container('gradle') { sh "gradle build" } } stage('Create Docker images') { container('docker') { withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'harbor.loafle.net', usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASSWORD']]) { env.CONTAINER_IMAGE_NAME = "prototype/${env.PROJECT_NAME}" sh """ docker login -u "${HARBOR_USER}" -p "${HARBOR_PASSWORD}" ${dockerRegistryUrl} docker build -t ${dockerRegistryUrl}/${env.CONTAINER_IMAGE_NAME}:${env.PROJECT_VERSION} --build-arg PROJECT_NAME=${env.PROJECT_NAME} --build-arg PROJECT_VERSION=${env.PROJECT_VERSION} . docker push ${dockerRegistryUrl}/${env.CONTAINER_IMAGE_NAME}:${env.PROJECT_VERSION} """ } } } stage('Deploy Application on K8s') { container('kubectl') { withKubeCredentials(kubectlCredentials: [[ caCertificate: '', clusterName: 'microk8s', contextName: '', credentialsId: 'jenkins-admin-secret', namespace: 'kube-system', serverUrl: 'https://192.168.50.10:16443']]) { kubectl config view } } } } }