2017-03-04 72 views
1

我在Windows上的gitlab-ci.yml中遇到問題。我用環境變量啓動phpunit
所以,我有這樣一個變量:將環境變量傳遞給subshel​​l CMD

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" 

我想這是因爲在%SOURCE_PATH% CALL 背景不存在。

但我找不到如何傳遞CALL中的環境變量。我也找不到另一種方式來做到這一點。 (如果我不使用CALL,則gitlab慈內部腳本退出時停止。)

我希望你可以幫我...

出頭就知道了。

我的腳本由gitlab慈亞軍推出,所以它被啓動:

setlocal enableextensions 
setlocal enableDelayedExpansion 
set nl=^ 

而且我無法改變這一點。

如果需要,我可以使用PowerShell,或者如果您知道其他解決方法。 :)

回答

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 

不要運行超過一次SETLOCAL更與指定參數EnableExtensionsEnableDelayedExpansion定義的命令行環境。兩者都可以在運行SETLOCAL中指定一次。見this answer進行了詳細解釋了這些命令SETLOCALENDLOCAL就應該說清楚爲什麼它是不建議往往比真正需要的運行SETLOCAL

而且使只有當真正需要的感嘆號文字處理或目錄/文件名或參數字符串延遲擴展與延遲擴展使被處理了沒有文字字符。

+0

謝謝你。 (這是唯一重要的詞) – thib3113

0

您的問題並不那麼清楚......但是,我猜可能 - 您的介面腳本在末尾使用'退出'。所以,用退出/ B替換它

或嘗試使用'開始'而不是呼叫 ...(啓動/ B ... - 檢查 '啓動/?'

+0

因爲,例如,有些時候我使用一些工具,如PHPUnit的(所以我不控制代碼)我不能用**退出/ B ** ...。 我曾嘗試 「啓動」,但同樣的問題,我有一個錯誤,說**%SOURCE_PATH%\ cgi-bin目錄\ php.exe時未發現**。我認爲,窗戶解決VAR:'%的PHPUnit%=>%SOURCE_PATH%\ cgi-bin目錄\ php.exe的%PHPUNIT_PATH%' 但是,裏面的窗戶沒有解決變量'%SOURCE_PATH%'。 – thib3113

+0

是的,因爲%PHPUnit%不是windows中的預定義變量。和%Source_Path%一樣。所以,請記住先使用** Set ** Command定義這些變量。而且,不要忘記使用**雙引號**(「」)Aorund路徑...如果路徑中包含空格,即使 - CMD有時gievs錯誤。 –

+0

是的,我知道,但gitlab定義(使用集),增值稅。所以,當我定義%的PHPUnit%,%SOURCEPATH%存在 – thib3113

相關問題