发布后如何在Azure模板参数文件(ARMTemplateParametersForFactory.json)中获取Azure数据工厂参数

时间:2018-12-06 20:44:36

标签: azure azure-devops azure-pipelines azure-data-factory arm-template

我正在尝试为Azure数据工厂创建Azure DevOps发布管道。

我遵循了Microsoft(https://docs.microsoft.com/en-us/azure/data-factory/continuous-integration-deployment)颇为晦涩的指南,即向发布(https://docs.microsoft.com/en-us/azure/data-factory/continuous-integration-deployment#use-custom-parameters-with-the-resource-manager-template)时生成的ARM模板添加其他参数。

在master分支的路由中创建了arm-template-parameters-definition.json文件。当我进行发布时,ARMTemplateParametersForFactory.json分支中的adf_publish保持完全不变。我尝试了许多配置。

我已经在Data Factory中定义了一些管道参数,并希望它们可以在我的部署管道中进行配置。对我来说似乎是一个明显的要求。

我错过了一些基本的东西吗?请帮忙!

JSON如下:

{
    "Microsoft.DataFactory/factories/pipelines": {
        "*": {
            "properties": {
                "parameters": {
                        "*": "="                
                }
            }
        }
    },
    "Microsoft.DataFactory/factories/integrationRuntimes": {
        "*": "="
    },
    "Microsoft.DataFactory/factories/triggers": {},
    "Microsoft.DataFactory/factories/linkedServices": {},
    "Microsoft.DataFactory/factories/datasets": {}
}

5 个答案:

答案 0 :(得分:2)

我已经为此苦苦挣扎了几天,却没有找到很多信息,所以在这里我找到了。您必须将arm-template-parameters-definition.json放在协作分支的已配置根文件夹中:

data factory git settings

所以在我的示例中,它必须看起来像这样:

arm-template-parameters-definition.json

如果在单独的分支中工作,则可以通过从数据工厂下载手臂模板来测试配置。当您更改参数定义时,必须重新加载浏览器屏幕(f5)以刷新配置。 Data factory download arm template

如果您真的想对所有管道中的所有参数进行参数化,则应该可以执行以下操作:

"Microsoft.DataFactory/factories/pipelines": {
    "properties": {
        "parameters":{
            "*":{
                "defaultValue":"="
            }
        }
    }
}

我更喜欢指定要参数化的参数:

"Microsoft.DataFactory/factories/pipelines": {
    "properties": {
        "parameters":{
            "LogicApp_RemoveFileFromADLSURL":{
                "defaultValue":"=:-LogicApp_RemoveFileFromADLSURL:"
            },
            "LogicApp_RemoveBlob":{
                "defaultValue":"=:-LogicApp_RemoveBlob:"
            }
        }
    }
}

答案 1 :(得分:1)

仅在Simon的出色回答之上加以澄清。如果您具有非标准的git层次结构(即,将根目录移至子文件夹,如我在下面使用“源”所做的那样),则当文档引用“ repo根目录”时可能会造成混淆。希望此图对您有所帮助。

enter image description here

答案 2 :(得分:0)

以下是消除混乱的必要步骤:

  1. 将arm-template-parameters-definition.json添加到您的master分支中。
  2. 关闭并重新打开您的Dev ADF门户
  3. 执行新的发布

您的ARMTemplateParametersForFactory.json随后将被更新。

答案 3 :(得分:0)

我遇到过类似的问题,ARMTemplateParametersForFactory.json文件在发布和更改arm-template-parameters-definition.json时都不会更新。

我认为可以通过执行以下操作来强制更新Publish分支:

  1. 根据需要更新自定义参数定义文件。
  2. 从发布分支中删除ARMTemplateParametersForFactory.json
  3. 刷新(F5)数据工厂门户。
  4. 发布。

验证自定义参数.json语法的最简单方法似乎是通过导出ARM模板,就像Simon提到的那样。

答案 4 :(得分:0)

您有一个正确的想法,但是arm-template-parameters-definition.json文件需要遵循要参数化的元素的层次结构。

这是我要参数化的管道活动。 “ url”应根据其部署环境而改变

{
    "name": "[concat(parameters('factoryName'), '/ExecuteSPForNetPriceExpiringContractsReport')]",
    "type": "Microsoft.DataFactory/factories/pipelines",
    "apiVersion": "2018-06-01",
    "properties": {
        "description": "",
        "activities": [
            {
                "name": "NetPriceExpiringContractsReport",
                "description": "Passing values to the Logic App to generate the CSV file.",
                "type": "WebActivity",
                "typeProperties": {
                    "url": "[parameters('ExecuteSPForNetPriceExpiringContractsReport_properties_1_typeProperties')]",
                    "method": "POST",
                    "headers": {
                        "Content-Type": "application/json"
                    },
                    "body": {
                        "resultSet": "@activity('NetPriceExpiringContractsReportLookup').output"
                    }
                }
            }
        ]
    }
}

这是arm-template-parameters-definition.json文件,它将该URL转换为参数。

{
   "Microsoft.DataFactory/factories/pipelines": {
        "properties": {
            "activities": [{
                "typeProperties": {
                    "url": "-::string"
                }
            }]
        }
    },
    "Microsoft.DataFactory/factories/integrationRuntimes": {},
    "Microsoft.DataFactory/factories/triggers": {},
    "Microsoft.DataFactory/factories/linkedServices": {
        "*": "="
    },
    "Microsoft.DataFactory/factories/datasets": {
        "*": "="
    }
}

因此,基本上在ARM模板的管道中,它会在JSON中查找属性->活动-> typeProperties-> url并对其进行参数化。