2016-08-05 11 views
0

TeamCityでビルドステップを設定するGitとPowershellを使用しています。 TeamCityでカスタムビルドを行うときに、カスタムコミット用のGitタグを抽出する必要があります。TeamCityでConfigurationParameterをstringに変換する

TeamCityにConfigurationParameter%CustomRevision%(テキストタイプの)を導入しました。カスタムビルドを開始する前に、コミットのハッシュを提供するこのパラメータを手動で入力します。 PowerShellのスクリプトを使用するよりも

、私はgitのコマンドを実行するための文字列を構成する:

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

$tag = Invoke-Expression $cmdGetExactTag 

しかし、PowerShellは私に例外を与える文字列に "%のCustomRevision%" を変換することはできません。

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 

"%CustomRevision%"をPowerShellの文字列に正しく変換する方法は? ありがとうございます。

+0

入力引数の右側に '-join'演算子を移動します:' 'git describe --exact-match --abbrev = 0 --tags"、$ customRevision、 "--always" -join "" ' –

+0

私はそれをしたら、私は持っています:Invoke-Expression:単項演算子 ' - 'の後に式がありません。C:¥BuildAgent¥temp¥buildTmp¥powershell5077669800046396338.ps1:18 char:25 + $ tag = Invoke-Expression <<<< $ cmdGetExactTag +カテゴリ情報:ParserError:( - :String)[Invoke-Expression] 、ペンシルバニア rseException + FullyQualifiedErrorId:MissingExpressionAfterOperator、Microsoft.PowerSh ell.Commands.InvokeExpressionCommand – Alex

答えて

0

コマンドを直接書き、変数をインラインで展開できるようにしましたか(「結合」なし)?同様に

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

私はチームシティーパラメータの解像度が起こっすることができると思いますが、問題は、参加のための構文の周りにあります。提示された解決策は、この特定のケースに対する参加が必要ないように見えることを指摘することである。

+0

は、あなたも$ cmdGetExactTag =「Gitは説明--exactマッチ--abbrev = 0 --tags%CustomRevision%にこれをリファクタリング可能性 - いつも " –

+0

私は問題があった理由を見つけたので、' $ customRevision = "%CustomRevision%" $ customRevision.Trim()。TrimEnd() 'は信じられません!助けてくれてありがとう! – Alex

関連する問題