Я не могу понять, как переопределить глобальные параметры в моем конвейере CI/CD для ADF.
Я добавил TEST_PARAMETER
, и когда я развертываю свое объявление с помощью следующей задачи:
- 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, ...
но моего параметра нет в "параметрах, определенных в шаблоне"...
Я включил Include global parameters in ARM template
, как предложил Microsoft, на экране Arm Template ADF.
Я вижу, что глобальные параметры видны в 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": { "тип": "строка", "defaultValue": ""123"" },
но в файле ниже все еще отсутствуют эти глобальные параметры:
ARMTemplateParametersForFactory.json
Publish_config.json также, похоже, отражает необходимость включения глобальных параметров:
{"publishBranch":"my-publish-branch","includeGlobalParamsTemplate":true}
Я чувствую себя потерянным, так как не уверен, чего мне здесь не хватает... Это конфигурация «arm-template-parameters-definition.json» или, может быть, что-то еще?
Судя по дальнейшим обсуждениям, при добавлении новых глобальных параметров ADF и последующей отправке изменений в ветку публикации GIT узел parameters
в файле шаблона ARMTemplateForFactory.json
не будет заполнен, что привело к ошибке во время развертывания ARM.
Я мог бы воспроизвести проблему, если бы в студии arm-template-parameters-definition.json
в ADF не было блока ниже.
,
"Microsoft.DataFactory/factories/globalparameters": {
"properties": {
"globalParameters": {
"*": {
"value": " = "
}
}
}
}
Добавление этих строк путем перехода в студию ADF -> Управление -> Шаблон ARM -> Изменить конфигурацию параметров и нажатием кнопки «Изменить» может решить проблему.
Прежде чем публиковать шаблоны в репозиториях GIT, мы можем экспортировать и загрузить файл шаблона ARM, чтобы дважды проверить, заполнены ли необходимые параметры/ресурсы.
Это была ожидаемая ошибка, когда вы пытались переопределить значение параметра шаблона ARM, но этот параметр не был заявлен в узле parameters
в файле шаблона ARM.
Поскольку файл шаблона ARM ARMTemplateForFactory.json
и файл параметров ARMTemplateParametersForFactory.json
должны быть обновлены операциями в студии ADF, вот шаги для справки, чтобы убедиться, что Test_Global_Parameter
определен первым, а затем его можно переопределить во время развертывания ARM.
To Include global parameters in ARM template and then Publish the change to the ARM template file in the adf_publish
branch, will only add the modification in the resources
node of the ARM template file but NOT populate any update in the parameters
node;
We can add a new Test_Global_Parameter
and then Publish the change again to make sure the parameters
node in the ARMTemplateForFactory.json
file is updated and the ARMTemplateParametersForFactory.json
file is also synchronized with a default value for Test_Global_Parameter
;
Then you may proceed to test the ARM deployment with the latest version of this ARM template and to override the Test_Global_Parameter
value via a pipeline workflow;
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"
Нам нужно «опубликовать», чтобы он мог заполнить этот новый параметр в шаблоне ARM. Согласно вашей проблеме в этом посте, она касается только файла шаблона ARM и файла параметров в ветке adf_publish
. вы можете узнать больше о развертывании ARM, чтобы лучше понять проблему. Надеюсь, ответ поможет решить эту проблему.
Итак, я думаю, что здесь все еще нет проблемы, и это меня беспокоит. Я проверил «включить глобальные параметры в шаблон руки» и нажал «Опубликовать». Затем я добавил новый глобальный параметр и снова нажал «Опубликовать». Все мои глобальные параметры по-прежнему отсутствуют в ARMTemplateParametersForFactory.json... Новый параметр виден в test_global_params_GlobalParameters.json в моей ветке публикации, а также виден в ARMTemplateForFactory.json, но все еще находится в разделе ресурсов.... Что здесь не так?
Можете ли вы дважды проверить, интегрирован ли ваш ресурс ADF с тем же репозиторием GIT, что и ваш конвейер YAML? Перенесено ли изменение в какой-либо другой репозиторий или ветку GIT?
Я добавил еще один тестовый параметр и снова опубликовал git, и все файлы в моей ветке публикации были обновлены, за исключением ARMTemplateParametersForFactory.json. Почему? Возможно ли, что файл Arm-template-parameters-definition.json каким-то образом влияет на это?
Итак, Test_Glabal_Parameter
был добавлен в узел parameters
в файле ARMTemplateForFactory.json
?
ARMTemplateParametersForFactory.json
содержит только значения по умолчанию из исходного ресурса ADF. Даже если Test_Glabal_Parameter
не был добавлен в этот ARMTemplateParametersForFactory.json
файл, его значение можно переопределить во время развертывания ARM.
Ошибка в этом посте все еще существует?
В этом и проблема, она по-прежнему добавляется в разделе "Ресурсы", а не параметры... Почему? Это из-за моей конфигурации параметров? Я вижу строку ниже: { "Microsoft.DataFactory/factories": { "properties": { "globalParameters": { "*": { "value": " = " } } }, "location": "= " } в файле Arm-template-parameters-definition.json.
У меня даже нет этого arm-template-parameters-definition.json
файла в моей adf_publish
ветке.
Это не ветка публикации, она доступна в ADF Studio. Таким образом, текущая проблема, похоже, заключается в том, что глобальные параметры по-прежнему определяются в ресурсах, а не в параметрах в ARMTemplateForFactory.json, даже когда я добавил второй параметр и снова нажал кнопку «Опубликовать».
Что вы имеете в виду, что этого нет в ветке публикации? Когда вы нажимаете кнопку Publish
, изменения должны быть обновлены в шаблоне и файле параметров в ветке публикации, по умолчанию adf_publish
.
Или, скажем, вы не хотите использовать шаблоны в ветке публикации для развертывания ресурса ADF?
Можете ли вы дважды проверить, обновлены ли файлы шаблонов и параметров ARM в вашей ветке публикации ADF (ветвь adf_publish
по умолчанию)?
Да, когда я нажимаю Pubslih, ветка adf_publish обновляется, но проблема в том, что глобальные параметры по-прежнему добавляются в ресурсы в json, а не в параметры...
Я не могу воспроизвести такое поведение. Что, если вы протестируете новый экземпляр ADF, интегрированный с новым репозиторием GIT?
Также попробуйте перейти в студию ADF -> Mange -> Шаблон ARM -> Изменить конфигурацию параметров и нажать «Изменить» -> Проверить, есть ли строки: «Microsoft.DataFactory/factories/globalparameters»: { «properties»: { " *": { "value": " = " } } }
Хм, для меня эта строка выглядит немного иначе.... { "Microsoft.DataFactory/factories": { "properties": { "globalParameters": { "*": { "value": " = " } } }, "location": " = " },
ОК, после того, как я добавил "Microsoft.DataFactory/factories/globalparameters": { "properties": { "*": { "value": " = " } } } глобальные параметры начали отображаться так, как должны.... Я думал, что «включение глобальных параметров в шаблон ARM должно как-то автоматически это объявить…
Я могу воспроизвести проблему только без этих строк.
Хорошо, хорошо, после того, как я добавил "Microsoft.DataFactory/factories/globalparameters": { "properties": { "*": { "value": " = " } } } глобальные параметры начали отображаться так, как должны.. .. Я думал, что «включение глобальных параметров в шаблон ARM должно как-то автоматически это объявить…
Не знаю, почему в вашей студии arm-template-parameters-definition.json
в ADF не было этого блока Microsoft.DataFactory/factories/globalparameters
, но добавление этих строк решило проблему, верно?
Хм, хорошо, я попробую, но действителен ли этот сценарий при использовании пакета ADF npm? Я подумал, что в этом случае нажимать «Опубликовать» особо не нужно.