【问题标题】:How can I configure a Hudson job to use a specific JDK?如何配置 Hudson 作业以使用特定的 JDK?
【发布时间】:2010-10-19 08:56:26
【问题描述】:

我有许多项目在 Hudson 从站上运行。我希望其中一个在 Java6 下运行 Ant,而不是默认的(在我的环境中是 Java5)。

在项目配置视图中,我希望找到:

  • 一个显式选项允许我设置自定义 JDK 位置以用于此项目。
  • 一种为此项目设置自定义环境变量的方法,这将允许我设置 JAVA_HOME 到 JDK6 位置。这将使 Ant 能够根据需要在 Java6 上运行。

有没有办法做到以上任何一个?如果这些设施之一可用,我看不到如何访问它。我在 Hudson 1.285 上运行。

如果可能,我宁愿避免使用“执行 shell”操作而不是“调用 Ant”操作:我的从属设备在 z/OS 上,Hudson 似乎没有在这个平台上正确创建临时 shell 脚本(可能编码问题)。

【问题讨论】:

  • 可能想把这个扔到 Hudson 用户邮件列表中:hudson.dev.java.net/mailing-lists.html 配置从站可能没有很好的文档记录/在这里被广泛理解
  • 谢谢,我已经这样做了:is.gd/szcr。同时,我的hacky解决方法是修改slave上的主Ant脚本($ANT_HOME/bin/ant)以检查JOB_NAME env var并相应地设置JAVA_HOME(JOB_NAME env var由Hudson自动设置)。

标签: hudson java


【解决方案1】:

一种为此项目设置自定义环境变量的方法,这将允许我将 JAVA_HOME 设置为 JDK6 位置。这将使 Ant 能够根据需要在 Java6 上运行。

在为 Ant 配置构建步骤时,在“Invoke Ant”下,如果单击“高级”,则可以设置自定义 Java 选项。屏幕上的帮助说:

如果您的构建需要自定义 ANT_OPTS,请在此处指定。通常,这可用于指定要使用的 java 内存限制,例如 -Xmx512m。请注意,其他 Ant 选项(例如 -lib)应转到“Ant 目标”字段。

但是,我觉得这不适用于 JDK。

您是否在Manage Hudson / Configure System 下为此 Hudson 实例配置了多个 JDK 安装?

【讨论】:

  • 你的感觉是对的:ANT_OPTS如果为自定义JVM选项传递给JDK,并不影响使用哪个JDK。但是,我不知道允许安装多个 JDK 的配置系统视图。不知道这对奴隶有什么作用,但我会看看 - 谢谢!
  • 仔细查看后,似乎 Manage Hudson -> Configuration System 下的 JDK 仅适用于 master 上的 JDK,而不适用于 slave。我错过了什么 - 有没有办法在从属设备上设置多个 JDK? Hudson 1.285 的“配置节点”视图中没有 JDK 选项。
【解决方案2】:

我们配置了 Java 5 和 Java 6 以在我们的 Hudson 实例中使用。

在 Manage Hudson -> Configuration System 下,您可以添加多个 JDK 并指定 JAVA_HOME 的路径。然后在每个作业的配置中选择您希望该作业在哪个 JDK 上运行。

【讨论】:

  • 查看上一个答案的第二条评论 - 似乎这个选项允许在主服务器上使用多个 JDK,但在从服务器/节点上不允许使用。
  • 错过了它是一个奴隶。我只使用过 Hudson 作为大师,因此无法提供任何见解。
  • 此外,您无法选择在 Hudson 中将哪个 JDK 用于 ANT 任务。
  • 这是正确答案,但比之前的错误答案得分少。这是一个涉及此主题的线程:groups.google.com/d/msg/jenkinsci-users/p7mUidJfNYQ/… 注意如果您只配置了 1 个 JDK,则作业配置中的 JDK 选择不可用。在这种情况下,由于当前的 Jenkins 问题,可能会使用错误的 JDK(默认 JDK)。
【解决方案3】:

你可以这样使用。

在批处理命令窗口中,您最初可以设置变量名称 JAVA_HOME,将此自定义变量名称分配给 PATH 变量。然后你可以调用一个ant脚本来选择特定的文件。

例子:

设置 JAVA_HOME=C:/java/jdk1.6.1

PATH=%JAVA_HOME%/bin;%PATH%

ant build.xml

【讨论】:

  • 问题指出“我宁愿避免使用“执行 shell”操作,这就是您在这里的建议。
【解决方案4】:

事实证明,如果您将构建参数化,您添加的任何字符串参数都会成为环境变量。使用这种方法,可以为构建设置任何环境变量,包括由 Ant 拾取的 JAVA_HOME。

所以对我来说最好的解决方案是:

  1. 在作业配置页面中勾选“此构建已参数化”
  2. 添加一个名为 JAVA_HOME 的新字符串参数,并将默认值设置为 JDK 位置

构建字符串参数变成环境变量并不明显,但是一旦你知道它们会变成环境变量,这样设置 JDK 就很容易了。

Hudson 邮件列表recommended another approach 上的开发人员使用主 JDK 配置并在节点配置中覆盖...但仅设置 JAVA_HOME 环境变量对我来说似乎更容易。

【讨论】:

  • 这个答案似乎是错误的。请参阅下面的下一个答案以获得正确答案。
  • 如果您在这里只是想为一些 Hudson 构建配置不同的 JDK,请参阅 Mark 的另一个答案。但是,对于 rewbs 提出的问题,配置不同的 JDK 以在从属设备上构建,这是正确的答案。
【解决方案5】:

看看 Setenv 插件。在那里你可以设置变量,如 JAVA_HOME=C:/java/jdk1.6.1 PATH=%JAVA_HOME%/bin;%PATH%

【讨论】:

    【解决方案6】:

    我们通过使用两个不同的 Java Hudson 节点来解决这个问题。一个用于 Java 6,一个用于 Java 7。然后我们根据需要将作业分配给不同的节点。

    【讨论】:

      【解决方案7】:

      可以将各个从代理配置为在您运行它们的系统上使用特定的 JDK。

      管理节点 > 从站 > 配置 > 环境变量

      例如

      名称:JAVA_HOME 值:C:\Program Files (x86)\Java\jdk1.6.0_45\

      【讨论】:

        【解决方案8】:

        最好的办法是,

        1. 将所有必需的 JDK 安装到您的系统中。
        2. 在配置页面的 JDK 标题下将这些添加到 jenkins。
        3. 将 Maven Info 插件安装到 jenkins
        4. 重启詹金斯
        5. 转到您的作业配置页面。
        6. 从出现在 Maven 信息插件配置下的 JDK 组合框中选择所需的 JDK
        7. 构建它
        8. 享受!!!

        【讨论】:

          【解决方案9】:

          我遇到了一个问题,安装的 JDK 是 JDK 8 而我希望 Jenkins 使用 JDK 7 。所以,在 Jenkins 构建盒上安装 JDK 7 后,

          我在 jenkins 配置中添加了 JDK 路径:

          Jenkins -> 管理 Jenkins -> 配置系统 -> JDK -> 添加 JDK 名称和路径

          还有, 编辑 jenkins-runner.sh: 添加行:

          导出 JAVA_HOME=""

          将最后两行改为:

          echo "/bin/java" $javaArgs -jar "$war" $args

          exec "/bin/java" $javaArgs -jar "$war" $args

          【讨论】:

            猜你喜欢
            • 2013-11-24
            • 1970-01-01
            • 2011-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-19
            相关资源
            最近更新 更多