2016-08-05 60 views
0

Ich benutze Git und Powershell Konfiguration Build-Schritte in TeamCity. Ich muss Git-Tag für die benutzerdefinierte Festschreibung extrahieren, wenn Sie benutzerdefinierte Build in TeamCity erstellen.Konvertieren von ConfigurationParameter in String in TeamCity

Also habe ich ConfigurationParameter% CustomRevision% (vom Typ Text) in TeamCity eingeführt und vor dem Start des benutzerdefinierten Builds fülle ich diesen Parameter manuell aus, um einen Hash des Commits bereitzustellen.

als Powershell-Skript, komponiere ich einen String mit dem git Befehl auszuführen:

$customRevision = "%CustomRevision%" 
$cmdGetExactTag = -join "git describe --exact-match --abbrev=0 --tags", $customRevision, "--always" 

$tag = Invoke-Expression $cmdGetExactTag 

Aber Powershell kann "% CustomRevision%" bespannen gibt mir die Ausnahme nicht konvertieren:

Invoke-Expression : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Command'. Specified method is not supported. 
At C:\BuildAgent\temp\buildTmp\powershell7046746237377169989.ps1:18 char:25 
+ $tag = Invoke-Expression <<<< $cmdGetExactTag 
+ CategoryInfo   : InvalidArgument: (:) [Invoke-Expression], Parame 
terBindingException 
[12:48:14][Step 3/4]  + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Comma 
[12:48:14][Step 3/4] nds.InvokeExpressionCommand 

Wie sollte ich "% CustomRevision%" richtig in einen String für PowerShell konvertieren? Vielen Dank im Voraus,

+0

Verschieben Sie den '-join'-Operator rechts neben den Eingabeargumenten:' "git describe --exact-match --abbrev = 0 --tips", $ customRevision, "--always" -join "" ' –

+0

Wenn ich das tue, dann habe ich: Invoke-Expression: Fehlender Ausdruck nach dem unären Operator '-'. Bei C: \ BuildAgent \ temp \ buildTmp \ powershell5077669800046396338.ps1: 18 Zeichen: 25 + $ tag = Invoke-Ausdruck <<<< $ cmdGetExactTag + CategoryInfo: ParserError: (-: String) [Invoke-Ausdruck] , Pa rseException + FullyQualifiedErrorId: MissingExpressionAfterOperator, Microsoft.PowerSh ell.Commands.InvokeExpressionCommand – Alex

Antwort

0

Haben Sie versucht, den Befehl direkt zu schreiben, damit Powershell die Variable inline (ohne 'Join') erweitern kann?

Wie in:

$cmdGetExactTag = "git describe --exact-match --abbrev=0 --tags $customRevision --always" 

denke ich, ist die Auflösung des Teamcity Parameter passiert werden kann, aber das Problem ist, um die Syntax für die Verbindung. Die vorgestellte Lösung soll darauf hinweisen, dass der Beitritt für diesen speziellen Fall nicht notwendig erscheint.

+0

Sie könnten sogar Refactoring dies zu $ ​​cmdGetExactTag = „git beschreiben --exact-match --abbrev = 0 --tags% CustomRevision% - immer " –

+0

Ich fand den Grund, warum ich ein Problem hatte, ich musste' $ customRevision = "% CustomRevision%" $ customRevision.Trim(). TrimEnd() 'das ist unglaublich! Danke für die Hilfe Jungs! – Alex