En este ejemplo vamos a empezar con un codigo spring muy simple que sera compilado con maven dentro de una imagen docker, asi ademas de tener un control de version tambien tenemos un control de compilacion.

La pipeline tiene dos stages, el primero sera ejecutado dentro de la imagen docker y los pasos que vamos a realizar ahi seran compilar con maven y testear el codigo ademas nos guardaremos los resultados de los tests y creamos un artefacto como resultado de la compilacion.

En el segundo stage jenkins va a crear una imagen docker y la subira a un docker registry privado tageandolo con el numero de build y renombrando el ultimo tag latest.

Importante añadir las credenciales del resgitry en jenkins y luego la llamanos con su id credentials en el ejemplos kluster.id

Local

Nos clonamos el repo lo compilamos para verificar que nos funciona standalone

git clone https://github.com/Akaronte/hello-spring-apirest.git
cd hello-spring-apirest
mvn package
java -jar .\target\hello-spring-apirest-0.1.0.jar

Jenkins

Creamos una nueva pipelina, como el jenkinsfile esta en la raiz del repo unicamnete tenemos que especificar el repo y credenciales.

Tambien tenemos que agregar las credenciales del docker registry de destino que espeficiamos en la pipeline

pipeline {
    agent none
    stages {
        stage('compile') {
                agent {
                    docker {
                        image 'maven:3-alpine'
                        args '-v $HOME/.m2:/root/.m2'
                    }
                }
            steps {
                sh 'mvn package'
                stash name: "jar", includes: "target/**/*.jar"
            }
            post {
                success {
                    archiveArtifacts artifacts: 'target/**/*.jar', fingerprint: true
                    junit 'target/surefire-reports/**/*.xml'
                }
            }
        }
        stage('Dockerfile') {
            agent {
                node {
                    label 'master'
                }
            }
            steps {
                script{
                    unstash 'jar'
                    docker.withRegistry('https://kluster.tk:5000', 'kluster.tk') {
                        def customImage = docker.build("hello:${env.BUILD_ID}")
                        customImage.push()
                        def customImageLatest = docker.build("hello:latest")
                        customImageLatest.push()
                    }
                }
            }
            post{
                cleanup {
                echo "CLEAN"
                cleanWs()
                }
            }
        }
    }
}

Server

Ya podmeos hacer un pull y descargarnos la imagen que jenkins ha creado y pusheado

docker pull kluster.tk:5000/hello
docker run --name hello -p 8080:8080 -d kluster.tk:5000/hello

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *