web-dev-qa-db-ja.com

TFS 2015ビルド変数は他のビルド変数にアクセスできますか?

新しいTFS2015チームビルドでカスタム変数を次のように定義すると、次のようになります。
名前:SomeOutput
値:$(System.DefaultWorkingDirectory)\Some

... $(System.DefaultWorkingDirectory)を展開していないようです。
これを回避する方法はありますか?

編集:
少なくとも、どこにも拡張されていないようです。

たとえば、MSBuild-Argumentsでは、/p:OUTPUT="$(SomeOutput)"/p:OUTPUT="C:\TfsData\BuildAgents\_work\3\s\Some"に展開されますが、ツールをcmdに設定し、パラメーターを/k setに設定してコマンドラインビルドタスクを追加すると、出力されます。
SOMEOUTPUT=$(System.DefaultWorkingDirectory)\Some

編集2:これが私の変数です
variables

これは私のワークフローステップです
workflow

そしてこれはビルドが印刷するものです
build output

15
Suchiman

Visual Studio Marketplaceから VSTS Variable Tasks拡張機能 を使用できます。

[変数]画面で変数を定義し、他の変数を値として使用すると、それらは展開されません(予想どおり)。代わりに、リテラルテキストがワークフローのタスクに渡されます。この小さなタスクがないと、次の構成は機能しません。

Variable              Value
Build.DropLocation    \\share\drops\$(Build.DefinitionName)\$(Build.BuildNumber)

変数の展開タスクをワークフローの先頭に追加することで、展開が処理されるため、その下のタスクはすべて、必要な値を受け取ります。

https://github.com/jessehouwing/vsts-variable-tasks/wiki/Expand-Variable

PS:新しいエージェント(バージョン2.x)は変数を自動拡張するようになりました。

10

それを達成することができます。

結果を出力するためにcmdの変数を呼び出すには、% %の代わりに$を使用する必要がある場合があります。コマンドの前にcallを追加する必要もあります。簡単な例を次に示します。 cmd Prompt expansion of variables example

注:System.DefaultWorkingDirectorycmdでは使用できません(理由はわかりません)。代わりにSystem_DefaultWorkingDirectoryを使用する必要があります。詳細はログで確認できます。

4
PatrickLu-MSFT

同じ問題がありました。いくつかの組み込み変数で構成されるパスをつなぎ合わせて、PSスクリプトに渡したいと思っていました。

回避策:実際のスクリプトの変数を、対応する生成された環境変数(たとえば、$env:BUILD_SOURCESDIRECTORY)。

私が当初考えていたものではありませんが、少なくとも機能します。欠点-パスを変更する必要がある場合は、ビルド変数ではなく、常にPSスクリプトを変更する必要があります。

2
knipp