How to reload hudson configuration without restarting?

空扰寡人 提交于 2020-01-09 07:53:06

问题


I have a large task ahead of me...modifying several hudson jobs' configuration. What I would want is to do it from command line. But per my experience, hudson will not re-read the configuration unless you force it to "reload configuration from disk".

I don't want to restart hudson just for a small change...like doing a "reload" in apache. Don't know how to read a java code but I'm guessing that what I am looking for lies in the part after saving configuration changes.


回答1:


Hudson / Jenkins holds it's runtime configuration in memory, and only reloads it at startup or when you "reload configuration from disk".

However, reload configuration from disk is not a restart, just a re-read of the configuration.

That's all your choices, reload or restart.

Hacking it to work differently would be a major task, and if you can't yet read Java code, I wouldn't advise you to write it. Effectively you'd need to fork from the main project too, so updates won't be compatible.

If you need to do all the updates via a script, and then auto-reload the config, use hudson_cli.jar to do it.




回答2:


Here is how to reload a job in Jenkins without restarting or reloading the complete configuration with the use of groovy. You can also easily modify the script and reload some specific or all Jenkins jobs without restarting.

Jenkins allows to run the script over the UI or CLI.

UI: Copy the following script in your Jenkins Script page, for instance 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: You can save the above script in a file and execute it remotely over CLI as a groovy script:

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

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




回答3:


http://[jenkins-server]/reload

Taken from Administering Jenkins.




回答4:


Extending on the idea of Andreas Panagiotidis, there's now a simpler and cleaner way to reload the configuration of a single Item

import jenkins.model.Jenkins;

def job_path = 'folder1/folder2/job_name'

Jenkins j = Jenkins.get()

def job = j.getItemByFullName(job_path)

if (job) {
  job.doReload()
}

Note that the path may simply be 'job_name'.



来源:https://stackoverflow.com/questions/5216552/how-to-reload-hudson-configuration-without-restarting

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!