gpt4 book ai didi

continuous-integration - 将系统环境变量传递给 Jenkins Slave

转载 作者:行者123 更新时间:2023-12-04 08:41:09 25 4
gpt4 key购买 nike

这开始让我发疯..但似乎我自己不走运:/

我需要建立一个机制来在两个从站之间共享字符串值,例如,named slave 一个 和奴隶 .

目前我找到的最接近的一个是这个问题:
Jenkins Slave Environment Variable Refresh

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

目前我有这个设置:

1) 在 一个 作业 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) 上的工作一个 有上游作业 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 问题: Is there a command to refresh environment variables from the command prompt in Windows?

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

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

另一个需要用户交互的 SO 问答,因此在我的情况下是 Not Acceptable : Jenkins - passing variables between jobs?

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

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

NODE_LABELS |预发布

NODE_NAME |一种

...这是奴隶 ,但它应该是不同的值,因为这最初是用于从站 一个 ... 怎么回事!他妈的??????????????????!!!! :/

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

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

最佳答案

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

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

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

关于continuous-integration - 将系统环境变量传递给 Jenkins Slave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com