我不知道如何覆盖 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”配置还是其他什么?
当您尝试覆盖 ARM 模板参数值但未在模板文件的
parameters
节点中声明该参数时,这是预期的错误。
由于 ARM 模板文件
ARMTemplateForFactory.json
和参数文件 ARMTemplateParametersForFactory.json
需要通过 ADF studio 中的操作来更新,所以这里的步骤供您参考,确保先定义 Test_Global_Parameter
,然后再进行定义。在 ARM 部署期间被覆盖。
若要在 ARM 模板中包含全局参数,然后在 adf_publish
分支中
发布对 ARM 模板文件的更改,将仅在 ARM 模板文件的
resources
节点中添加修改,但 NOT 填充 parameters
节点中的任何更新;
我们可以添加一个新的
Test_Global_Parameter
,然后再次发布更改,以确保parameters
文件中的ARMTemplateForFactory.json
节点已更新,并且ARMTemplateParametersForFactory.json
文件也与Test_Global_Parameter
的默认值同步
;
然后您可以继续使用此 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"