2017-03-04 3 views
1

Ich habe ein Problem in meinem gitlab-ci.yml unter Windows. Ich starte phpunit mit Umgebungsvariablen.
So habe ich eine Variable wie:Umgebungsvariablen an Subshell übergeben CMD

PHPUNIT : %SOURCE_PATH%\cgi-bin\php.exe %PHPUNIT_PATH% 

Und einige Variablen deklariert werden, bevor:

SOURCE_PATH: 'C:\Source' 
PHPUNIT_PATH: '"%SOURCE_PATH%\cgi-bin\tests\__init\tools\phpunit.phar"' 

Aber wenn ich den Befehl CALL- verwenden, wird Windows nicht die Variable innerhalb der lösen andere Variable.

Also, wenn ich tun:

CALL Echo %PHPUNIT% 

ich habe:

C:\Source\cgi-bin\php.exe "%SOURCE_PATH%\cgi-bin\tests\__init\tools\phpunit.phar" 

Ich denke, das wegen %SOURCE_PATH% ist, existiert nicht in CALL- Kontext.

Aber ich konnte nicht herausfinden, wie die Umgebungsvariablen in CALL übergeben werden. Und ich konnte auch keinen anderen Weg finden, dies zu tun. (Wenn ich nicht verwenden CALL-, den Gitlab-ci wenn stoppt das Innere Skript beendet.)

Ich wünsche Sie ihr helfen ...

Somethings zu kennen.

Mein Skript wird von Gitlab-ci Läufer gestartet, so wird es gestartet von:

setlocal enableextensions 
setlocal enableDelayedExpansion 
set nl=^ 

Und ich kann das nicht ändern.

Ich kann PowerShell bei Bedarf verwenden, oder wenn Sie eine andere Arbeit kennen. :)

Antwort

1

Diese Batch-Datei zeigt bei der Ausführung das Problem und bietet eine Lösung.

@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 

Lauf nicht SETLOCAL mehr als einmal EnableExtensions und EnableDelayedExpansion die Befehlszeilenumgebung mit Angabe der Parameter zu definieren. Beide können nur einmal bei laufendem SETLOCAL angegeben werden.Siehe this answer für eine detaillierte Erklärung, was die Befehle SETLOCAL und ENDLOCAL tun, die deutlich machen, warum sollte es nicht ratsam ist SETLOCAL häufiger als wirklich gebraucht zu laufen.

Aktivieren Sie die verzögerte Erweiterung nur dann, wenn sie wirklich benötigt wird, da Ausrufezeichen im zu verarbeitenden Text oder Verzeichnis-/Dateinamen oder Parameterzeichenfolgen nicht mehr als Literalzeichen mit aktivierter verzögerter Erweiterung behandelt werden.

+0

Danke. (Das ist das einzige wichtige Wort) – thib3113

0

Ihre Frage ist nicht so klar ... Aber ich kann vermuten, dass - Ihre inbetween Skripte 'Exit' am Ende verwenden. SO, ersetzen Sie es mit Exit/B

oder versuchen Sie 'Start' zu verwenden, anstatt Anruf ... (Start/B ... - Prüfen 'Start /?')

+0

Ich kann nicht verwenden ** Exit/b ** ... weil zum Beispiel, manchmal verwende ich einige Tools wie phpunit (also ich kontrolliere nicht den Code). Ich habe versucht "Start", aber das gleiche Problem, ich habe einen Fehler sagen **% SOURCE_PATH% \ cgi-bin \ php.exe wird nicht gefunden **. Ich denke, Windows löst die var: '% PHPUNIT% =>% SOURCE_PATH% \ cgi-bin \ php.exe% PHPUNIT_PATH%' Aber im Inneren, Windows lösen nicht die Variable '% SOURCE_PATH%'. – thib3113

+0

Yup, Weil '% PHPUnit% ist keine vordefinierte Variable in Windows. und auch% Source_Path%. Bitte beachten Sie, dass diese Variablen zuerst mit dem Befehl ** Set ** definiert werden müssen. Und, Vergessen Sie nicht, die ** Double Quotes ** ("") Aorund den Pfad zu verwenden ... Wenn Ihr Pfad Spaces enthält, obwohl - CMD Fehler manchmal abgibt. –

+0

ja ich weiß, aber gitlab definieren (mit set), die vars. Wenn ich also% PHPUNIT% definiere, existiert% SOURCEPATH% – thib3113

Verwandte Themen