Разрешение предопределенных переменных агента в выражениях среды выполнения

У меня есть следующий сценарий, он упрощен для краткости, но описывает мою проблему.

У меня есть конвейер 2 Job.

Задание: задание, которое выполняется AdminPoolи выводит 2 переменные со следующими именами и. Имена важны, потому что каждое из них соответствует имени среды, работающей в отдельном MachinePool Пул развертывания виртуальных машин.

Upgrade Задание: задание по развертыванию, зависящее от BreakMatrixзадание, которое выполняется на VM MachinePool , с тегом, который выберет ENV1 и окружающая среда.

Я пытаюсь передать одну из переменных в каждую из соответствующих сред:

          - job: BreakMatrix
      pool: AdminPool
      steps:
      - checkout: none
      - powershell: |
          $result1 = @{"Hostname" = "Env1Value"}
          $result2 = @{"Hostname" = "Env2Value"}
          Write-Host "##vso[task.setvariable variable=ENV1;isOutput=true;]$result1"
          Write-Host "##vso[task.setvariable variable=ENV2;isOutput=true;]$result2"
        name: outputter

    - deployment: Upgrade
      dependsOn: BreakMatrix
      variables:
        agentName: $(Environment.ResourceName)
        agentName2: $(Agent.Name)
        formatted: $[ format('outputter.{0}', variables['agentName']) ]
        result1: $[ dependencies.BreakMatrix.outputs[format('outputter.{0}', variables['agentName'])] ]
        result2: $[ dependencies.BreakMatrix.outputs[format('outputter.{0}', variables['agentName2'])] ]
        result3: $[ dependencies.BreakMatrix.outputs[format('outputter.{0}', variables['Agent.Name'])] ]
        hardcode: $[ dependencies.BreakMatrix.outputs['outputter.ENV2'] ]
        json: $[ convertToJson(dependencies.BreakMatrix.outputs) ]
      environment:
        name: MachinePool
        resourceType: VirtualMachine
        tags: deploy-dynamic
      strategy:
        rolling:
          preDeploy:
            steps:
              - powershell: |
                  echo 'Predeploy'
                  echo "agentName: $(agentName)"
                  echo "agentName2: $(agentName2)"
                  echo "env: $(Environment.ResourceName)"
                  echo "formatted: $(formatted)"
                  echo "harcode: $(harcode)"
                  echo "result1: $(result1)"
                  echo "result2: $(result2)"
                  echo "result3: $(result3)"
                  echo "json: $(json)"
          deploy:
            steps:
              - powershell: |
                  echo 'Deploy'

Выход для ENV2 шаг перед развертыванием:

      Predeploy
agentName: ENV2
agentName2: ENV2
env: ENV2
formatted: outputter.ENV2
hardcode: {
Hostname:Env2Value}
result1: 
result2: 
result3: 
json: {
  
outputter.ENV2: 
\"Hostname\":\"Env2Value\"

}

Если я пытаюсь использовать предопределенную переменную в выражении зависимости, они, похоже, не разрешаются должным образом, но если я просто сопоставляю их с переменной / форматирую, они работают. Примечание. Имена среды фактически динамически вычисляются перед запуском этих заданий, поэтому я не могу использовать параметры или статические переменные времени / времени компиляции.

Любые предложения о том, как передать только соответствующую переменную в каждую из сред?

1 ответ

Решение

Я получил подтверждение от сообщества разработчиков, что это невозможно.

Соответствующая часть:

Но боюсь, что это требование не будет выполнено.

Причина в том, что выражение dependencies.xx.outputs не может прочитать переменную (переменные ['Agent.Name']) и значение выражения форматирования, определенные в конвейере YAML.

Теперь он поддерживает только жесткое кодирование имени переменной для получения соответствующего значения переменной задания.

Другие вопросы по тегам