Для ключевых слов Matrix
он используется для расширения мультиконфигов в несколько заданий времени выполнения. Другими словами, YAML, который содержит ключевые слова Matrix
, будет расширен в время выполнения вместо parse time
. Таким образом, переменная buildConfiguration
является переменной времени выполнения , и она недоступна во время компиляции, также не может быть получена тогда.
Кроме того, ${{ }}
- это формат для обработки переменных в время компиляции .
Теперь нет никаких сомнений в том, что возникшая проблема - ожидаемое действие, поскольку вы пытаетесь получить переменную времени выполнения в время компиляции .
Итак, чтобы распечатать значение buildConfiguration
, вам нужно использовать формат $()
Измените свой YAML-скрипт на:
jobs:
- job: LinuxBuild
displayName: Pew Pew
strategy:
matrix:
debugJob:
buildConfiguration: Debug
releaseJob:
buildConfiguration: Release
pool:
vmImage: 'ubuntu-16.04'
steps:
- script: echo $(buildConfiguration)
- script: echo "hello"
condition: and(succeeded(), eq(variables.buildConfiguration, 'Debug'))
Теперь давайте сосредоточимся на еще одной вашей попытке: - ${{ if eq(variables.debugJob.buildConfiguration, 'Debug') }}:
.
Во-первых, вам нужно знать, что ${{ if xxx }}
, это template expression
, обработанный во время времени компиляции . Это означает, что система go проанализирует значение, а затем решит, следует ли запускать следующие шаги / задания / шаблоны. Этот процесс происходит до запуска трубопровода. Мы называем это начальный шаг.
Как я уже упоминал выше, buildConfiguration
- это переменная времени выполнения . Это доступно только во время выполнения. Таким образом, его значение не может быть получено во время компиляции. Во время компиляции его значение будет проанализировано в null
. Вот почему ваш шаблон никогда не запускается.
Существует 2 способа обойти это условие.
1) Измените на использование другой переменной в условии тот, который может быть доступен как во время компиляции, так и во время выполнения. например, Build.SourceBranchName
.
2) Разделить условие и заменить его на задачи condition
, определенные в файле yml шаблона.
Как:
- script: echo "hello"
condition: and(succeeded(), eq(variables.buildConfiguration, 'Debug'))