HX_*_*ned 7 continuous-integration environment-variables slave jenkins
这开始让我发疯了......但似乎我不幸自己想出来:/
我需要设置一个机构共享两个从机之间的字符串值,例如,名为从属甲和从乙.
目前我发现的最接近的是这个问题: Jenkins Slave Environment Variable Refresh
但它仍然旨在启用buildcripts中的访问,而不是Slaves环境变量本身.(相关SO问题:如何在Jenkins中使用Windows批处理命令使用环境变量?)
目前我有这个设置:
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%
Run Code Online (Sandbox Code Playgroud)
相当不言自明和直截了当的imho.
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
Run Code Online (Sandbox Code Playgroud)
注意:resetvars.bat和resetvars.vbs取自此SO问题:是否有命令从Windows中的命令提示符刷新环境变量?
输出(%HOR_BUILD_ID%和%HOR_UPSTREAM_ID%值)仍然是过时的...获取新变量的唯一方法是重新启动该darn jenkins(主)服务,但这在CI环境中绝对不行. ..
问题现在浮出水面 - 当B上的构建作业B被触发时如何使这些变量被刷新/重新读取,所以我可以使用例如EnvInject插件从奴隶访问系统变量?
另一个SO问题和答案需要用户交互,因此在我的案例中是不可接受的:Jenkins - 在作业之间传递变量?
这在我的案例中也不起作用:http://comments.gmane.org/gmane.comp.java.hudson.user/37897
也许Slave及其相应的节点没有接收变量/解决其环境,导致无法从全局envirtonemtn变量中检索信息?Cechked它,突然一些有趣的环境变量配置数据cought我的眼睛:
NODE_LABELS | 一个prodreleases
NODE_NAME | 一个
...这是奴隶B,但它应该是不同的值,因为这最初是为奴隶A ...真是太糟糕了????????????????? !!!! :/
我开始觉得根本问题是Jenkins在解析多个从属NODE信息时有错误.
决定创建一个问题@ Jenkins jira:https://issues.jenkins-ci.org/browse/JENKINS-15397
您是否考虑过添加参数化触发器插件?
https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin
这应该允许您将参数从第一个作业传递到第二个作业(例如要删除的作业名称)。
| 归档时间: |
|
| 查看次数: |
8709 次 |
| 最近记录: |