我面前有一项大任务......修改几个哈德森工作的配置。我想要的是从命令行执行它。但根据我的经验,除非你强制它“从磁盘重新加载配置”,否则hudson不会重新读取配置。
我不想重新启动hudson只是为了一个小小的改变...就像在apache中进行“重新加载”一样。不知道如何阅读java代码,但我猜测我保存的内容位于保存配置更改后的部分中。
答案 0 :(得分:16)
以下是如何在Jenkins中重新加载作业,而无需使用groovy重新启动或重新加载完整配置。您还可以轻松修改脚本并重新加载某些特定或所有Jenkins作业,而无需重新启动。
Jenkins允许通过UI或CLI运行脚本。
用户界面:在Jenkins脚本页面中复制以下脚本,例如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 :您可以将上述脚本保存在文件中,并通过CLI远程执行它作为groovy脚本:
java -jar jenkins-cli.jar -s http://www.mydomain.com/jenkins groovy reload-job.groovy
参考文献:
https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI(CLI)
http://javadoc.jenkins-ci.org/hudson(API)
答案 1 :(得分:8)
http://[jenkins-server]/reload
答案 2 :(得分:7)
Hudson / Jenkins在内存中保存它的运行时配置,只在启动时或“从磁盘重新加载配置”时重新加载它。
但是,从磁盘重新加载配置不是重新启动,只是重新读取配置。
这是你的所有选择,重新加载或重启。
将其隐藏为不同的工作将是一项重大任务,如果您还不能读取 Java代码,我建议您不要编写它。实际上你也需要从主项目中分叉,因此更新将不兼容。
如果您需要通过脚本执行所有更新,然后自动重新加载配置,请使用hudson_cli.jar
执行此操作。
答案 3 :(得分:0)
扩展了Andreas Panagiotidis的概念,现在有了更简单,更简洁的方式来重新加载单个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()
}
请注意,路径可能只是'job_name'
。