Continuous integration 将系统环境变量传递到Jenkins从机

Continuous integration 将系统环境变量传递到Jenkins从机,continuous-integration,jenkins,environment-variables,slave,Continuous Integration,Jenkins,Environment Variables,Slave,这开始让我发疯了。。但我似乎不太走运,自己想出来了:/ 我需要设置一种机制来在两个从机之间共享字符串值,例如,命名为slavea和slaveB 目前我发现的最接近的问题是这样一个问题: 但它的目标仍然是在buildscripts中启用访问,而不是在Slaves环境变量本身中。(相关问题:) 目前我有以下设置: 1) 在A上,将触发作业A 它执行此windows批处理代码(实际路径显然被替换为“”): cmd/c启动java-jar\slave.jar-jnlpUrl/slave-agent.j

这开始让我发疯了。。但我似乎不太走运,自己想出来了:/

我需要设置一种机制来在两个从机之间共享字符串值,例如,命名为slavea和slaveB

目前我发现的最接近的问题是这样一个问题:

但它的目标仍然是在buildscripts中启用访问,而不是在Slaves环境变量本身中。(相关问题:)

目前我有以下设置:

1) 在A上,将触发作业A

它执行此windows批处理代码(实际路径显然被替换为“”):

cmd/c启动java-jar\slave.jar-jnlpUrl/slave-agent.jnlp
setenv.exe/m HOR_BUILD_ID-删除
setenv.exe/m HOR\u BUILD\u ID%BUILD\u NUMBER%
setenv.exe/m HOR_上游_ID-删除
setenv.exe/m HOR\u上游\u ID%作业\u名称%
非常不言自明,直截了当

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

SetLocal EnableDelayedExpansion
@回音
@echo--正在刷新环境变量。。。
@呼应
设置prgfil=%ProgramFiles(x86)%
调用“%WORKSPACE%\..\tools\misc\resetvars.bat”
@读取环境变量。。。

复制/y“您是否考虑过添加参数化触发器插件

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

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

  • 修复了在Windows 2k8(R2)x64(数据中心)计算机中安装多个从机的可能性
  • 修复了正确解析值的可能性。设置没有更改…但似乎重新输入所有登录就成功了
  • 可能会破坏工具环境设置,因为节点标签和节点名称不再加载到系统信息配置xD中…但谁在乎,只要此设置实际工作(并且在下一次jenkins更新中没有破坏…):D

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

嘿,伙计,我不能理解你写的所有内容。但基本上我能够通过ant脚本传递Jenkins系统变量。对于这样的基本需求,这太过臃肿和java解析马力了。:/I会避免通过Jenkins脚本/作业在从机之间传递数据-这很可能是错误的添加从属或使从属脱机时中断。链接作业(如@zagrev所建议的)是一种更好的方法,然后可以在工件中传递数据或使用插件。我需要的是读取一个系统环境变量(在机器上下文中)在批处理作业B中,java不允许您将系统变量写回操作系统。Jenkins是在java上运行的,因此您可能无法编写操作系统环境变量。听起来您需要在作业之间选择不同的通信方法。如果作业a实际写出操作系统环境变量,则JVM将在作业B。您是否想过使用文件来包含信息,或者可能是队列中的消息?共享内存?您是否有能力更改作业a传递数据的方式?文件-不,我使用它进行一些VM管理,因此我无法使用静态文件位置/存储。请详细说明消息队列。:)Jes,我完全控制Jenkins、 这些详细信息取决于您使用的消息系统。查看原始帖子,它是否应该调用setenv.exe,然后启动从属服务器?此外,您是否可以尝试环境注入插件?
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%
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