新しい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
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)は変数を自動拡張するようになりました。
同じ問題がありました。いくつかの組み込み変数で構成されるパスをつなぎ合わせて、PSスクリプトに渡したいと思っていました。
回避策:実際のスクリプトの変数を、対応する生成された環境変数(たとえば、$env:BUILD_SOURCESDIRECTORY
)。
私が当初考えていたものではありませんが、少なくとも機能します。欠点-パスを変更する必要がある場合は、ビルド変数ではなく、常にPSスクリプトを変更する必要があります。