2012-07-26 10 views
8

Estoy escribiendo un par de scripts de shell de Linux que mueven algo de código y sería agradable si estos pudieran ser interactivos.¿Cómo lidia Jenkins con los scripts interactivos de Shell?

El inconveniente es que me gustaría ejecutar algunas de estas secuencias de comandos en Jenkins y no estoy del todo seguro de cómo maneja Jenkins las indicaciones del usuario dentro de la secuencia de comandos. No he podido encontrar mucho sobre esto y no tengo los recursos para seguir adelante y probarlo, por lo que cualquier consejo sería apreciado.

Gracias chicos

+0

Es posible que desee verificar [expect (1)] (http://linux.die.net/man/1/expect). –

+0

Gracias. He estado usando esperar, pero para hacer lo que me gustaría parece haber un par de soluciones alternativas que prefiero evitar – degausser

+0

Este es un problema clásico. Las cosas interactivas son agradables, en un sentido limitado, para las personas que llaman. Pero las cosas por lotes son mucho mejores para la automatización (llamadores de script). Sugiero escribir casi todo para el uso por lotes, a menos que esté trabajando en un procesador de textos o algo así, porque a largo plazo la capacidad de compilación superior de los guiones por lotes termina siendo una gran ganancia. No es solo el hecho de que puede construir scripts por lotes de forma mucho más práctica; también es mucho más fácil hacer pruebas automatizadas con interfaces de lotes, por lo que el código termina siendo más confiable. – user1277476

Respuesta

7

Si un comando que ejecuta Jenkins espera de entrada, se acaba de sentarse allí y esperar a la entrada. El trabajo se bloqueará y tendrás que matarlo manualmente. Una forma de hacer frente a esto es conectar la entrada esperada al comando, p.

echo "input" | command 

o

command < file_with_input 
+0

Gracias por la respuesta rápida. En realidad estoy tratando de hacer algo como 'echo 'Enter Password:"; lea CONTRASEÑA "y pida al usuario que ingrese su contraseña sobre la marcha. Parece que esto es aceptable por lo que dijo anteriormente (?) – degausser

+1

La 'lectura' se bloquearía hasta que matara el trabajo manualmente. Dado que está almacenando el resultado en una variable de entorno, puede establecer esa variable en consecuencia en el trabajo de Jenkins y en la secuencia de comandos solo requiere la entrada del usuario si la variable no está configurada. –

+0

Lo siento, debería haber sido más explícito. El comando real es un 'scp', así que, a menos que lo espere, fuerza un aviso. Usted dice que un mensaje "bloqueará". Me doy cuenta de que detendría el proceso y esperaría la entrada, pero ¿el usuario podría responder a ese mensaje dentro de Jenkins? (un poco de un novato de Jenkins si no puede decirlo) – degausser

-1

puede ejecutar el script de shell interactivo de Jenkins.

Aquí está la documentación para que:

http://www.buildengineers.org:8080/display/Tools/Running+interactive+Shell+Script+in+Jenkins

Usando <<LimitString opción, puede ejecutar el script de shell de línea de comandos.

puede dar las entradas en la sección de ejecución en la configuración de jenkins.

Espero que esto ayude.

+3

Buen ejemplo de por qué las respuestas al enlace son tan malas: su enlace está inactivo – GhostCat

Cuestiones relacionadas