2010-12-08 7 views
30

Ich versuche, einen TeamCity-Build-Prozess einzurichten, der ein benutzerdefiniertes Befehlszeilenskript ausführt. Das Skript verwendet eine Variable, so dass es ein Prozentzeichen benötigt (z. B. %x). Aber TeamCity verwendet Prozentzeichen für seine Eigenschaften (z. B. %build.number%), so dass das Prozentzeichen im Skript entfernt wird, wenn es ausgeführt wird.Mithilfe des Prozentzeichens in TeamCity-Buildskripts

Wenn das Skript enthält diese:

for /d %x in ("c:\*") do @echo "%x" 

Dies ist, was es tatsächlich läuft:

for /d x in ("\*") do @echo "x" 

Wie kann ich mein Skript zu schreiben, so dass es Variablen enthalten können?

+0

Teamcity die Dateien nicht berühren sie auf den Agenten Maschinen läuft; Bist du sicher, dass es TC ist, die die Prozente vermasselt? –

+1

Ich habe versucht, ein benutzerdefiniertes Skript anstelle einer separaten Datei zu verwenden. Verschieben in eine Datei half. – tspauld

Antwort

28

Versuchen Sie for /d %%x in ("c:\*") do @echo "%%x" (d. H. Duplizieren Sie die% -Zeichen).

Aber es sollte eine Möglichkeit geben, TC zu sagen, die Datei alleine zu lassen. Es wäre schrecklich, wenn TC die Prozentzeichen in den Quellen entfernen würde. Daher bin ich mir ziemlich sicher, dass Sie in der Konfiguration etwas getan haben, um den Ersatz von % zu ermöglichen.

Auf eine ähnliche Anmerkung, ist es wirklich TC, die mit dem Skript versaut? Oder verwenden Sie ein Build-Tool, um das Skript oder etwas ähnliches zu generieren?

+0

Ich habe ursprünglich versucht, ein benutzerdefiniertes Skript anstelle einer separaten Datei zu verwenden, und ich habe versucht, die doppelten Prozentzeichen auf diese Weise, aber es hat nicht funktioniert. Die Verwendung in einer separaten Datei funktioniert jedoch. – tspauld

+6

Ich konnte es auch als ein benutzerdefiniertes Skript arbeiten, indem ich die Prozentzeichen verdreifachte. – tspauld

+0

Dennoch muss es einen Grund geben, warum Ihr Skript beschädigt wird. Welches Programm erweitert '% build.number%'? Ist es wirklich TC? Wenn ja, muss eine Option zum Ausschalten vorhanden sein. Wenn Sie die Build-Nummer benötigen, schlage ich vor, das in ein anderes Skript zu schreiben und es zu lesen. –

3

Es scheint, dass Teamcity einfach kleben bleibt, was Sie in a .cmd Datei erfordert Die for Anweisung eingeben Doppel Prozent in diesen Fällen. Es scheint dann, dass TeamCity eine dieser % Zeichen entfernt, weshalb Tspauld es funktioniert hat (so habe ich es auch laufen).

In den Logs scheint TeamCity eine Datei hier zu erstellen Program Files\TeamCity\buildAgent\temp\agentTmp aber die für cmd ausgeführt und stirbt zu früh, um zu sehen, was es geschrieben hat, vermutlich wenn die erste Zeile eine lange ausführende Aufgabe war, könnten Sie dies überprüfen (ärgerlich "Pause" hat nicht funktioniert).

50

Wenn Sie% an TeamCity übergeben möchten, sollten Sie es mit anderen% umgehen, d. H. Für% muss es %% sein.

Aber Windows-Befehlszeile betrachtet% als Escape-Zeichen, so sollten Sie sie wieder entkommen das Hinzufügen eines weiteres% vor jedem%, dh für %% Sie passieren sollen %%%%

Flow ist:

%%%% in cmd -> %% in TeamCity -> % actual sign. 

tl; dr: Antwort auf Ihre Frage wird sein:

for /d %%%%x in ("c:\*") do @echo "%%%%x" 
+0

Hallo Marat, deine Antwort hat mir geholfen,% im Befehlszeilen-Build-Schritt zu entkommen. Aber ich verstehe immer noch nicht, wieso muss ich 4% Zeichen passieren, wenn %% dem Zeichen entkommen soll? Haben Sie einen Link zu einem Dokument, das dies erklärt? – Newbee

+1

@Newbee Es gibt 2 Ebenen von Escape. Der erste ist TeamCity, der zweite ist die Befehlszeile. Wenn Sie %%%% in TeamCity übergeben, interpretiert es es als %% und übergibt es an die Befehlszeile. Die Befehlszeile nimmt dann %% und interpretiert es als%. – Aura

+0

Danke für Ihre Antwort! – QtRoS

Verwandte Themen