【问题标题】:Hudson: updating config.xml for currently running job, and make running job immediately aware of updated config.xmlHudson:为当前正在运行的作业更新 config.xml,并使正在运行的作业立即知道更新的 config.xml
【发布时间】:2010-12-29 02:07:01
【问题描述】:

我的 hudson 服务器当前正在运行构建,并且需要将新的 config.xml 更新为当前运行的构建。如何实现?

其次,一旦 POST 新的 config.xml,如何让当前运行的构建知道新的 config.xml 并继续构建?

比如下面的config.xml指定运行

java -cp Test.jar argument1

构建开始并正在运行。

一个新的 config.xml 被 POST 到当前运行的作业中。

java -cp Test.jar newargument1

如何让 Test.jar 知道 config.xml 文件中已更新的 newargument1?

基本上,我试图避免必须使用新的 config.xml 更新从头开始重新构建。

【问题讨论】:

    标签: java hudson


    【解决方案1】:

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

    为什么要在构建过程中将 file1 更改为 file2? 要么必须有一个你可以实施的理由(因此是一个条件) 它使用 powershell 或 Bash 脚本

    -或-

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

    为了在另一个 xml 之上发布一个 xml,即 file2 在 file1 之上,然后将您的 xml 发布到以下 URL:

    http://<HUDSON_URL>/job/<JOB_NAME>/config.xml
    

    但是,这在构建运行时不会生效。它仅在作业停止和/或完成运行 file1 后执行。

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

    【讨论】:

      【解决方案2】:

      您没有机会使用 Hudson 的功能来做到这一点。您需要取消构建并重新启动它。

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

      我在这里看到了危险,即在执行过程中更改某些构建参数时,您会得到错误的(不可重现的)结果。所以我的建议是取消并重新开始。

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

      【讨论】:

        猜你喜欢
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 2016-02-28
        相关资源
        最近更新 更多