如何在不重新启动的情况下重新加载hudson配置?

ica*_*pan 14 hudson

我面前有一项大任务......修改几个哈德森工作的配置.我想要的是从命令行执行它.但根据我的经验,除非你强制它"从磁盘重新加载配置",否则hudson不会重新读取配置.

我不想重新启动hudson只是为了一个小小的改变...就像在apache中进行"重新加载"一样.不知道如何阅读java代码,但我猜测我保存的内容位于保存配置更改后的部分中.

And*_*dis 16

以下是如何在不使用groovy重新启动或重新加载完整配置的情况下重新加载Jenkins中的作业.您还可以轻松修改脚本并重新加载某些特定或所有Jenkins作业,而无需重新启动.

Jenkins允许通过UI或CLI运行脚本.

UI:在Jenkins Script页面中复制以下脚本,例如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();         
    }      
} 
Run Code Online (Sandbox Code Playgroud)

CLI:您可以将上述脚本保存在文件中,并通过CLI远程执行它作为groovy脚本:

 java -jar jenkins-cli.jar -s http://www.mydomain.com/jenkins groovy reload-job.groovy
Run Code Online (Sandbox Code Playgroud)

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


小智 10

http://[jenkins-server]/reload
Run Code Online (Sandbox Code Playgroud)

取自管理詹金斯.

  • [等效groovy](https://github.com/jenkinsci/jenkins/blob/c63abe3e8cfcb71d27458bebe7752d54edaa2d49/core/src/main/java/jenkins/model/Jenkins.java#L3952-L3974)是`Jenkins.instance.reload() ` (5认同)
  • [javadoc](http://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html#reload()) 似乎表明`Jenkins.instance.doReload()` 更好 (2认同)

oco*_*odo 8

Hudson/Jenkins在内存中保存了它的运行时配置,只在启动时或"从磁盘重新加载配置"时重新加载它.

但是,从磁盘重新加载配置不是重新启动,只是重新读取配置.

这是你的所有选择,重新加载或重新启动.

将其分解为不同的工作将是一项重大任务,如果您还不能阅读 Java代码,我建议您不要编写它.实际上你也需要从主项目中分叉,因此更新将不兼容.

如果您需要通过脚本执行所有更新,然后自动重新加载配置,请使用hudson_cli.jar它.


Wak*_*ked 8

延续Andreas Panagiotidis的想法,现在有一种更简单、更干净的方法来重新加载单个配置,Item只需调用doReload()该项目:

import jenkins.model.Jenkins;

Jenkins j = Jenkins.get()

def job_path = 'folder1/folder2/job_name'
def job = j.getItemByFullName(job_path)

job?.doReload()
Run Code Online (Sandbox Code Playgroud)

请注意,路径可能只是'job_name'.