全局参数没有出现在ARMTemplateParametersForFactory.json中

问题描述 投票:0回答:1

我不知道如何覆盖 ADF 的 CI/CD 管道中的全局参数。 我添加了

TEST_PARAMETER
,当我使用以下任务部署 adf 时:

- task: AzureResourceManagerTemplateDeployment@3
retryCountOnTaskFailure: ${{ parameters.arm_template_deployment_retry_count }}
continueOnError: false
inputs:
  deploymentScope: 'Resource Group'
  azureResourceManagerConnection: ${{ parameters.deployment_service_connection }}
  subscriptionId: $(global.subscription.id)
  action: 'Create Or Update Resource Group'
  resourceGroupName: $(global.resourceGroup.name)
  location: $(global.location.primary)
  templateLocation: 'Linked artifact'
  csmFile: '$(Build.SourcesDirectory)/adf/ARMTemplateForFactory.json'
  csmParametersFile: '$(Build.SourcesDirectory)/adf/ARMTemplateParametersForFactory.json'
  overrideParameters: >
    -dataFactory_properties_globalParameters_TEST_PARAMETER_value "111"

我收到以下错误:

There was an error while overriding 'dataFactory_properties_globalParameters_TEST_PARAMETER_value' parameter because of 'TypeError: Cannot read properties of undefined (reading 'type')', make sure it follows JavaScript Object Notation (JSON)

Starting template validation.
Deployment name is ARMTemplateForFactory-20240708-211103-e1c1
There were errors in your deployment. Error code: InvalidTemplate.
##[error]Deployment template validation failed: 'The following parameters were supplied, but do not correspond to any parameters defined in the template: 'dataFactory_properties_globalParameters_TEST_PARAMETER_value'. The parameters defined in the template are: 'factoryName, ...

但是我的参数不在“模板中定义的参数”中...

我已按照 Microsoft 在 Arm Template ADF 屏幕上的建议启用了

Include global parameters in ARM template

我可以看到全局参数在 ARMTemplateForFactory.json 中可见,但是...我仍然无法覆盖它们,因为它们不存在于

ARMTemplateParametersForFactory.json
中。 我可以看到在我的 adf 的根文件夹中我有文件
arm-template-parameters-definition.json
并且该文件的开头如下所示

{
    "Microsoft.DataFactory/factories": {
        "properties": {
            "globalParameters": {
                "*": {
                    "value": "="
                }
            }
        },
        "location": "="
    },

我还从 ADF 中进行了导出,下面的文件包含了这些全局参数:

ARMTemplateForFactory.json
MyADF_ARMTemplateForFactory.json
MyADF_ARMTemplateParametersForFactory.json

在ARMTTemplateForFactory.json中,我可以看到定义的全局参数:

...
        },
        {
            "name": "[concat(parameters('factoryName'), '/default')]",
            "type": "Microsoft.DataFactory/factories/globalparameters",
            "apiVersion": "2018-06-01",
            "properties": {
                "TEST_PARAMETER": {
                    "type": "string",
                    "value": "\"123\""
                }
...

但是说实话,我希望在参数而不是资源下看到它。为什么它被定义为资源而不是参数?

我可以看到我的测试全局参数定义为: “dataFactory_properties_globalParameters_TEST_PARAMETER_value”:{ “类型”:“字符串”, “默认值”:“123” },

但下面的文件仍然缺少那些全局参数:

ARMTemplateParametersForFactory.json

Publish_config.json 似乎也反映出应包含全局参数:

{"publishBranch":"my-publish-branch","includeGlobalParamsTemplate":true}

我感到迷失,因为我不确定我在这里缺少什么......是“arm-template-parameters-definition.json”配置还是其他什么?

azure azure-devops azure-data-factory devops
1个回答
0
投票

当您尝试覆盖 ARM 模板参数值但未在模板文件的

parameters
节点中声明该参数时,这是预期的错误。

由于 ARM 模板文件

ARMTemplateForFactory.json
和参数文件
ARMTemplateParametersForFactory.json
需要通过 ADF studio 中的操作来更新,所以这里的步骤供您参考,确保先定义
Test_Global_Parameter
,然后再进行定义。在 ARM 部署期间被覆盖。

  1. 若要在 ARM 模板中包含全局参数,然后在 adf_publish 分支中

    发布
    对 ARM 模板文件的更改,将在 ARM 模板文件的
    resources
    节点中添加修改,但 NOT 填充
    parameters
    节点中的任何更新;

    enter image description here

  2. 我们可以添加一个新的

    Test_Global_Parameter
    ,然后再次发布更改,以确保
    parameters
    文件中的
    ARMTemplateForFactory.json
    节点已更新,并且
    ARMTemplateParametersForFactory.json
    文件也与
    Test_Global_Parameter的默认值同步
    ; enter image description here

    Image

    Image

  3. 然后您可以继续使用此 ARM 模板的最新版本测试 ARM 部署,并通过管道工作流程覆盖

    Test_Global_Parameter
    值;

    parameters:
    - name: arm_template_deployment_retry_count
      type: number
      default: 1
    
    - name: deployment_service_connection
      default: ARMSvcCnnSub0
    
    - name: source_adf
      default: azdatafactory-instance0
      values:
      - azdatafactory-instance0
      - azdatafactory-instance1
    
    variables:
      global.subscription.id: $(sub0)
      global.resourceGroup.name: rg-azdatafactory-instance0
      global.location.primary: southeastasia
      adf: ${{ parameters.source_adf }}
    
    trigger:
    - adf_publish
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureResourceManagerTemplateDeployment@3
      retryCountOnTaskFailure: ${{ parameters.arm_template_deployment_retry_count }}
      continueOnError: false
      inputs:
        deploymentScope: 'Resource Group'
        azureResourceManagerConnection: ${{ parameters.deployment_service_connection }}
        subscriptionId: $(global.subscription.id)
        action: 'Create Or Update Resource Group'
        resourceGroupName: $(global.resourceGroup.name)
        location: $(global.location.primary)
        templateLocation: 'Linked artifact'
        csmFile: '$(Build.SourcesDirectory)/$(adf)/ARMTemplateForFactory.json'
        csmParametersFile: '$(Build.SourcesDirectory)/$(adf)/ARMTemplateParametersForFactory.json'
        overrideParameters: >
          -default_properties_Test_Global_Parameter_value "111"
        # -factoryName "azdatafactory-newinstance"
    

    enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.