我在詹金斯有这个Execute Windows Batch Command
,我想读它的返回值
type foo.txt | find /C "%param%" > temp.txt
set /p result=<temp.txt
del temp.txt
我想将result
值返回给Jenkins参数。我怎么能这样做?
修改
我在Jenkins中有一个名为RESULT_PARAM的字符串参数
运行上面的代码或任何其他代码后,没关系,我想读取结果将其放入RESULT_PARAM
答案 0 :(得分:1)
当您生成进程时,它会从父进程继承环境变量的副本。当您遇到环境变量时,它只会影响生成的进程,它不会传播回父级(或其他子级)。即使您将变量显式设置为全局变量,也只有在重新启动过程后才会生效。
为了“清洁环境”的利益,Jenkins为每个构建产生了一个子进程。这样,当构建完成时,子进程将被丢弃,并且您的OS环境不会受到污染。
- ENVIRONMENT (global variables) | ------ Jenkins process (copy of ENVIRONMENT variables) | | | ----- Build 1 (copy of Jenkins process variables) | | | | | ------ %RESULT% variable changed | | | ----- Build 2 (copy of Jenkins process variables) | ------ Other process (copy of ENVIRONMENT variables)
如果Build 1
更改了任何环境变量,则不会影响Build 2
或正在运行的其他操作系统进程。
即使您使用SETX
命令强制将变量传播回全局环境,您的Jenkins进程也不会将其提取,除非重新启动,并且Jenkins子进程也不会构建进程,因为它们会获得副本詹金斯进程。
使用 EnvInject plugin 。
在作业结束时,将所需的变量写入属性文件
echo result=%result% > myvars.props
该文件应逐行列出变量的键值对及其值。
在下一个版本中,您可以使用EnvInject插件读取属性文件,并将这些变量注入到生成的进程中。从那时起,您可以将%result%
用作任何其他全局环境变量。