Переопределить параметр в шаблоне Bicep через Azure ADO

Я пытаюсь динамически передать переменную из файла Yaml в файл бицепса, но безуспешно.

Обратите внимание overrideParameters: '-capital_env $(environment) на основании этого.

я тоже попробовал

param capital_env=''

и

param capital_env

и

param capital_env string

в моем файле бицеппарама, но безуспешно.

Я также попробовал overrideParameters: '-capital_env DEV' в своем файле yaml, но и этот тоже не сработал.

У меня есть этот файл yaml:

parameters:
- name: environment
  displayName: 'Environment'
  type: string
  default: 'DEV'
  values:
  - DEV
  - TST
  - PRD

trigger: none
pr: none

stages:
- stage: Deploy
  displayName: 'Deploy to $(environment)'
  jobs:
  - job: DeployDev
    displayName: 'Deploy to Development Environment'
    condition: eq('${{ parameters.environment }}', 'DEV')
    pool:
      name: 'PartnerPortal'
    variables:
      azureServiceConnection: 'AzON-TST'
      resourceGroupName: 'rgname'
      location: 'australiaeast'
      templateFile: '.\Infrastructure\DEV\mainStorageAccountCreation.bicep'
      parametersFile: '.\Infrastructure\DEV\mainStorageAccountCreation.bicepparam'
    steps:
    - script: |
        echo "Listing files in $(System.DefaultWorkingDirectory)"
        dir $(System.DefaultWorkingDirectory)
        echo "Listing files in $(System.DefaultWorkingDirectory)\Infrastructure\DEV\"
        dir $(System.DefaultWorkingDirectory)\Infrastructure\DEV
      displayName: 'List files in working directory'
    - script: |
        echo "Current PATH: $env:Path"
        az --version
      displayName: 'Verify Azure CLI Installation'
    - task: AzureResourceManagerTemplateDeployment@3
      inputs:
        deploymentScope: 'Resource Group'
        azureSubscription: '7c0513a'
        ConnectedServiceName: 'AzON-TST'
        resourceGroupName: $(resourceGroupName)
        location: $(location)
        templateLocation: 'Linked artifact'
        csmFile: '$(templateFile)'
        csmParametersFile: '$(parametersFile)'
        overrideParameters: '-capital_env $(environment)'
      displayName: 'Deploy ARM Template to DEV'

У меня есть этот файл бицеппараметров:

using 'mainStorageAccountCreation.bicep'
param capital_env='dfd'
param lower_env = toLower(capital_env)
param encryptionScopeName = 'defaultEncryptionScope'
param publicNetworkAccessLappFapp = 'Disabled'
param publicNetworkAccessApp = 'Enabled'
param ipWhitelist= [
  '203....' //my IP
]
param storageAccountsApp = [
  'uwasydstapartp${lower_env}'
]

param storageAccountsfapplapp = [
  'uwasydstapartptla${lower_env}'
  'uwasydstapartptli${lower_env}'
]

и это мой файл о бицепсах

param location string = resourceGroup().location
param capital_env string
param lower_env string = toLower(capital_env)
targetScope = 'resourceGroup'
param encryptionScopeName string
param publicNetworkAccessApp string
param publicNetworkAccessLappFapp string
param storageAccountsApp array
param storageAccountsfapplapp array
param ipWhitelist array
module storageapp '../modules/StorageAccountApp.bicep' = [for storageName in storageAccountsApp: {
  name: storageName
  params: {
    location: location
    storagename: storageName
    encryptionScopeName: encryptionScopeName
    publicNetworkAccessApp: publicNetworkAccessApp
    ipWhitelist:ipWhitelist
  }
}]



module storageappfapplapp '../modules/StorageAccountLappFapp.bicep' = [for storageName in storageAccountsfapplapp: {
  name: storageName
  params: {
    location: location
    storagename: storageName
    encryptionScopeName: encryptionScopeName
    publicNetworkAccessLappFapp: publicNetworkAccessLappFapp
  }
}]

модуль для создания учетной записи хранения

param storagename string
param location string
param encryptionScopeName string
param publicNetworkAccessApp string
param ipWhitelist array // Array of IP addresses to whitelist
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storagename
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  //Optional. Set the extended location of the resource. If not set, the storage account will be created in Azure main region. Otherwise it will be created in the specified extended location
  
  properties: {
    accessTier: 'Hot'
    allowBlobPublicAccess: false
    allowCrossTenantReplication: false
    allowedCopyScope: 'AAD'
    allowSharedKeyAccess: false
    defaultToOAuthAuthentication: false //A boolean flag which indicates whether the default authentication is OAuth or not. The default interpretation is false for this property.
    //dnsEndpointType: 'string'
    encryption: {
     
      keySource: 'Microsoft.Storage' //Microsoft-managed keys
      
      requireInfrastructureEncryption: false
      services: {
        blob: {
          enabled: true
         // keyType: 'Account'
        }
        file: {
          enabled: true
         // keyType: 'Account'
        }
        queue: {
          enabled: true
         // keyType: 'Account'
        }
        table: {
          enabled: true
         // keyType: 'Account'
        }
      }
    }
    
    isHnsEnabled: false
    isLocalUserEnabled: false
    isNfsV3Enabled: false
    isSftpEnabled: false
    
    minimumTlsVersion: 'TLS1_2'
    networkAcls: {
      bypass: 'AzureServices'
      ipRules: [
        for ip in ipWhitelist: {
          action: 'Allow'
          value: ip
        }
      ]
      defaultAction: 'Deny'
    }
    publicNetworkAccess: publicNetworkAccessApp
  
   }
}

resource encryptionScope 'Microsoft.Storage/storageAccounts/encryptionScopes@2022-09-01' = {
  name: encryptionScopeName
  parent: storageAccount
  properties: {
    source: 'Microsoft.Storage'
  }
}

Мне не удается успешно передать Capital_env из yaml в bicepparam, какие изменения мне, возможно, придется внести, чтобы это исправить?

Я собираюсь передать capital_env в свой файл бицеппаремтера.

у тебя нет переменной $(environment)? ты пытаешься использовать ${{ parameters.environment }}?

Thomas 03.09.2024 03:51

Нужна ли мне переменная, я предполагал, что параметр будет работать

Mohsen UWA 03.09.2024 03:54

Я также закодировал DEV, но это не сработало. Переопределить параметры: '-capital_env DEV'

Mohsen UWA 03.09.2024 03:55

Знаете ли вы, какую версию бицепса он использует?

Thomas 03.09.2024 04:27

добавил эту информацию, @ 01.01.2023

Mohsen UWA 03.09.2024 04:31

Извините, мне было интересно: az bicep version Когда вы запускаете задачу в ADO, она должна выводить эту информацию в задачу журнала в начале

Thomas 03.09.2024 04:35

В задаче журнала вы также должны увидеть команду az cli/az powershell, которую она выполняет.

Thomas 03.09.2024 04:36

Задача: развертывание шаблона ARM. Описание: развертывание шаблона Azure Resource Manager (ARM) во всех областях развертывания. Версия: 3.243.0 **** в локальном агенте: > az --version azure-cli 2.63.0 core 2.63. 0 телеметрия 1.1.0 Зависимости: msal 1.30.0 azure-mgmt-resource 23.1.1

Mohsen UWA 03.09.2024 04:44

я правильно ответил на ваш вопрос?

Mohsen UWA 03.09.2024 04:45

Да, это то, что я искал ^^

Thomas 03.09.2024 06:14

Привет @MohsenUWA, успешно ли развертывание? Если есть сообщение об ошибке, поделитесь им. Поскольку вы пытались жестко закодировать DEV, но это не сработало overrideParameters: '-capital_env DEV' , возможно, вы можете попробовать упростить шаблон Bicep, чтобы было легче обнаружить проблему.

Miao Tian-MSFT 03.09.2024 08:18

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

Mohsen UWA 03.09.2024 08:29

Привет @MiaoTian-MSFT, одно быстрое отличие от моего заключается в том, что вы используете StoragePrefix в качестве параметра как в yaml, так и в бицепсе, хотя для меня это не одно и то же.

Mohsen UWA 03.09.2024 08:30

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

Mohsen UWA 03.09.2024 08:32

Привет @MohsenUWA, я обновил свой ответ двумя параметрами переопределения. Использование нескольких параметров похоже на overrideParameters: '-storagePrefix ${{ parameters.Prefix }} -storageSKU ${{ parameters.SKU }}'

Miao Tian-MSFT 03.09.2024 08:54

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

Mohsen UWA 03.09.2024 08:59

спасибо за код. Кажется, я нашел проблему, нам не нужно определять параметр переопределения как отдельный параметр в файле yaml, его следует использовать в бицепсе, а не в бицепсе. Нам нужно определить его в Yaml как параметр только в том случае, если мы хотим получить его от пользователя через раскрывающийся список.

Mohsen UWA 03.09.2024 09:22

@MohsenUWA, рад слышать, что вы решили проблему! Приятного кодирования!

Miao Tian-MSFT 03.09.2024 09:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
18
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я протестировал переопределение параметра в шаблоне Bicep с помощью задачи AzureResourceManagerTemplateDeployment@3 в моем конвейере, и это работает.

YAML моего конвейера:

parameters:
- name: SKU
  type: string
  default: 'Standard_LRS'
  values:
  - Standard_LRS
  - Standard_GRS
- name: Prefix
  type: string
  default: 'dev'
  values:
  - dev
  - prd
trigger: none

steps:
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'ConnectionName'
    subscriptionId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'Group'
    location: 'Southeast Asia'
    templateLocation: 'Linked artifact'
    csmFile: '$(System.DefaultWorkingDirectory)/templates/template.bicep'
    csmParametersFile: '$(System.DefaultWorkingDirectory)/templates/template.bicepparam'
    overrideParameters: '-storagePrefix  ${{ parameters.Prefix }} -storageSKU ${{ parameters.SKU }}'
    deploymentMode: 'Incremental'

Итак, overrideParameters в вашем случае должно быть '-capital_env ${{ parameters.environment }}'.

Вот мои тестовые файлы Bicep для создания учетной записи хранения (ссылка здесь): Файлы в репозитории:

шаблон.бицепс

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string 

param location string = 'southeastasia'

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

шаблон.bicepparam

using 'template.bicep'
param storagePrefix='test'
param storageSKU='Standard_LRS'

Учетная запись хранения, развернутая с помощью конвейера:

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