覆盖Azure DevOps管道中的ADF触发器运行时状态参数

ca1c2owp  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(163)

我们希望采取一项临时措施,即在QA环境中保持ADF触发器停止,但在生产环境中保持其启动。
我试图在我们的Azure DevOps管道中覆盖此参数,我们已经为QA和生产定义了变量。
我遵循了与覆盖其他参数相同的语法,但当Azure DevOps进行部署时(成功构建)会出现以下错误:

[error]部署模板验证失败:“parameters文件中的模板参数'TriggerName_properties_runtimeState'无效;它们不存在于原始模板中,因此无法在部署时提供。此模板唯一支持的参数是....有关用法详细信息,请参阅https://aka.ms/arm-pass-parameter-values。”

这就是我的模板deploy-adf.yml中的内容:

  1. parameters:
  2. ...
  3. - name: triggerNameTriggerRunState
  4. type: string
  5. jobs:
  6. - deployment: Deploy_${{ parameters.environment }}
  7. strategy:
  8. runOnce:
  9. deploy:
  10. steps:
  11. ...
  12. - task: AzureResourceManagerTemplateDeployment@3
  13. displayName: 'Deploying to ${{ parameters.environment }}'
  14. inputs:
  15. deploymentScope: 'Resource Group'
  16. azureResourceManagerConnection: ${{ parameters.serviceConnection }}
  17. subscriptionId: '$(subscriptionId)'
  18. action: 'Create Or Update Resource Group'
  19. resourceGroupName: '${{ parameters.adfResourceGroupName }}'
  20. location: '$(location)'
  21. templateLocation: 'Linked artifact'
  22. csmFile: '$(Pipeline.Workspace)/build/adf-artifact-${{ parameters.version}}/ARMTemplateForFactory.json'
  23. csmParametersFile: '$(Pipeline.Workspace)/build/adf-artifact-${{ parameters.version}}/ARMTemplateParametersForFactory.json'
  24. overrideParameters: >-
  25. ...
  26. -TriggerName_properties_runtimeState "${{ parameters.triggerNameTriggerRunState }}"
  27. deploymentMode: 'Incremental'

字符串
如上所述,它成功构建,但是当我查看ARMTemplateForFactory.json生成的Artifacts文件时:

  1. {
  2. "name": "[concat(parameters('factoryName'), '/TriggerName')]",
  3. "type": "Microsoft.DataFactory/factories/triggers",
  4. "apiVersion": "2018-06-01",
  5. "properties": {
  6. "annotations": [],
  7. "runtimeState": "Started",
  8. "pipelines": [
  9. {
  10. "pipelineReference": {
  11. "referenceName": "Pipeline name",
  12. "type": "PipelineReference"
  13. },
  14. "parameters": {
  15. "sourceFolder": "[parameters('TriggerName_properties_Pipeline name_parameters_sourceFolder')]",
  16. "sourceFile": "[parameters('TriggerName_properties_Pipeline name_parameters_sourceFile')]"
  17. }
  18. }
  19. ],
  20. "type": "BlobEventsTrigger",
  21. "typeProperties": {
  22. "blobPathBeginsWith": "/container/blobs/sub_directory",
  23. "ignoreEmptyBlobs": true,
  24. "scope": "[parameters('TriggerName_properties_typeProperties_scope')]",
  25. "events": [
  26. "Microsoft.Storage.BlobCreated"
  27. ]
  28. }
  29. },
  30. "dependsOn": [
  31. "[concat(variables('factoryId'), '/pipelines/Pipeline name')]"
  32. ]
  33. },


我注意到runtimeState没有被参数化。我不太确定这个文件是如何生成的。这是否意味着不可能覆盖runtimeState?或者在构建文件中缺少一些我需要做的事情。
请注意,这是我们的Azure Devops构建文件的摘录:

  1. ...
  2. variables:
  3. - template: ./vars/vars.qa.yml
  4. stages:
  5. - stage: Build_And_Publish_ADF_Artifacts
  6. displayName: "Build and publish ADF"
  7. jobs:
  8. - job: Build_Adf_Arm_Template
  9. displayName: "Build ADF ARM template"
  10. steps:
  11. - checkout: self
  12. persistCredentials: "true"
  13. fetchDepth: 0
  14. - task: gitversion/setup@0
  15. displayName: GitVersion setup
  16. inputs:
  17. versionSpec: "5.x"
  18. - task: gitversion/execute@0
  19. displayName: Determine next version
  20. name: Version
  21. - script: |
  22. echo ##vso[build.updatebuildnumber]$(SEMVER)
  23. echo ##vso[task.setvariable variable=imageTag;isOutput=true]$(SEMVER)
  24. displayName: Update Build Number
  25. name: buildNumber
  26. - task: NodeTool@0
  27. inputs:
  28. versionSpec: "16.x"
  29. displayName: "Install Node.js"
  30. - task: Npm@1
  31. inputs:
  32. command: "install"
  33. workingDir: "$(Build.SourcesDirectory)/data_factory"
  34. verbose: true
  35. displayName: "Install NPM Package"
  36. - task: Npm@1
  37. displayName: "Validate ADF Code"
  38. inputs:
  39. command: "custom"
  40. workingDir: "$(Build.SourcesDirectory)/data_factory"
  41. customCommand: "run build validate $(Build.SourcesDirectory)/data_factory $(adfResourceId)"
  42. - task: Npm@1
  43. displayName: "Validate and Generate ARM template"
  44. inputs:
  45. command: "custom"
  46. workingDir: "$(Build.SourcesDirectory)/data_factory"
  47. customCommand: 'run build export $(Build.SourcesDirectory)/data_factory $(adfResourceId) "ArmTemplate"'
  48. - task: PublishPipelineArtifact@1
  49. displayName: Download Build Artifacts - ADF ARM templates
  50. inputs:
  51. targetPath: "$(Build.SourcesDirectory)/data_factory/ArmTemplate" #replace with the package.json folder.
  52. artifact: "adf-artifact-$(Build.BuildNumber)"
  53. publishLocation: "pipeline"
  54. ...

lokaqttq

lokaqttq1#

当ARMTemplateParametersForFactory.json(ARM模板参数文件)和ARMTemplateParametersForFactory.json ARM模板文件中指定的参数不匹配时,会发生此问题。
参数文件中的TriggerName_properties_runtimeState无效。您需要在ARM模板的parameters部分中检查是否指定或使用了此参数。
如果参数是在参数文件中定义的,而不是在主模板中使用。它将显示此错误。
我可以复制类似的问题。


的数据
要解决此问题,您可以在ARMTemplateParametersForFactory.json文件中定义参数。
举例来说:
参数文件:

  1. {
  2. "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  3. "contentVersion": "1.0.0.0",
  4. "parameters": {
  5. "TriggerName_properties_runtimeState":{
  6. "value":"Started"
  7. }
  8. }
  9. }

字符串
主模板:

  1. {
  2. "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  3. "contentVersion": "1.0.0.0",
  4. "parameters": {
  5. "TriggerName_properties_runtimeState": {
  6. "type": "string",
  7. "defaultValue": "Started"
  8. },
  9. }
  10. .....


如果您没有在模板中使用此参数,请将其从参数文件ARMTemplateParametersForFactory.json中删除,它应该可以修复此问题。
要获取更多关于ARM模板参数的信息,您可以参考此文档:Tutorial: Use parameter files to deploy your ARM template

展开查看全部

相关问题