这开始让我发疯了......但似乎我不幸自己想出来:/
我需要设置一种机制来在两个从属设备之间共享字符串值,例如,名为slave A 和slave B 。
目前我找到的最接近的是这个SO问题: Jenkins Slave Environment Variable Refresh
但它仍然旨在启用buildcripts中的访问,而不是Slaves环境变量本身。 (相关的SO问题: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%
非常明确且直截了当的imho。
2) A 上的作业有上游作业 B ,这是在成功构建时触发的。 因此,在 B 中, B 构建执行此批处理代码(显然,实际路径将替换为'&lt;&gt;'):
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问题:Is there a command to refresh environment variables from the command prompt in Windows?
输出(%HOR_BUILD_ID%和%HOR_UPSTREAM_ID%值)仍然是过时的...获取新变量的唯一方法是重新启动那个darn jenkins(主)服务,但这绝对是不行的CI环境......
问题现在浮出水面 - 当触发 B 上的构建作业 B 时,如何刷新/重新读取这些变量,这样我就可以访问系统变量了来自奴隶w / o使用,例如,EnvInject插件?
另一个SO问题和答案需要用户互动,因此在我的案例中是不可接受的:Jenkins - passing variables between jobs?
这在我的情况下也不起作用:http://comments.gmane.org/gmane.comp.java.hudson.user/37897
也许Slave及其相应的节点没有接收变量/解析其环境,导致无法从全局envirtonemtn变量中检索信息? Cechked出来,突然一些有趣的环境变量配置数据紧紧抓住我的眼睛:
NODE_LABELS |一个prodreleases
NODE_NAME |一个
...这是奴隶 B ,但它应该是不同的值,因为这最初是为奴隶 A ...真是太糟糕了????? ????????????? !!!! :/
我开始觉得根本问题是Jenkins在解析多个奴隶NODE信息时有错误。
决定创建一个问题@ Jenkins jira:https://issues.jenkins-ci.org/browse/JENKINS-15397
答案 0 :(得分:2)
我相信你正在寻找Jenkins参数化构建! 按照here的说明操作,您将立即启动并运行!
答案 1 :(得分:2)
您是否看过添加参数化触发器插件?
https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin
这应该允许您将参数从第一个作业传递到第二个作业(比如要删除的作业名称)。
答案 2 :(得分:0)
似乎这样(https://issues.jenkins-ci.org/browse/JENKINS-6604)修复了以下更改:
作为参考,我创建的jira问题仍然是开放的......