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.idLocal
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