Jenkins from command line

Jenkins from the command line

el que tiene las de ganar es el proyecto de Netflix.

esta hecho en perl, y tiene un ejecutable estatico. Este ejecutable estatico lo he renombrado a jenkins-cli, y lo he situado en /usr/local/bin/

tambien es necesario un fichero ~/.jenkins como:

#baseuri: http://localhost
baseuri: http://<hostname>/jenkins
#jobs:
# - <default jobs>
stoplight: 1

algunos comandos:

  • para ver todos los trabajos existentes:
./jenkins-cli ls --all --baseuri=http://localhost
  • para ver el “console output” de todas las tareas:
./jenkins-cli tail --all --baseuri=http://localhost
  • ver lista de tareas pendientes:
./jenkins-cli q --all --baseuri=http://localhost
  • ver la lista de tareas ya hechas:
./jenkins-cli history --all --baseuri=http://localhost
  • obtener el fichero XML de definicion de un job:
./jenkins-cli conf test01 --baseuri=http://localhost
  • crear un nuevo job, a partir de un fichero de configuracion test01.xml
./jenkins-cli create test02 test01.xml --baseuri=http://localhost
  • lanzar un job:
./jenkins-cli start test02  --baseuri=http://localhost
  • hacer login:
./jenkins-cli login --password

para que funcione el login sobre la version de Jenkins que tenemos en produccion ( 2.7.3 ), hay que aplicar este patch:

11:59 $ diff jenkins-static ../../jenkins-cli/jenkins-static 
597c597
< if ( $res->decoded_content =~ />log in</ ) {
---
> if (index($res->decoded_content, "log in") == -1) {

y listo!

para hacer busquedas con cadenas,

jenkins-cli ls --all reports

muestra todos los jobs que contienen la cadena “reports”. Si solo tenemos un resultado, podemos ver el historico de builds con

jenkins-cli hist --all reports

el problema se plantea si queremos hacer un build con parametros…

jenkins-cli start test01 --param param01=12 --param param02='casa de'

 

cada pareja de parametro y valor se incluye en un –param, y listo!

ahora lo siguiente seria ver la lista de parametros de cada job, y preparar scripts locales para lanzar cada uno de ellos….

…aunque bien pensado, casi seria mas razonable lanzar los Ansibles directamente, pero entonces no habria en mismo nivel de traza uniforme…

solo faltaria tener un “build history” para que la herramienta fuera perfecta.