Java Hudson:更新当前正在运行的作业的config.xml,并使正在运行的作业立即知道更新的config.xml

Java Hudson:更新当前正在运行的作业的config.xml,并使正在运行的作业立即知道更新的config.xml,java,hudson,Java,Hudson,我的hudson服务器当前正在运行构建,需要将新的config.xml更新为当前运行的构建。如何做到这一点 其次,发布新的config.xml后,如何使当前运行的构建知道新的config.xml并继续构建 例如,下面的config.xml指定运行 java -cp Test.jar argument1 构建开始并正在运行 将向当前运行的作业发布一个新的config.xml java -cp Test.jar newargument1 如何使Test.jar知道config.xml文件中已更新

我的hudson服务器当前正在运行构建,需要将新的config.xml更新为当前运行的构建。如何做到这一点

其次,发布新的config.xml后,如何使当前运行的构建知道新的config.xml并继续构建

例如,下面的config.xml指定运行

java -cp Test.jar argument1
构建开始并正在运行

将向当前运行的作业发布一个新的config.xml

java -cp Test.jar newargument1
如何使Test.jar知道config.xml文件中已更新的newargument1


从本质上讲,我试图避免使用新的config.xml更新从头开始新的构建。

使用Hudson的功能,您没有机会这样做。您需要取消生成并重新启动它

也就是说,有一个丑陋的解决办法。您需要从文件中读取参数。这样,您可以更改文件。当作业在读取文件时,它将获取最新的参数。不幸的是,每个构建步骤都需要从文件中读取参数,因为无法将数据从一个构建步骤传递到另一个构建步骤。如果您只有一个构建步骤,那么这个解决方案是无用的。所以本质上你需要让你的构建本身意识到这些变化

我看到了这样一种危险:在执行的中途更改某些构建参数时,会得到扭曲(不可再现)的结果。所以我的建议是取消并重新启动


可能还有其他解决您问题的方法。你能解释一下大局吗?为什么要避免重新启动?签出需要那么长时间吗?

假设第一个config.xml文件名为file1,第二个config.xml文件名为file2

<>为什么要在构建的中间将文件1更改为文件2? 或者必须有一个你能够实现的理由(一个条件) 它可以使用powershell或Bash脚本

-或-

没有具体的原因,在这种情况下,您可以将file2添加到file1(不是字面意思),这意味着组合两个xml文件,让构建从头到尾运行

要在另一个xml上发布xml,即在文件1上发布文件2,请将您的xml发布到以下URL:

http://<HUDSON_URL>/job/<JOB_NAME>/config.xml
http:///job//config.xml
但是,在生成运行时,这将无效。只有在作业停止和/或完成运行file1后,才能执行该命令

如果您使用的是curl,请确保使用--data二进制选项将config.xml(file2)发送到hudson服务器