如何将管道变量传递给参数文件以进行蓝图分配

时间:2021-07-01 08:03:30

标签: azure azure-devops azure-blueprints

我正在尝试创建用于部署 Azure 蓝图的 Azure DevOps 管道。参数文件(JSON)中有一些我想要配置的字段。如何将这些值作为管道变量传递并在参数文件中使用它们?

我尝试定义一个管道变量并在参数文件中引用它,如“$(var-name)”,但它不起作用。有没有办法解决这个问题?

以下是我的管道定义,我使用 AzureBlueprint 扩展来创建和分配蓝图:

steps:
- task: CreateBlueprint@1
  inputs:
    azureSubscription: $(serviceConnection)
    BlueprintName: $(blueprintName)
    BlueprintPath: '$(blueprintPath)'
    AlternateLocation: false
    PublishBlueprint: true

- task: AssignBlueprint@1
  inputs:
    azureSubscription: $(serviceConnection)
    AssignmentName: '$(blueprintName)-assignment'
    BlueprintName: $(blueprintName)
    ParametersFile: '$(blueprintPath)/assign.json'
    SubscriptionID: $(subscriptionId)
    Wait: true
    Timeout: 500

和我的参数文件:

"parameters":{
         "organization" : {
            "value": "xxxx"
         },
         "active-directory-domain-services_ad-domain-admin-password" : {
            "reference": {
               "keyVault": {
                     "id": "/subscriptions/xxxx/resourceGroups/xxxx/providers/Microsoft.KeyVault/vaults/xxxx"
               },
               "secretName": "xxxx"
            }
         },
         "jumpbox_jumpbox-local-admin-password" : {
            "reference": {
               "keyVault": {
                     "id": "/subscriptions/xxxx/resourceGroups/xxxx/providers/Microsoft.KeyVault/vaults/xxxx"
               },
               "secretName": "xxxx"
            }
         },         
         "keyvault_ad-domain-admin-user-password" : {
            "value" : "xxxx"
         },
         "keyvault_deployment-user-object-id" : {
            "value" : "xxxx"
         },
         "keyvault_jumpbox-local-admin-user-password" : {
            "value" : "xxxx"
         }
      }

2 个答案:

答案 0 :(得分:1)

由于您使用的任务(CreateBlueprintAssignBlueprint)不支持覆盖参数,您有两个选择:

示例:

$paramFile = Get-Content ./azuredeploy.parameters.json | ConvertFrom-Json
$paramFile.parameters.organization.value = "your-org-name" 
$paramFile | ConvertTo-Json | Set-Content ./azuredeploy.parameters.json

请注意,您使用的任务在过去 17 个月内未收到更新(此处是 GitHub repository)。

答案 1 :(得分:1)

AssignBlueprint@1 本身不支持此功能。但是,您可以使用 Json substitution

修改 assign.json

归根结底是让 Azure Pipeline 变量的名称类似于要放置的 json 文件中叶子的路径。

这是一个例子:

variables:
  Data.DebugMode: disabled
  Data.DefaultConnection.ConnectionString: 'Data Source=(prodDB)\MSDB;AttachDbFilename=prod.mdf;'
  Data.DBAccess.Users.0: Admin-3
  Data.FeatureFlags.Preview.1.NewWelcomeMessage: AllAccounts

# Update appsettings.json via FileTransform task.
- task: FileTransform@1
  displayName: 'File transformation: appsettings.json'
  inputs:
    folderPath: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    targetFiles: '**/appsettings.json'
    fileType: json
相关问题