Имена параметризованных переменных как входные данные задачи в Azure Конвейеры - PullRequest
0 голосов
/ 05 февраля 2020

Я пытался создать шаблон YAML, который сначала использует задачу AzureKeyVault@1 для получения значения некоторых Azure секретов KeyVault, а затем использует эти секреты для sqlUsername и sqlPassword в asqlAzureDacpacDeployment@1 задаче.

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

Я успешно использовал эту технику раньше, с задачей AzureKeyVault@1 а затем задача AzurePowerShell@4, в которой секрет вводится как переменная среды для скрипта PowerShell.

Это урезанная версия рабочего шаблона:

parameters:
- name: subscription
  type: string
- name: keyVaultSecretName
  type: string
- name: keyVault
  type: string
jobs:
- job: Run_PowerShell_With_Secret
  pool:
    name: Azure Pipelines
    vmImage: windows-latest
  steps:
  - task: AzureKeyVault@1
    inputs:
      azureSubscription: ${{ parameters.subscription }}
      keyVaultName:  ${{ parameters.keyVault }}
      secretsFilter: ${{ parameters.keyVaultSecretName }}
  - task: AzurePowerShell@4
    inputs:
      azureSubscription: ${{ parameters.subscription }}
      ScriptPath: 'some_script.ps1'
      azurePowerShellVersion: LatestVersion
    env: 
      SECRETVALUE: $(${{ parameters.keyVaultSecretName }})

И здесь это шаблон, где я не могу заставить работать ту же технику:

parameters:
- name: subscription
  type: string
- name: keyVault
  type: string
- name: sqlServerName
  type: string
- name: sqlDatabaseName
  type: string
- name: sqlServerAdminSecretName
  type: string
- name: sqlServerPasswordSecretName
  type: string
- name: dacpacName
  type: string
- name: artifactName
  type: string
jobs:
- job: Deploy_SQL_Database
  pool:
    name: Azure Pipelines
    vmImage: windows-latest
  steps:
  - task: DownloadPipelineArtifact@2
    inputs:
      artifact: ${{ parameters.artifactName }}_artifacts
  - task: AzureKeyVault@1
    inputs:
      azureSubscription: ${{ parameters.subscription }}
      keyVaultName:  ${{ parameters.keyVault }}
      secretsFilter: '${{ parameters.sqlServerAdminSecretName }}, ${{ parameters.sqlServerPasswordSecretName }}'
  - task: sqlAzureDacpacDeployment@1
    inputs:
      azureSubscription: ${{ parameters.subscription }}
      ServerName: ${{ parameters.sqlServerName }}.database.windows.net
      DatabaseName: ${{ parameters.sqlDatabaseName }}
      sqlUsername: $(${{ parameters.sqlServerAdminSecretName }})
      sqlPassword: $(${{ parameters.sqlServerPasswordSecretName }})
      DacpacFile:  $(Pipeline.Workspace)\${{ parameters.dacpacName }}.dacpac

Я могу заставить шаблон работать, если я жестко закодирую секретные имена:

parameters:
- name: subscriptionName
  type: string
- name: keyVault
  type: string
- name: sqlServerName
  type: string
- name: sqlDatabaseName
  type: string
- name: dacpacName
  type: string
- name: artifactName
  type: string
jobs:
- job: Deploy_${{ parameters.sqlDatabaseName }}_Database
  pool:
    name: Azure Pipelines
    vmImage: windows-latest
  steps:
  - checkout: none
  - task: AzureKeyVault@1
    inputs:
      azureSubscription: ${{ parameters.subscriptionName }}
      keyVaultName:  ${{ parameters.keyVault }}
      secretsFilter: 'SQLServerAdmin, SQLServerPassword'
  - task: DownloadPipelineArtifact@2
    inputs:
      artifact: ${{ parameters.artifactName }}_artifacts
  - task: sqlAzureDacpacDeployment@1
    inputs:
      azureSubscription: ${{ parameters.subscriptionName }}
      ServerName: ${{ parameters.sqlServerName }}.database.windows.net
      DatabaseName: ${{ parameters.sqlDatabaseName }}
      sqlUsername: $(sqlServerAdmin)
      sqlPassword: $(sqlServerPassword)
      DacpacFile:  $(Pipeline.Workspace)\${{ parameters.dacpacName }}.dacpac

Хотя это работает для нас сейчас я считаю это неоптимальным. Можно ли как-нибудь заставить эти параметризованные имена переменных работать?

...