Как перезагрузить конфигурацию hudson без перезагрузки?
У меня впереди большая задача... изменение конфигурации хадсонских заданий. Я хотел бы сделать это из командной строки. Но по моему опыту, hudson не будет перечитывать конфигурацию, если вы не заставите ее "перезагрузить конфигурацию с диска".
Я не хочу перезапускать hudson только для небольшого изменения... например, делать "перезагрузку" в apache. Не знаю, как читать Java-код, но я предполагаю, что то, что я ищу, лежит в части после сохранения изменений конфигурации.
Ответы
Ответ 1
Хадсон/Дженкинс сохраняет конфигурацию времени выполнения в памяти и перезагружает ее при запуске или когда вы "перезагружаете конфигурацию с диска".
Однако перезагрузить конфигурацию с диска не является перезагрузкой, просто перечитайте конфигурацию.
Это все ваши варианты, перезагрузка или перезагрузка.
Взлом на работу по-разному будет главной задачей, и если вы еще не можете прочитать код Java, я бы не советовал вам писать его. Эффективно вам также нужно будет работать с основным проектом, поэтому обновления не будут совместимы.
Если вам нужно сделать все обновления с помощью script, а затем автоматически перезагрузить конфигурацию, используйте hudson_cli.jar
для сделайте это.
Ответ 2
Вот как перезагрузить задание в Jenkins без перезагрузки или перезагрузки полной конфигурации с помощью groovy. Вы также можете легко изменить script и перезагрузить некоторые конкретные или все задания Jenkins без перезагрузки.
Jenkins позволяет запускать script через пользовательский интерфейс или CLI.
UI: скопируйте следующий script на страницу 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();
}
}
CLI. Вы можете сохранить вышеуказанный script в файле и выполнить его удаленно через CLI как groovy script:
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)
Ответ 3
http://[jenkins-server]/reload
Взято из Администрирование Дженкинса.
Ответ 4
Продолжая идею Андреаса Панайотидиса, теперь существует более простой и понятный способ перезагрузить конфигурацию одного 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'
.