You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Azure DevOps Pipeline向Bicep模板传递参数

实现带环境名称的存储账户Bicep模板及Azure DevOps Pipeline集成

一、修改Bicep模板

你需要调整现有模板,添加环境参数并自动生成符合Azure存储账户规则的命名:

核心改动说明

  1. 新增环境名称参数,限定合法值避免非法输入
  2. 用变量自动拼接合规的存储账户名(Azure要求存储账户名必须是3-24位小写字母/数字,无特殊字符)
  3. 同步标签中的环境值,保持配置一致性

修改后的完整Bicep模板

// Creates a storage account, private endpoints and DNS zones
@description('Azure region of the deployment')
param location string = 'UK South'

@description('Environment name (used for storage account naming and tagging)')
@allowed([
  'dev'
  'test'
  'prod'
])
param environmentName string = 'dev'

@description('Base name for the storage account (will be combined with environment name)')
param storageBaseName string = 'random'

@allowed([
  'Standard_LRS'
  'Standard_ZRS'
  'Standard_GRS'
  'Standard_GZRS'
  'Standard_RAGRS'
  'Standard_RAGZRS'
  'Premium_LRS'
  'Premium_ZRS'
])
@description('Storage SKU')
param storageSkuName string = 'Standard_LRS'

// 生成合规的存储账户名:基础名+环境名+后缀,统一转小写确保符合规则
var storageAccountName = '${toLower(storageBaseName)}${toLower(environmentName)}01'

resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  tags: {
    Environment: environmentName // 替换固定值,使用参数传入的环境名
  }
  sku: {
    name: storageSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
    allowBlobPublicAccess: true
    allowCrossTenantReplication: true
    allowSharedKeyAccess: true
    encryption: {
      keySource: 'Microsoft.Storage'
      requireInfrastructureEncryption: false
      services: {
        blob: {
          enabled: true
          keyType: 'Account'
        }
        file: {
          enabled: true
          keyType: 'Account'
        }
        queue: {
          enabled: true
          keyType: 'Service'
        }
        table: {
          enabled: true
          keyType: 'Service'
        }
      }
    }
    isHnsEnabled: false
    isNfsV3Enabled: false
    keyPolicy: {
      keyExpirationPeriodInDays: 7
    }
    largeFileSharesState: 'Disabled'
    minimumTlsVersion: 'TLS1_2'
    networkAcls: {
      bypass: 'AzureServices'
      defaultAction: 'Allow'
    }
    supportsHttpsTrafficOnly: true
  }
}

output storageId string = storage.id
output storageAccountName string = storageAccountName

二、Azure DevOps Pipeline配置

在Pipeline中通过两种方式传递环境名称参数:

方式1:分支自动匹配环境

通过Pipeline变量根据分支自动设置环境名(比如main分支对应prod,develop分支对应dev):

steps:
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: '<你的Azure服务连接>'
    subscriptionId: '<订阅ID>'
    action: 'Create Or Update Resource Group'
    resourceGroupName: '<目标资源组名>'
    location: 'UK South'
    templateLocation: 'Linked artifact'
    csmFile: './storage.bicep' # 你的Bicep文件路径
    overrideParameters: '-environmentName $(environmentName) -storageBaseName "myapp"'
    deploymentMode: 'Incremental'

方式2:手动选择环境

在Pipeline开头定义参数,运行时手动选择目标环境:

parameters:
- name: environmentName
  displayName: 'Environment Name'
  type: string
  default: 'dev'
  values:
  - dev
  - test
  - prod

steps:
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    # 其他配置同上
    overrideParameters: '-environmentName ${{ parameters.environmentName }} -storageBaseName "myapp"'

内容的提问来源于stack exchange,提问作者Darren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:40:14