Los pipelines dinámicos en Jenkins usando Groovy suelen ser muy útiles para hacer implementaciones complejas, pero realmente todo empieza en con los parametros asi que unos buenos parametros pueden hacer tu implementación más sencilla, a continuación te mostraré algunos de los que más uso.
Como importar una librerÃa dinámica en tu pipeline
En una ocasión, tuve que crear un repositorio personal para desarrollar librerÃas de Groovy, ya que no tenÃa acceso ni a la configuración de Jenkins ni al repositorio que contenÃa las librerÃas originales. Por eso, utilicé este script.
1library identifier: 'jenkins_poc@master', retriever: modernSCM(2 [$class: 'GitSCMSource,'3 remote: 'https://github.com/${user}/jenkins_poc.git'4 credentialsId: ${credentialsId}5 ]6)
Una vez que hemos resuelto el tema de la librerÃa, es hora de ponerla en acción en tu pipeline. Puedes invocar sus funciones de manera sencilla y práctica. Esto te permitirá aprovechar al máximo las capacidades de la librerÃa para optimizar tus procesos.
1properties([2 parameters([3 choice (4 name: 'name',5 choices: [testName("Dynamic parameter")],6 description: 'name'7 ),8 ])9])
En este caso la función es muy simple.
1# vars/testName.groovy2def call(String name) {3 return name4}
Y asi se veria nuestro nuevo parametro dinámico
Listar las ramas de un repositorio en github
Si requieres que las ramas de un proyecto vengan directamente del repositorio de github puedes integrar este código.
1import com.cloudbees.plugins.credentials.CredentialsProvider; 2importcom.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials; 3import jenkins.model.Jenkins; 4 5def credentials = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( 6 com.cloudbees.plugins.credentials.Credentials.class, 7 Jenkins.instance, 8 null, 9 null10);11def user = credentials.findResult { it.id == credentials_id ? it : null }12try{13 def gettags = ("git ls-remote -t -h https://${user.username}:${user.password}@github.com/${user}/${project}.git").execute()14 def branchesNoDefault = gettags.text.readLines().collect {15 it.split()[1].replaceAll('refs/heads/', '').replaceAll('refs/tags/', '').replaceAll("\\\\^\\\\{\\\\}", '')16 }17 branches = branchesNoDefault.collect {18 if (it == defaultBranch){ 19 return "${defaultBranch}:selected"20 }else { 21 return it 22 }23 }24 return branches25} catch(all) {26 return [all.getMessage()]27}
Usar el último build number exitoso de otro pipeline
Si tus builds de Docker estan en un pipeline diferente puedes usar el parametro ‘RunParameterDefinition’ y agregarlo a tu pipeline con este código.
1properties([ 2 parameters([ 3 choice ( 4 name: 'name', 5 choices: [testName("Dynamic parameter")], 6 description: 'name' 7 ), 8 [ 9 $class: 'RunParameterDefinition',10 filter: 'SUCCESSFUL', 11 name: 'RELEASE_BUILD',12 projectName: build_job13 ]14 ])15])
Asà se veria nuestro pipeline
Logica y dependencias de otros parametros
Tambien podemos agregar logica que dependa de lo que sea seleccionado en otros parametros, por ejemplo si necesitas identificar que env es el que fue seleccionado y basado en ello tener cierto comportamiento.
Primero debemos agregar el parametro para seleccionar el environment.
1properties([ 2 parameters([ 3 choice ( 4 name: 'name', 5 choices: [testName("Dynamic parameter")], 6 description: 'name' 7 ), 8 [ 9 $class: 'RunParameterDefinition',10 filter: 'SUCCESSFUL', 11 name: 'RELEASE_BUILD',12 projectName: build_job13 ],14 [15 $class: 'CascadeChoiceParameter',16 choiceType: 'PT_SINGLE_SELECT',17 description: 'Select the environment from the dropdown list',18 filterLength: 1,19 filterable: false,20 name: 'environment',21 script: [22 $class: 'GroovyScript',23 fallbackScript: [24 classpath: [],25 sandbox: false,26 script: 27 "return['Cloud not get the envs']"28 ],29 script: [30 classpath: [],31 sandbox: false,32 script:33 '''return["dev", "stag", "prod"]'''34 ]35 ]36 ],37 ])38])
En resumen, los pipelines dinámicos en Jenkins con Groovy son una herramienta poderosa que puede revolucionar tus implementaciones. Al comprender la importancia de los parámetros y cómo pueden influir en la eficiencia de tus pipelines, estás en camino de lograr implementaciones más sencillas y efectivas.
Comentarios