¿Cómo puedo hacer que Jenkins ejecute un script que extrajo de Git?

12

Estoy usando Jenkins para activar y administrar una serie de trabajos de importación. Quiero poner mi script de importación en Github, y cuando Jenkins construya el trabajo, debería (a) extraer ese script controlado por la versión de Github y (b) ejecutar el script.

El problema con el que me estoy encontrando es que no sé cómo hacer referencia al nombre del script que se ejecutará dentro del trabajo. Supongo que el código fuente se extrae en el directorio del espacio de trabajo. ¿Es correcta esa suposición? (¡Si solo hubiera documentación!)

Esto es lo que he hecho hasta ahora:

  1. Instalé Jenkins (obviamente) en mi servidor de Windows (no, no tuve otra opción al respecto)
  2. Creé un repositorio en mi cuenta de github y puse mi código en él
    • Es público en https://github.com/mcholl/SARS-Import/
    • Verás que tengo dos scripts, roottest.py y omniture-video \ test.py. El código está bajo patente de Apple, estoy seguro :)
    • La idea es que me gustaría ejecutar roottest.py
  3. Instalado el complemento de Github
  4. Creó un trabajo de la siguiente manera:
  5. Ejecuta el trabajo manualmente

Sin embargo, lo que aparece es un mensaje de error que indica que el archivo no se puede ubicar. Esto es extraño, porque supongo que el flujo de trabajo sería "extraer una copia local de la fuente al directorio ... (Trabajo) / workspace /, luego ejecutar el comando por lotes en el contexto del directorio del espacio de trabajo.

Aquí está la salida de la consola completa:

Iniciado por el usuario anónimo Compilación en el espacio de trabajo C: \ Archivos de programa (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace [espacio de trabajo] $ cmd / c llamada C: \ Windows \ TEMP \ hudson1966342425043540895.bat

C: \ Archivos de programa (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> python roottest.py python: no se puede abrir el archivo 'roottest.py': [Errno 2] No existe tal archivo o directorio

C: \ Archivos de programa (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> exit 2 Paso de compilación 'Ejecutar comando por lotes de Windows' marcado compilación como falla Finalizado: FALLO

Obviamente esperaba ver los resultados de mi declaración impresa en la consola.

¿Qué me equivoqué? ¿Y por qué mi guión ya no está allí?

Friki afable
fuente
Veamos el código de C: \ Windows \ TEMP \ hudson1966342425043540895.bat ¿estás usando git pull?
Jenkins crea automáticamente y luego lo elimina. Sin embargo, puede ver el contenido completo en la salida de la consola: es el comando "python roottest.py" al que hice referencia anteriormente
Affable Geek
roottest.py no está en tu camino. ¿Ves el archivo en el directorio del espacio de trabajo o también se elimina automáticamente? Cuando ejecute git pull, debe estar en la copia local del repositorio clonado, creo, entonces debería extraer cualquier cambio nuevo en el repositorio local. Es difícil ayudarlo cuando no puedo ver ninguno de los comandos reales que se están ejecutando.
¿Seguiste estas instrucciones para el complemento github wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- ? ¿Estableció la variable de entorno GIT_HOME, etc.?
D'oh! Una razón más para odiar las ventanas. Gracias - Creo que ese puede ser el problema
Affable Geek

Respuestas:

5

Para mi compilación (en un host Linux), hago algo como esto (como un paso de compilación en Jenkins) para ejecutar un script de compilación desde el espacio de trabajo recién revisado:

Ejecutar comando de shell:

 sh -x $WORKSPACE/build/myproject.build

Supongo que funcionaría de manera similar en Windows, excepto que, por supuesto, usaría \ en lugar de / y está usando python en lugar de sh para ejecutar su script.

eric.green
fuente
2

Puede escribir dos líneas en su compilación:

chmod 777 ./my_script.sh
./my_script.sh
Andrs Zam
fuente
1
¡Los permisos de escritura mundiales pueden no ser la mejor idea! ¿Por qué no 755 (propietario de escritura, todos los demás lectura / ejecución.
kmarsh
De hecho, 777 no es la mejor idea, pero esta respuesta realmente me ayudó.
Robin Dijkhof
0

Puede almacenar algún script en Git, por ejemplo, test.sh:

#!/bin/bash
_test_func(){ 
 echo 'test'
}

Luego, en la entrada "Ejecutar shell", coloque la importación de ese script y llame a "_test_func":

source test.sh
_test_func

Resultado:

 + source test.sh
 + _test_func
 test
Raf
fuente