使用Azure DevOps CI / CD管道自动部署ADF管道

时间:2020-01-13 10:59:24

标签: azure azure-devops cloud azure-data-factory

我已在https://docs.microsoft.com/en-us/azure/data-factory/continuous-integration-deployment的帮助下使用Azure DevOps CI / CD管道实现了Azure ADF管道部署过程的自动化(即)将管道从DEV部署到PROD环境ADF。我正在使用ADF的ARM模板将管道从一个环境部署到另一个环境。因此,我将有一个对应于每个环境(Dev / Prod)的单独的ARM_Parameter.json。 问题在于,每个ADF管道可能都带有很少的基本paramere,因为它们没有被参数化,因此在parameter.json中将不可用。你们能帮我在使用CI / CD管道进行的自动ADF管道部署过程中,以自动方式用每条ADF管道下的“基本参数”部分中的PROD值替换Dev值吗?

4 个答案:

答案 0 :(得分:1)

我看到两个选择:

  1. 如果仅用于此RUN_ENVIRONMENT参数,则可以将参数更改为variable并使用系统变量@pipeline()。DataFactory来确定要在哪个环境中运行。
  2. 否则,您可以配置数据工厂以为管道参数默认值生成ARM参数,但是您必须创建一个自定义的arm-template-parameters-definition.json文件。 Check the documentation here

答案 1 :(得分:1)

您可以使用Custom parameter with ARM template。 管道的自定义参数如下所示:

"Microsoft.DataFactory/factories/pipelines": {
    "properties": {
        "parameters": {
                "RUN_ENVIRONMENT": "=:-:string"
        }
    }
},

答案 2 :(得分:0)

在基本参数部分中用PROD值替换Dev值

根据您的屏幕截图,RUN_ENVIRONMENT是管道的参数,这意味着在转换为ARM模板时,其格式如下:

 "resources": [
    {
      ....
      ....
      "properties": {
        "parameters": {
          "RUN_ENVIRONMENT": {
            "type": "string",
            "defaultValue": "pro"
          }
        },...      
      },...
    }
  ]

在ARM部署任务中不能使用Override template parameters替换它。因为它将提示The template parameters 'environment' in the parameters file are not valid; they are not present in the original template and can therefore not be provided at deployment time.


要解决此错误,只需安装一个extension并将Replace token任务添加到管道中,然后再部署ARM任务。并且此任务将在构建运行时期间替换内容的值:

enter image description here

有关如何在我们的管道中应用此任务,可以参考我的answer1answer2

答案 3 :(得分:0)

还有另一种从主(协作)分支发布ADF的方法。 您可以为JSON文件(ADF对象)中的每个单个节点(属性)定义(替换)值。 因为您可以为每个环境(阶段)提供一个单独的CSV配置文件,所以它将解决您的问题。

CSV配置文件(config-stage-UAT.csv)的示例:

type,name,path,value
pipeline,PL_CopyMovies,activities[0].outputs[0].parameters.BlobContainer,UAT

然后只需在PowerShell中运行这样的cmdlet:

Publish-AdfV2FromJson -RootFolder "$RootFolder" -ResourceGroupName "$ResourceGroupName" -DataFactoryName "$DataFactoryName" -Location "$Location" -Stage "stage-UAT"

检查一下: this documentation(PowerShell模块)