小编典典

将系统Env变量传递给Jenkins从站

jenkins

这开始让我发疯..但是似乎我很没办法亲自找出来:/

我需要设置一个机制,以共享字符串值两个从机,例如,名为从属 和从

但是它仍然旨在使能够在buildscript中进行访问,而不是在Slaves环境变量本身中进行访问。(相关的SO问题:在Windows批处理命令的Jenkins中如何使用环境变量?

目前,我有此设置:

1)在 一个 工作 一个 被触发。

它执行以下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%值)仍然过时了……刷新新变量的唯一方法是重新启动该织补詹金斯(主)服务,但这在CI环境中肯定是行不通的。
..

现在的问题表面-如何让被刷新这些变量/重读的构建工作时, 被触发,这样我就可以从从W /
O使用访问系统变量,例如,EnvInject插件?


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


就我而言,这也不起作用:http
:
//comments.gmane.org/gmane.comp.java.hudson.user/37897


从站及其核心响应节点可能无法正确接收变量/无法正确解析其环境,从而导致无法从全局环境变量中检索信息?抓住它,突然一些有趣的 环境变量
配置数据引起了我的注意:

NODE_LABELS | 产品发布

NODE_NAME | 一个

…这是用于从站 B的 ,但是它应该是不同的值,因为这最初是用于从站 A的 。:/

我开始感觉到根本问题是詹金斯在解决多个从属节点信息时出现错误。

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


阅读 373

收藏
2020-07-25

共1个答案

小编典典

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

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

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

2020-07-25