119 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
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') {
 | 
						|
               withKubeConfig([credentialsId: 'loafle_net-kubeconfig']) {
 | 
						|
                   sh 'kubectl get pods -n dev'
 | 
						|
               }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
                // withKubeConfig(kubectlCredentials: [[
 | 
						|
                //     caCertificate: '', 
 | 
						|
                //     clusterName: 'microk8s', 
 | 
						|
                //     contextName: '', 
 | 
						|
                //     credentialsId: 'loafle_net-kubeconfig', 
 | 
						|
                //     namespace: 'kube-system', 
 | 
						|
                //     serverUrl: 'https://192.168.50.10:16443']]) {               
 | 
						|
                    
 | 
						|
                //     sh "kubectl config view"
 | 
						|
                // }
 | 
						|
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |