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

Azure Data Factory集成DevOps的CI/CD改进实现咨询

Azure Data Factory 新版CI/CD流程问题解答

1. 流程参考YAML示例

以下是基于Azure DevOps Pipeline编写的可直接复用的YAML配置,全程不依赖adf_publish分支,基于npm包完成ADF ARM模板构建与多环境部署:

# 触发分支为ADF协作开发主分支,无需监听adf_publish分支
trigger:
- main

pool:
  vmImage: ubuntu-latest

variables:
  - name: adfSourceRoot
    value: $(Build.SourcesDirectory)/adf-resources # 替换为代码库中ADF资源的根目录
  - name: armOutputDir
    value: $(Build.ArtifactStagingDirectory)/adf-arm-templates
  - name: adfSubscriptionId
    value: <开发环境ADF所在订阅ID>
  - name: adfName
    value: <开发环境ADF实例名>
  - name: adfResourceGroup
    value: <开发环境ADF所在资源组>

stages:
- stage: Build
  displayName: 校验并构建ADF ARM模板
  jobs:
  - job: BuildJob
    steps:
    # 安装Node.js运行环境
    - task: NodeTool@0
      inputs:
        versionSpec: '16.x'
      displayName: '安装Node.js 16.x'
    
    # 全局安装ADF官方构建npm包
    - script: |
        npm install -g @microsoft/azure-data-factory-utilities
      displayName: '安装ADF构建工具'
    
    # 校验ADF资源配置合法性
    - script: |
        adf validate $(adfSourceRoot) $(adfSubscriptionId) $(adfName) $(adfResourceGroup)
      displayName: '校验ADF资源配置'
    
    # 导出通用ARM模板
    - script: |
        adf export $(adfSourceRoot) $(armOutputDir) $(adfSubscriptionId) $(adfName) $(adfResourceGroup)
      displayName: '生成跨环境部署ARM模板'
    
    # 发布ARM模板为流水线制品,供后续部署阶段调用
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(armOutputDir)'
        ArtifactName: 'adf-arm-artifact'
        publishLocation: 'Container'
      displayName: '发布ARM模板制品'

# UAT环境部署,可在阶段配置中加审批规则
- stage: DeployUAT
  displayName: 部署到UAT环境
  dependsOn: Build
  jobs:
  - deployment: UATDeploy
    environment: UAT
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: 'adf-arm-artifact'
              downloadPath: '$(System.ArtifactsDirectory)'
          
          # 执行ARM模板部署,指定UAT环境参数文件
          - task: AzureResourceManagerTemplateDeployment@3
            inputs:
              deploymentScope: 'Resource Group'
              azureResourceManagerConnection: '<UAT环境Azure服务连接名>'
              subscriptionId: '<UAT环境订阅ID>'
              action: 'Create Or Update Resource Group'
              resourceGroupName: '<UAT环境ADF所在资源组>'
              location: '<UAT资源所在区域>'
              templateLocation: 'Linked artifact'
              csmFile: '$(System.ArtifactsDirectory)/adf-arm-artifact/ARMTemplateForFactory.json'
              csmParametersFile: '$(Build.SourcesDirectory)/env-params/uat.parameters.json'
              deploymentMode: 'Incremental'
            displayName: '部署ADF到UAT环境'

# 生产环境部署,配置强制审批
- stage: DeployProd
  displayName: 部署到生产环境
  dependsOn: DeployUAT
  jobs:
  - deployment: ProdDeploy
    environment: Prod
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: 'adf-arm-artifact'
              downloadPath: '$(System.ArtifactsDirectory)'
          
          - task: AzureResourceManagerTemplateDeployment@3
            inputs:
              deploymentScope: 'Resource Group'
              azureResourceManagerConnection: '<生产环境Azure服务连接名>'
              subscriptionId: '<生产环境订阅ID>'
              action: 'Create Or Update Resource Group'
              resourceGroupName: '<生产环境ADF所在资源组>'
              location: '<生产资源所在区域>'
              templateLocation: 'Linked artifact'
              csmFile: '$(System.ArtifactsDirectory)/adf-arm-artifact/ARMTemplateForFactory.json'
              csmParametersFile: '$(Build.SourcesDirectory)/env-params/prod.parameters.json'
              deploymentMode: 'Incremental'
            displayName: '部署ADF到生产环境'

2. 跨环境参数覆盖实现方案

不需要修改npm构建生成的原始模板和默认参数文件,按以下步骤操作即可实现不同环境的配置切换:

  • 第一步:在代码库中单独创建环境参数目录,比如env-params,为每个环境维护独立的参数文件,不需要全量复制默认生成的参数配置,只需要填写需要覆盖的参数项即可。
  • 第二步:第一次构建完成后,打开生成的ARMTemplateParametersForFactory.json,找到需要替换的配置对应的参数名:比如Key Vault链接服务的KV地址参数,命名规则一般为<KeyVault链接服务名称>_properties_typeProperties_baseUrl,ADF实例名、存储账户链接、计算资源关联配置都会被自动抽为独立参数。
  • 第三步:在对应环境的参数文件中给目标参数赋值即可,以下是UAT环境参数文件的最简示例:
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "factoryName": {
      "value": "uat-data-factory"
    },
    "Dev-KV_properties_typeProperties_baseUrl": {
      "value": "https://uat-kv.vault.azure.net/"
    }
  }
}

按照相同规则编写生产环境参数文件,将对应Key Vault参数值替换为Prod-KV的访问地址即可。

  • 可选补充:如果有不想硬编码在参数文件里的敏感值,可以直接在ARM部署任务的overrideParameters字段中传入,直接覆盖参数文件中的值,不需要修改代码库中的文件。

注意:不要手动修改npm导出的ARM模板结构,所有可配置项都会被自动抽为顶层参数,直接赋值即可,避免后续ADF资源更新后模板结构变化导致的部署失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:42:36