我的Windows gitlab-ci.yml
出现问题。我用环境变量启动phpunit
所以,我有一个变量:
PHPUNIT : %SOURCE_PATH%\cgi-bin\php.exe %PHPUNIT_PATH%
之前声明了一些变量:
SOURCE_PATH: 'C:\Source'
PHPUNIT_PATH: '"%SOURCE_PATH%\cgi-bin\tests\__init\tools\phpunit.phar"'
但是当我使用 CALL 命令时,Windows无法解析其他变量中的变量。
所以,如果我这样做:
CALL Echo %PHPUNIT%
我有:
C:\Source\cgi-bin\php.exe "%SOURCE_PATH%\cgi-bin\tests\__init\tools\phpunit.phar"
我认为这是因为 CALL 上下文中不存在%SOURCE_PATH%
。
但我无法找到如何在 CALL 中传递环境变量。我也找不到另一种方法来做到这一点。 (如果我不使用 CALL ,则当内部脚本退出时, gitlab-ci 会停止。)
我希望你能帮助我......
要知道的事情。
我的脚本由 gitlab-ci 亚军推出,所以它由以下人员启动:
setlocal enableextensions
setlocal enableDelayedExpansion
set nl=^
我无法改变这一点。
如果需要,我可以使用PowerShell,或者如果你知道另一种解决方法。 :)
答案 0 :(得分:1)
此批处理文件演示了执行问题并提供了解决方案。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
cls
set "SOURCE_PATH=C:\Source"
set "PHPUNIT_PATH="%%SOURCE_PATH%%\cgi-bin\tests\__init\tools\phpunit.phar""
echo %SOURCE_PATH%\cgi-bin\php.exe %PHPUNIT_PATH%
echo/
echo Reference to environment variable SOURCE_PATH in environment
echo variable PHPUNIT_PATH is not expanded on running php.exe.
echo/
echo Solution:
echo/
echo Explicitly set environment variable PHPUNIT_PATH once more with
echo its own value with using additionally the command CALL to expand
echo all variable references inside the variable value.
echo/
call set "PHPUNIT_PATH=%PHPUNIT_PATH%"
echo %SOURCE_PATH%\cgi-bin\php.exe %PHPUNIT_PATH%
echo/
endlocal
pause
通过指定参数EnableExtensions
和EnableDelayedExpansion
来定义命令行环境,不要多次运行 SETLOCAL 。两者都可以在运行 SETLOCAL 时指定一次。有关 SETLOCAL 和 ENDLOCAL 命令的详细说明,请参阅this answer,其中应明确说明为什么不建议运行 SETLOCAL 比实际需要更多。
仅在真正需要时才启用延迟扩展,因为处理文本中的感叹号或目录/文件名或参数字符串不再作为启用延迟扩展的文字字符处理。
答案 1 :(得分:0)
你的问题不是那么明确......但是,我可能会猜到 - 你的inbetween脚本最后使用'退出'。因此,请将其替换为 退出/ B
或尝试使用'开始'而不是致电 ...(开始/ B ... - 检查'开始/?')