Использование выражений времени выполнения в конвейерах Azure yaml-скрипт - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь выполнить скрипт, передавая переменную из лазурного конвейера. Вот мой простой тестовый конвейер:

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
    major: 1.2
    minor: $[counter(variables['major'], 1)]
    version: $[format('{0}.{1}', variables.major, variables.minor)]

name: $[format('{0} v{1}', 'Yaml Testing', variables['version'])]

steps:

- script: |
    echo variables['version']
    echo $(variables.version)
    echo '$(variables.version)'
    echo "$(variables.version')"
    echo $[ variables['version'] ]
    echo ${{ variables['version'] }}
    echo $(Build.BuildNumber)
  displayName: 'Run a multi-line script'

- script:     $[format('{0} {1}', 'echo', variables['version'])]
  displayName: 'Echo Formatted String'

Выводы сценариев:

Generating script.
========================== Starting Command Output ===========================
##[command]"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "d:\a\_temp\3cb45b74-f6cd-4d2f-bf65-f635779b9d86.cmd""
variables['version']
$(variables.version)
'$(variables.version)'
"$(variables.version')"
$[ variables['version'] ]
$[format('{0}.{1}', variables.major, variables.minor)]
Yaml Testing v1.2.11
##[section]Finishing: Run a multi-line script

и

Generating script.
Script contents:
$[format('{0} {1}', 'echo', variables['version'])]
========================== Starting Command Output ===========================
##[command]"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "d:\a\_temp\5e42dc54-e027-4b9a-9af4-0db02e879b0f.cmd""
'$[format' is not recognized as an internal or external command,
operable program or batch file.
##[error]Cmd.exe exited with code '1'.
##[section]Finishing: Echo Formatted String

Как ни странно, код работает нормально в имени, ноне при попытке использовать в сценарии.

Что я делаю не так?

1 Ответ

1 голос
/ 08 октября 2019

$[] оценивается во время выполнения, поэтому он не работает. Вы можете передать $ {{expression}} в скрипт, как показано ниже:

- script: ${{format('{0} {1}', 'echo', '$(version)')}} 
  displayName: 'Echo Formatted String'

Выражение в ${{}} будет оценено во время разбора. До фактического выполнения -script выражение в ${{}} анализируется в допустимую команду.

Вы можете напрямую обращаться к переменным, определенным пользователем, как '$(variableName)' вместо $(variables.Name)

.
...