Crea pipeline para jenkins

Crea tu Pipeline en jenkins utilizando docker

Cuando uno esta comenzando en la integración continua seguramente fueras visto diferentes herramientas y te has dado de cuenta que jenkins es una de las opciones mas populares, pero viene la pregunta del millón como comenzar, te recomendaría que tengas el jenkins instalado en tu maquina, tener el proyecto en un repositorio git remoto  y ademas tengas docker en tu maquina local.

Bueno creamos una nueva (Job)tarea en nuestro jenkins, le damos un nombre y seleccionamos la opción de  multibranch  Pipeline

Llena los datos de git.

Pon la ubicación del archivo Jenkinsfile y recuerda guardar, luego nos dirigimos al git y creamos nuestro ejemplo.

Jenkinsfile

Bueno Jenkinsfile es como por defecto deberías llamar a tu código o paso a paso de tu integración y ademas ese archivo se escribe en groovy, te debes crear una archivo son la siguiente estructura básica

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any 
    stages {
        stage('Build') { 
            steps {
                // 
            }
        }
        stage('Test') { 
            steps {
                // 
            }
        }
        stage('Deploy') { 
            steps {
                // 
            }
        }
    }
}
https://www.jenkins.io/doc/book/pipeline/

dentro de la etiqueta stages  se ponen diferentes etapas (stage) en las cuales podrías escribir código que ejecutas cada día ejemplo.

pipeline { 
    agent any 
    options {
        skipStagesAfterUnstable()
    }
    stages {
        stage('Build') { 
            steps { 
                sh 'make' 
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml' 
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}
https://www.jenkins.io/doc/book/pipeline/

si compilas cada etapa se vera en un cuadro.

Para hacer un despliegue tenemos diversos problemas en los cuales no tenemos cierto lenguaje o programa que ejecuta cierta sentencia en el jenkins y falla el job , una de las buenas practicas es utilizar docker, podriamos utilizar imagenes que ya tengan lo que necesitamos ejemplo:

pipeline {
    agent {
        docker { image 'node:14-alpine' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

resultado

[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
[guided-tour] Running shell script
+ node --version
v14.15.0
[Pipeline] }
[Pipeline] // stage
[Pipeline] }

dentro de la etiqueta sh('') se escribe el código que se ejecuta dentro del stage.

eso nos permitiría ser dinámicos y desplegar en diferentes jenkins solo como requisito tener docker instalado.

y si por alguna razón necesita ejecutar una función para que la imagen docker funcione o corra correctamente podrias utilizar withDockerContainer ejemplo:

 stage('Deploy prod') {
          when {

                expression { params.action == 'create' && BRANCH_NAME == 'master' }

            }    
    
            steps {
                 script {
                 loginDocker()
	     withDockerContainer(image: 'IMAGE_PRIVATE', args: '-u 0:0') {
                    env.AWS_DEFAULT_REGION = "${params.AWS_REGION}"
                    env.AWS_ACCESS_KEY_ID = "${KeyId}"
                    env.AWS_SECRET_ACCESS_KEY = "${AccessKey}"
                    env.AWS_SESSION_TOKEN = "${Token}"
                        sh 'sam --version'
                        sh ("ls -all ")
                   
                        
                        }
                 }
            }
        }

si necesitas seetear variables de entorno en withDockerContainer utilizas env.NAME_VARIBLE.

Buenas practicas

  • Cada proyecto debe tener su Jenkinsfile
  • Que los jobs sean  multibranch  Pipeline
  • utilizar imágenes docker en cada stage.

Happy code .

Recibir parámetros de jenkins con un archivo groovy
Parámetros de jenkins en Pipeline: Groovy

Referencia:

Pipeline
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software