【发布时间】:2016-07-17 16:10:56
【问题描述】:
我正在使用EnvInject Jenkins 插件在我们的部署管道的构建步骤中设置环境变量。下一个项目(根据顺序)是手动部署的步骤。我需要访问在构建步骤中设置的环境变量。
根据控制台输出,我做得很好:
[EnvInject] - Executing scripts and injecting environment variables after the SCM step.
[EnvInject] - Injecting as environment variables the properties content
FOR=%%i IN ("%NewFile%") DO ( SET FileName=%%~ni )
FILE_NAME=%FileName%
[EnvInject] - Variables injected successfully.
但是,在我的下一步中,我需要访问 $FILE_NAME 变量以便为 scp 指定正确的文件夹,我得到以下输出:
[SCP] No file(s) found: releases\$FILE_NAME\*
我是否缺少某个设置,或者我是否尝试错误地访问该变量?
我在下面看到了这个选项——“注入环境变量”——但这与我之前用来创建 $FILE_NAME 变量的步骤相同。如果这是正确的步骤......我如何使用它来获取变量? :)
编辑
点击下面的选项...
...当项目构建时,我能够获得以下控制台输出。
[EnvInject] - Loading node environment variables.
[EnvInject] - Preparing an environment for the build.
[EnvInject] - Keeping Jenkins system variables.
[EnvInject] - Keeping Jenkins build variables.
[EnvInject] - Injecting contributions.
[EnvInject] - Unset unresolved 'USERNAME' variable.
但是我仍然无法访问$FILE_NAME。下面是我在上一个构建步骤中选择设置变量的选项。
这是“属性内容”中的脚本:
FOR /F "delims=|" %%I IN ('DIR "C:\Jenkins\workspace\Project\releases\*.nupkg" /B /O:D') DO SET NewFile=%%I
FOR %%i IN ("%NewFile%") DO ( SET FileName=%%~ni )
FILE_NAME = %FileName%
【问题讨论】:
-
错误消息表明它正在将您的文件名作为文件夹。您是否重新检查了配置以及字段的文档? (旁边的“?”)
-
它应该用作文件夹名称(它在上一步中的其他地方用作文件名)。我会调查“?”文档。
-
另外,如果我使用其他环境变量,控制台输出中会出现值。它似乎无法将
$FILE_NAME识别为环境变量。 -
没错,好像是这样。但是,我们可以确定在批处理脚本中确实有一些东西放入 $FILE_NAME 吗?如果没有,您可能需要
Setlocal EnableDelayedExpansion并使用!Varname!语法吗?只是对批量变量扩展问题的一些盲目猜测,今晚晚些时候我将尝试重建您的问题。 -
等一下,你把批处理脚本放到属性字段了吗?我认为这行不通,因为它需要
java properties file formatsyntax。也许在脚本内容部分它会起作用?
标签: batch-file jenkins build environment-variables