2011-03-07 11 views
12

Tengo una gran tarea por delante ... la modificación de la configuración de varios trabajos hudson. Lo que me gustaría es hacerlo desde la línea de comando. Pero según mi experiencia, Hudson no volverá a leer la configuración a menos que la obligue a "volver a cargar la configuración desde el disco".¿Alguien sabe cómo volver a cargar la configuración de Hudson sin reiniciar?

No quiero reiniciar hudson solo por un pequeño cambio ... como hacer una "recarga" en apache. No sé cómo leer un código de Java, pero supongo que lo que estoy buscando yace en la parte después de guardar los cambios de configuración.

Gracias de antemano, Ismael

Respuesta

7

Hudson/Jenkins sostiene que es configuración de ejecución en la memoria, y sólo vuelve a cargar que en el arranque o cuando se "recarga de configuración desde el disco".

Sin embargo, la configuración de recarga del disco no es un reinicio, solo una relectura de la configuración.

Esas son todas sus opciones, vuelva a cargar o reinicie.

Hackearlo para trabajar de manera diferente sería una tarea importante, y si aún no puede leer código de Java, no le aconsejaría que lo escriba. Efectivamente, también necesitarás desviarse del proyecto principal, por lo que las actualizaciones no serán compatibles.

Si necesita hacer todas las actualizaciones a través de un script, y luego volver a cargar automáticamente la configuración, use hudson_cli.jar para hacerlo.

+1

Muchas gracias por la entrada @Slomojo. Lo que estoy pensando en cambio es crear un pequeño shell o script de perl que cambiaría varias configuraciones para mí en lugar de hacer la aburrida tarea de hacer clic en cada configuración de la interfaz web. Luego, podría llamar al Recargue la configuración desde el disco "a través del comando' curl http: //my_hudson_address_here/hudson/reload'... Sé que hay un hudson-cli.jar pero parece que no puedo ejecutarlo por mi lado, así que este pequeño "seguro hack "mío lo haría. – icasimpan

+1

Oh, realmente me estaría preguntando por qué hudson_cli no funciona ... este es un caso de uso perfecto para él.- Modificar la base del código porque no se puede encontrar la manera de configurar una herramienta como hudson_cli debería activar las alarmas para usted. Publique otra pregunta si no puede ejecutar hudson_cli, y publique un enlace aquí, estoy seguro de que SO puede hacerlo funcionar colectivamente. – ocodo

13

Aquí está cómo recargar un trabajo en Jenkins sin reiniciar o volver a cargar la configuración completa con el uso de groovy. También puede modificar fácilmente el script y volver a cargar algunos trabajos específicos o todos los de Jenkins sin reiniciar.

Jenkins permite ejecutar el script a través de la interfaz de usuario o CLI.

IU: Copia el siguiente script en su página de Jenkins de secuencias de comandos, por ejemplo http://www.mydomain.com/jenkins/script

import java.io.InputStream; 
import java.io.FileInputStream 
import java.io.File; 
import javax.xml.transform.stream.StreamSource 

def hudson = hudson.model.Hudson.instance; 

//to get a single job 
//def job = hudson.model.Hudson.instance.getItem('my-job'); 

for(job in hudson.model.Hudson.instance.items) { 

    if (job.name == "my-job") { 

     def configXMLFile = job.getConfigFile(); 
     def file = configXMLFile.getFile(); 

     InputStream is = new FileInputStream(file); 

     job.updateByXml(new StreamSource(is)); 
     job.save();   
    }  
} 

CLI: Puede guardar la secuencia de comandos en un archivo y ejecutarlo de forma remota a través de CLI como un maravilloso de script:

java -jar jenkins-cli.jar -s http://www.mydomain.com/jenkins groovy reload-job.groovy 

Referencias:
https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI (CLI) http://javadoc.jenkins-ci.org/hudson (API)

+0

Mientras estuvo en la CLI, ¿podría simplemente usar el comando 'update-job' con el xml? (¿Cuál podría obtener usando get-job o simplemente el api xml? – inger

+0

El comando update-job no recarga el trabajo desde cero, por lo que a veces no resuelve los problemas abiertos –

5
http://[jenkins-server]/reload 

Tomado de Administering Jenkins.

+4

[Equivalent groovy] (https: // github. com/jenkinsci/jenkins/blob/c63abe3e8cfcb71d27458bebe7752d54edaa2d49/core/src/main/java/jenkins/model/Jenkins.java # L3952-L3974) es 'Jenkins.instance.reload()' – phs

+1

The [javadoc] (http: // javadoc.jenkins-ci.org/jenkins/model/Jenkins.html#reload()) parece sugerir que 'Jenkins.instance.doReload()' es mejor – jjc

Cuestiones relacionadas