ТФС 2015 можете создавать переменные другие переменные строить?

когда я определяю пользовательскую переменную в новой сборке команды TFS 2015 следующим образом:
Имя:SomeOutput
Значение:$(System.DefaultWorkingDirectory)Some

...кажется, он не расширяется $(System.DefaultWorkingDirectory).
Есть ли способ обойти это?

EDIT:
По крайней мере, кажется, что она не везде расширяется.

например, в MSBuild-Аргументы, /p:OUTPUT="$(SomeOutput)" увеличивается до /p:OUTPUT="C:TfsDataBuildAgents_worksSome" но когда я добавляю задачу сборки строки cmd с набором инструментов cmd и значение /k set, он печатает
SOMEOUTPUT=$(System.DefaultWorkingDirectory)Some

редактирование 2: Вот мои переменные
variables

это мой рабочий процесс шаг
workflow

и это то, что печатает сборка
build output

3 ответов


можно использовать расширение переменных задач VSTS из Visual Studio Marketplace.

когда вы определяете переменную на экране переменных и используете другие переменные в качестве значения, они не будут расширены (как вы могли ожидать). Вместо этого текст передается на задачи в рабочем процессе. Без этой маленькой задачи не будет работать следующая конфигурация:

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

добавив задачу развернуть переменную(ы) в верхнюю часть workflow, он позаботится о расширении, поэтому любая задача ниже него получит значение, которое вам нужно.

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

PS: новый агент (версия 2.x) теперь автоматически разворачивает переменные.


это может быть достигнуто.

вам может понадобиться использовать % % вместо $ для вызова переменных в cmd для вывода результата. Также необходимо добавить call в передней части команды. Вот простой пример: cmd prompt expansion of variables example

Примечание: System.DefaultWorkingDirectory недоступен в cmd (не уверен, почему); вам нужно использовать . Подробности можно просмотреть в журналах.


У меня была та же проблема - я хотел собрать путь, состоящий из нескольких встроенных переменных, и передать его скрипту PS.

решение: Я закончил тем, что объединил переменные в фактическом скрипте через соответствующие сгенерированные переменные среды (например,$env:BUILD_SOURCESDIRECTORY).

Не то, что я имел в виду изначально, но это работает, по крайней мере. Недостаток-если мне нужно изменить путь, мне всегда нужно изменить сценарий PS вместо сборки переменная.