jenkins Pipeline

Creamos una tarea nueva

para este caso se usa la opcion de pipeline

Configuramos los parametros necesarios para poder ejecutar el pipeline, para el escenario de ejemplo configuramos

  • Definition: "Pipeline script from SCM"

  • SCM: "Git"

  • Repositories: url del repositorio

  • Script path: para este caso en el repositorio de ejemplo el script se encuentra en la carpeta "misc" entonces la ruta se define como "misc/Jenkinsfile"

El codigo del archivo Jenkinsfile es el siguiente:

node {
   def commit_id
   stage('Preparation') {
     checkout scm
     sh "git rev-parse --short HEAD > .git/commit-id"                        
     commit_id = readFile('.git/commit-id').trim()
   }
   stage('test') {
     nodejs(nodeJSInstallationName: 'nodejs') {
       sh 'npm install --only=dev'
       sh 'npm test'
     }
   }
   stage('docker build/push') {
     docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') {
       def app = docker.build("alphyon/docker-node-example:${commit_id}", '.').push()
     }
   }
}

en este script se ha definido un nodo con 3 escenarios para ejecutarse en nuestro pipeline, para el ejempo se hace un escenario de preparacion, el cual revisa el repositorio para hacer un push de los archivos que se necesitan en la ejecucion de la prueba, un escenario de test el cual instala las dependencias necesarias y corre los unit test almacenados en el proyecto y por ultimo un stage de construccion del contendor y su publicacion en el repositorio de imagenes de docker, en la imagen siguiente se observa el resultado de ejecuciones del pipeline

Agregando un nuevo stage

podemos agregar los escenarios que sean posibles a nuestos jobs para ello solo debemos crear una nueva seccion dentro del script que desamos ejecutar, para este caso se agrega un nuevo script con un escenario extra el cual es hacer unas pruebas con un contenedor que corra una base de datos

node {
   def commit_id
   stage('Preparation') {
     checkout scm
     sh "git rev-parse --short HEAD > .git/commit-id"
     commit_id = readFile('.git/commit-id').trim()
   }
   stage('test') {
     def myTestContainer = docker.image('node:4.6')
     myTestContainer.pull()
     myTestContainer.inside {
       sh 'npm install --only=dev'
       sh 'npm test'
     }
   }
   stage('test with a DB') {
     def mysql = docker.image('mysql').run("-e MYSQL_ALLOW_EMPTY_PASSWORD=yes") 

def myTestContainer = docker.image('node:4.6')
     myTestContainer.pull()
     myTestContainer.inside("--link ${mysql.id}:mysql") { // using linking, mysql will be available at host: mysql, port: 3306
          sh 'HOME=$PWD npm install --only=dev' 
          sh 'npm test'                     
     }                                   
     mysql.stop()
   }                                     
   stage('docker build/push') {            
     docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') {
       def app = docker.build("alphyon/docker-node-example:${commit_id}", '.').push()
     }                                     
   }                                       
}

Creamos una nueva tarea del tipo pipeline con la referencia del archivo que contiene nuestro nuevo script y lo ejecutamos, como se observa en la imagen se ejecutaron 4 escenarios

Last updated

Was this helpful?