Jenkins 从属环境变量刷新

Posted

技术标签:

【中文标题】Jenkins 从属环境变量刷新【英文标题】:Jenkins Slave Environment Variable Refresh 【发布时间】:2012-01-21 08:45:28 【问题描述】:

我有一个具有JAVA_HOME 环境变量的 Jenkins Slave(一台 Windows PC)。我更新了 Slave 上的 Java 版本,所以我也更新了环境变量。

当我通过 Jenkins Web 界面查看这个 Slave 的系统属性时,JAVA_HOME 属性被报告为旧的。

在 Windows PC 上运行 echo %PATH% 会显示正确的值。 在从站的 Jenkins 节点脚本控制台上运行 println System.getenv("PATH") 会显示旧的 JAVA_HOME 值。

我已尝试再次删除和添加 Slave 并重新启动 Jenkins 服务器。仍然没有更新旧值。

有什么想法吗?

【问题讨论】:

【参考方案1】:

无需重启。

管理 Jenkins -> 管理节点和云 单击所需的从站。然后从面板中选择“断开连接”。

Slave 将自动重新连接。如果没有,请点击“启动”。

这将刷新环境变量,包括“PATH”。

【讨论】:

【参考方案2】:

你可以更新你的 Jenkins 版本,它会解决它。否则这对我有用(Jenkins 1.6,构建/测试节点:MacOSX Mojave):

首先使用以下命令在您的构建/测试节点中安装 java 8:

brew update
brew cask install caskroom/versions/java8

然后在 Jenkins web 面板中点击你的构建/测试节点,然后点击 Configure 然后点击 Advanced... 按钮,这将显示多个文本字段。然后在 JavaPath 字段中添加您的 java 8 的路径。

对我来说这条路是这样的:

/Library/Java/JavaVirtualMachines/jdk1.8.X_XXX.jdk/Contents/Home/bin/java

注意:记得将 X_XXX 替换为您之前的 java 8 版本。

然后保存

然后断开构建/测试节点并再次连接。这应该可以解决问题。

Source

【讨论】:

【参考方案3】:

这是 Jenkins 中的一个错误:https://issues.jenkins-ci.org/browse/JENKINS-27739

3种解决方法(我都亲自确认过):

    将 Jenkins 更新到 >=1.617(推荐) 重启 Jenkins master 删除 Jenkins slave,然后重新添加

【讨论】:

感谢您向我们指出错误报告。更新到 >=1.617 解决了这个问题 有没有办法使用 Jenkins Rest/API 在 slave 的配置中添加/更新 ENV 变量? 你不需要完全删除slave!只需重新启动从代理就足够了。 同意@JohnBjareholt,很明显服务器正在缓存slave建立的环境,即使环境是由远程机器上slave的启动脚本加载的(没有更改服务器配置奴隶)。重新启动奴隶并没有为我解决这个问题。有趣的是,服务器重启会重新加载这些环境设置(甚至是从服务器的启动脚本中声明的那些)。【参考方案4】:

重启slave,这解决了我的配置问题。

【讨论】:

【参考方案5】:

Hudson/Jenkins 不使用从属环境变量,因为它支持多个 java 版本,因此您可以在 GUI 中配置 java home 环境变量。

您需要做的是转到 Manage Hudson/Jenkins,然后选择 Manage Nodes。从列表中选择要配置的节点,然后选择配置。在底部有一个节点属性部分。选中工具位置复选框。单击添加,然后在下拉列表中选择您的 JDK 并添加新路径。

【讨论】:

添加到节点的路径而不是从属的环境就可以了,谢谢。 问题仍未得到解答。我需要我的奴隶以某种方式“即时”更新 PATH 变量。 @AlexOkrushko 您是否找到了一种自动更新从属配置的方法,专门用于添加/更新 ENV 变量? @ArunSangal 这是很久以前的事了,但我想我已经做了类似的事情,如下面的答案所述。 @AlexOkrushko - 使用 Jenkins REST/API 是可能的,我取得了一些成功,我将分享我的发现。就我而言,我正在使用 Ansible + Jenkins Swarm Plugin 创建从站(但它不会创建 ENV 变量)。我打算使用第一部分创建从属,然后调用第二个 Jenkins 作业(它将配置新创建的从属以嵌入/添加/更新任何 ENV 变量)。

以上是关于Jenkins 从属环境变量刷新的主要内容,如果未能解决你的问题,请参考以下文章

40-Jenkins-环境变量的使用

Jenkins 自定义环境变量

Jenkins设置环境变量

如何使用Jenkins中的环境变量

Jenkins可用环境变量以及使用方法

jenkins学习17 - 添加环境变量(Environment Injector)