7

这开始让我发疯了..但似乎我自己搞砸了:/

我需要建立一种机制来在两个从机之间共享字符串值,例如,名为 slave A和 slave B

目前我发现的最接近的是这个 SO Question: Jenkins Slave Environment Variable Refresh

但它的目标仍然是在 buildscripts 中启用访问,而不是在 Slaves 环境变量本身中。(相关的 SO Question: How are environment variables used in Jenkins with Windows Batch Command?

目前我有这个设置:

1) 在A上,作业A被触发。

它执行这个 windows 批处理代码(实际路径显然被替换为 '<>'):

cmd /c start java -jar <path_of_slave>\slave.jar -jnlpUrl  <url_of_slave>/slave-agent.jnlp

setenv.exe /m HOR_BUILD_ID -delete
setenv.exe /m HOR_BUILD_ID %BUILD_NUMBER%
setenv.exe /m HOR_UPSTREAM_ID -delete
setenv.exe /m HOR_UPSTREAM_ID %JOB_NAME%

非常不言自明和直截了当的恕我直言。

2) A上的作业有上游作业B,在成功构建时触发。因此,在从B构建中,B构建执行此批处理代码(实际路径显然被替换为 '<>'):

SetLocal EnableDelayedExpansion

@echo off
@echo --- Refreshing Environemnt variables... 
@echo on
set prgfil=%ProgramFiles(x86)%
call "%WORKSPACE%\..\..\..\tools\misc\resetvars.bat"
@echo --- Reading environment variables... 
copy /y "<path_containing_%HOR_UPSTREAM_ID%_variable" "<path_containing_%HOR_BUILD_ID%_variable"
if !errorlevel!==0 goto ok1
goto error
:ok1

goto end

:error
EndLocal
exit /b 1

:end
EndLocal

注意:resetvars.bat 和 resetvars.vbs 取自此 SO 问题:是否有从 Windows 的命令提示符刷新环境变量的命令?


输出(%HOR_BUILD_ID% 和 %HOR_UPSTREAM_ID% 值)仍然过时......刷新新变量的唯一方法是重新启动该死的 jenkins(主)服务,但这在 CI 环境中绝对不行。 ..

现在问题浮出水面 - 如何在B上的构建作业B被触发时刷新/重新读取这些变量,以便我可以使用例如 EnvInject 插件从不使用从属设备访问系统变量?


另一个需要用户交互的问题和答案,因此在我的情况下是不可接受的:Jenkins - 在工作之间传递变量?


这在我的情况下也不起作用:http: //comments.gmane.org/gmane.comp.java.hudson.user/37897


也许从站及其对应的节点没有收到变量/正确解析其环境,导致无法从全局环境变量中检索信息?查了一下,突然一些有趣的环境变量配置数据让我眼前一亮:

NODE_LABELS | 产品发布

NODE_NAME | 一种

...这是给奴隶B的,但它应该是不同的值,因为这最初是给奴隶A 的...什么鬼???????????????!!!!!!!!!:/

我开始觉得根本问题是 Jenkins 在解析多个从节点信息时存在错误。

决定创建一个问题@Jenkins jira:https ://issues.jenkins-ci.org/browse/JENKINS-15397

4

2 回答 2

2

您是否考虑过添加参数化触发器插件?

https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin

这应该允许您将参数从第一个作业传递到第二个作业(例如要删除的作业名称)。

于 2012-10-16T00:15:09.887 回答
0

看起来像这样(https://issues.jenkins-ci.org/browse/JENKINS-6604)修复进行了以下更改:

  • 修复了在 Windows 2k8 (R2) x64 (Datacenter) 机器中无法安装多个从站的问题;
  • 修复了无法正确解析值的问题。设置没有改变......但似乎重新输入所有登录名就可以了。
  • 可能破坏了 Tool Environemnt 设置,因为 NODE_LABELS 和 NODE_NAME 不再加载到系统信息配置中 xD ...但是只要此设置实际有效(并且在下一次 jenkins 更新中没有损坏...),谁在乎

作为参考,我创建的 jira 问题仍然是开放的......

于 2012-12-17T17:50:18.350 回答