1

Jenkins で Windows バッチ ファイルを実行しています。スクリプトの一部は、一致するファイルを探し、*.cover.xmlそれぞれに対して外部プログラムを実行します。そのバッチファイルの関連部分は次のようになります

SETLOCAL ENABLEDELAYEDEXPANSION
SET project_path=\\home\Sonar\8.1
PUSHD %project_path%
FOR /R %%i IN (*.cover.xml) do ncxc.exe %%i
POPD

project_pathのようにローカルパスに設定すると、D:\MyProj\完全に機能します。上記のように UNC パスを使用すると、問題が発生します。初めて実行すると、合格します。その後も毎回失敗!

「ncxc.exe」は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。

DIRスクリプトの最後に実行したところ、ディレクトリが空です! Jenkins サービスはドメイン ユーザーとして実行されており、copyコマンドはネットワーク リソースで動作します。そしてPUSHD、UNC パスをドライブ文字にマウントします。

EDIT - 同じように失敗するバッチファイル全体

set deployment_path=d:\deployment\
SETLOCAL ENABLEDELAYEDEXPANSION
set project_path=Z:\8.1\
pushd %project_path%
set some_path=%CD%
copy %deployment_path%\sppg.exe %CD%\sppg.exe /y
copy %deployment_path%\sonar_main.bat %CD%\sonar_main.bat /y
copy %deployment_path%\utils_all.bat %CD%\Utils\utils.all.bat /y
copy %deployment_path%\dunit2surefire.xsl %CD%\HCPC\dunit2surefire.xsl /y
copy %deployment_path%\xslt2xml.exe %CD%\HPC\xslt2xml.exe /y
copy %deployment_path%\sonar_delphi_all.bat %CD%\HPC\sonar_delphi_all.bat /y
copy %deployment_path%\xslt.bat %CD%\HCPC\Client\xslt.bat /y
copy %deployment_path%\xslt.bat %CD%\HCPC\Server\xslt.bat /y
copy %deployment_path%\ncxc.exe %CD%\ncxc.exe /y
copy %deployment_path%\ncover-converter.bat %CD%\ncover-converter.bat /y
ncxc.exe %CD%
popd
pushd %project_path%
sppg.exe "%CD%" ./Output_AutomatedBuild/TestsResults/Coverage/*.cover.xml

dir Z:
sonar_main.bat
popd
4

1 に答える 1

0

CMD は、レジストリ ハックなしでは UNC パスから開始できません。

あなたの問題は少し奇妙に思えます。コピーには UNC パスのみを使用することをお勧めします。

set deployment_path=d:\deployment\
SETLOCAL ENABLEDELAYEDEXPANSION
set project_path=\\server\share

copy %deployment_path%\sppg.exe %project_path%\sppg.exe /y

これはまったく問題ありません。それを試してみてください。%cd% は絶対に使用しないことをお勧めします。これは、コンテンツが何であるかを安全に信頼できないためです。

exeファイルの場合:完全修飾パスを指定するだけです。

%project_path%\ncxc.exe ...
于 2013-07-02T08:50:21.867 に答える