Azure Pipeline - использование набора переменных в шаблонной задаче в качестве параметра в другой шаблонной задаче - PullRequest
0 голосов
/ 08 апреля 2020

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

Мой шаблон конфигурации:

steps:
- task: AzureCLI@2
  name: Config
  displayName: Get Config and Generate Variables
  inputs:
    azureSubscription: '$(Subscription)'
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
        Environment="prod"
        echo "##vso[task.setvariable variable=Environment;isOutput=true]prod"
        echo "##vso[task.setvariable variable=EastName;isOutput=true]$(AppNamePrefix)-$Environment-eastus"
        echo "##vso[task.setvariable variable=East2Name;isOutput=true]$(AppNamePrefix)-$Environment-eastus2"
        echo "##vso[task.setvariable variable=CentralName;isOutput=true]$(AppNamePrefix)-$Environment-centralus"
        echo "##vso[task.setvariable variable=WestName;isOutput=true]$(AppNamePrefix)-$Environment-westus"

и мой шаблон развертывания выглядит так:

parameters:
- name: artifactName
  type: string
  default: MyBuildOutputs
- name: appFullName
  type: string
- name: condition
  type: boolean
  default: true

steps:
- task: AzureFunctionApp@1
  condition: ${{ parameters.condition }}
  displayName: 'Production deploy'
  inputs:
    azureSubscription: '$(Subscription)'
    appType: 'functionApp'
    appName: ${{ parameters.appFullName }}
    package: '$(System.ArtifactsDirectory)/${{ parameters.artifactName }}/$(Build.BuildId).zip'
    deploymentMethod: 'auto'

и мой этап для этого выглядит так (с вырезом ненужных битов):

- template: ../../tasks/azure/getConfig.yml
- template: ../../tasks/azure/deployToFA.yml
  parameters:
    appFullName: $(EastName)

Я попробовал следующее для appFullName: <name>:

  • $(EastName)
  • ${{ EastName }}
  • $[ EastName ]
  • $EastName

но, к сожалению, ни один из них, кажется, не работает, поскольку все они втянуты как литералы. Есть ли способ сделать это? Я видел способы использования dependsOn, но мне не нужна скрытая зависимость между двумя шаблонами (если это вообще возможно)

1 Ответ

0 голосов
/ 09 апреля 2020

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

Извините, но я боюсь, что ваша структура шаблона пока не поддерживается. Вы можете проверить Обработка конвейера :

Чтобы превратить конвейер в прогон, Azure Конвейеры проходят несколько этапов в следующем порядке: Сначала , разверните шаблоны и оценивать выражения шаблона.

Таким образом, ${{ parameters.appFullName }} в deploy template оценивается до того, как config template запустит задачу AzureCli. Вот почему none of these seem to work as they all get pulled in as literals. По своему замыслу ваша $(EastName) (переменная времени выполнения) не имеет смысла при передаче в параметр.

Как альтернативный способ , отметьте Использовать переменные в качестве входных данных задачи . Он описывает другой способ удовлетворения ваших потребностей.

Ваш шаблон конфигурации:

steps:
- task: AzureCLI@2
  name: Config
  displayName: Get Config and Generate Variables
  inputs:
    xxx

Ваш шаблон развертывания:

parameters:
- name: artifactName
  type: string
  default: MyBuildOutputs
- name: appFullName
  type: string
- name: condition
  type: boolean
  default: true

steps:
- task: AzureFunctionApp@1
  condition: ${{ parameters.condition }}
  displayName: 'Production deploy'
  inputs:
    azureSubscription: '$(Subscription)'
    appType: 'functionApp'
    appName: $(Config.EastName) // Changes here. *********  Config is the name of your AzureCLI task.
    package: '$(System.ArtifactsDirectory)/${{ parameters.artifactName }}/$(Build.BuildId).zip'
    deploymentMethod: 'auto'

Ваш этап:

- template: ../../tasks/azure/getConfig.yml
- template: ../../tasks/azure/deployToFA.yml

Надеюсь, это поможет.

...