【问题标题】:AzureResourceManagerTemplateDeployment fails to find template using pattern when executed in Deployment JobAzureResourceManagerTemplateDeployment 在部署作业中执行时找不到使用模式的模板
【发布时间】:2021-08-29 14:34:54
【问题描述】:

我一直在尝试使用 Azure 逻辑应用程序,并想找到一种方法来编写部署过程,以便我可以设置一个包含机密和所有好东西的 CI/CD 管道。

所以我开始使用 yml 文件,该文件具有多种部署同一个逻辑应用程序的方法。

  1. regular job 中的一个步骤中将输入参数的值硬编码到连接服务、订阅、资源组等任务中。
  2. Deployment job 内做同样的事情。
  3. 使用管道变量提取这些值并重复为 1 和 2。
  4. 再次使用 1 和 2,但这次使用标记为机密的管道变量 以此类推。

但是,每次我在部署作业中运行 AzureResourceManagerTemplateDeployment@3 时,都找不到 ARM 模板文件。

  • 为什么部署作业无法使用未作为部署作业运行时有效的模式找到 ARM 模板?
  • 部署作业是否无权访问构建目录?
  • 如何帮助部署作业找到文件?我应该给它一个指向模板文件的链接而不是一个模式吗?

每次我搜索AzureResourceManagerTemplateDeployment 任务文档时,我都会看到AzureResourceGroupDeployment 任务的文档页面,这非常相似但又不一样 https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-resource-group-deployment?view=azure-devops#troubleshooting

当我即将发布这个问题时,我在网上进行了更多搜索,发现original docs of the AzureResourceManagerTemplateDeployment 指出如果文件是存储库的一部分,则必须使用系统的帮助指定 ARM 模板的路径变量。

csmFile: "$(Build.Repository.LocalPath)/**/LogicApp.json"
csmParametersFile: "$(Build.Repository.LocalPath)/**/LogicApp.parameters.json"

我可以确认这也不起作用。

我可能会错过什么?

stages:
- stage: 'HardcodedJobStage'
  displayName: 'HardcodedJobStage'
  jobs:
  - job: 'HardcodedJob'
    displayName: HardcodedJob
    pool:
      vmImage: ubuntu-latest
      workspace:
        clean: all
    steps:
    - task: AzureResourceManagerTemplateDeployment@3
      inputs:
          deploymentScope: 'Resource Group'
          ConnectedServiceName: 'Subscription (e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d)'
          subscriptionName: 'e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d'
          action: 'Create Or Update Resource Group'
          resourceGroupName: 'AzureLogicApp'
          location: 'UK South'
          templateLocation: 'Linked artifact'
          csmFile: '**/LogicApp.json'
          csmParametersFile: '**/LogicApp.parameters.json'
          deploymentMode: 'Incremental'

- stage: 'HardCodedDeployJobStage'
  displayName: 'HardCodedDeployJobStage'
  jobs:
  - deployment: 'HardCodedDeployJob'
    displayName: HardCodedDeployJob
    pool:
      vmImage: ubuntu-latest
      workspace:
        clean: all
    environment: development
    strategy:
     runOnce:
       deploy:
         steps:
         - task: AzureResourceManagerTemplateDeployment@3
           inputs:
              deploymentScope: 'Resource Group'
              ConnectedServiceName: 'Subscription (e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d)'
              subscriptionName: 'e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d'
              action: 'Create Or Update Resource Group'
              resourceGroupName: 'AzureLogicApp'
              location: 'UK South'
              templateLocation: 'Linked artifact'
              csmFile: '**/LogicApp.json'
              csmParametersFile: '**/LogicApp.parameters.json'
              deploymentMode: 'Incremental'

【问题讨论】:

    标签: azure azure-devops azure-pipelines-yaml azure-pipelines-tasks


    【解决方案1】:

    这里的问题是我必须将模板发布为工件并在各个阶段之间共享。

    所以我使用CopyFiles 任务将ARM 模板json 文件复制到一个文件夹,然后使用PublishPipelineArtifact 任务将内容发布为管道工件。然后可以在后面的阶段使用DownloadPipelineArtifact 任务来引用它。

    现在我的 YAML 看起来像:

    stages:
    - stage: 'HardcodedJobStage'
      displayName: 'HardcodedJobStage'
      jobs:
      - job: 'HardcodedJob'
        displayName: HardcodedJob
        pool:
          vmImage: ubuntu-latest
          workspace:
            clean: all
        steps:
        - task: AzureResourceManagerTemplateDeployment@3
          inputs:
              deploymentScope: 'Resource Group'
              ConnectedServiceName: 'Subscription (e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d)'
              subscriptionName: 'e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d'
              action: 'Create Or Update Resource Group'
              resourceGroupName: 'AzureLogicApp'
              location: 'UK South'
              templateLocation: 'Linked artifact'
              csmFile: '**/LogicApp.json'
              csmParametersFile: '**/LogicApp.parameters.json'
              deploymentMode: 'Incremental'
        
        - task: CopyFiles@2
          inputs:
            Contents: $(Build.SourcesDirectory)/AzureLogicApp/**/*.json
            targetFolder: $(Build.ArtifactStagingDirectory)
        
        - task: PublishPipelineArtifact@1
          inputs:
            targetPath: $(Build.ArtifactStagingDirectory)
            artifactName: armtemplate
            
    - stage: 'HardCodedDeployJobStage'
      displayName: 'HardCodedDeployJobStage'
      jobs:
      - deployment: 'HardCodedDeployJob'
        displayName: HardCodedDeployJob
        pool:
          vmImage: ubuntu-latest
          workspace:
            clean: all
        environment: development
        strategy:
         runOnce:
           deploy:
             steps:
             - task: DownloadPipelineArtifact@2
               inputs:
                 artifact: armtemplate
    
             - task: AzureResourceManagerTemplateDeployment@3
               inputs:
                  deploymentScope: 'Resource Group'
                  ConnectedServiceName: 'Subscription (e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d)'
                  subscriptionName: 'e6d1dg8c-bcd6-4713-b2f1-c9a0375d687d'
                  action: 'Create Or Update Resource Group'
                  resourceGroupName: 'AzureLogicApp'
                  location: 'UK South'
                  templateLocation: 'Linked artifact'
                 csmFile: $(Pipeline.Workspace)/armtemplate/**/LogicApp.json
                 csmParametersFile: $(Pipeline.Workspace)/armtemplate/**/LogicApp.parameters.json
                  deploymentMode: 'Incremental'
    

    【讨论】:

      猜你喜欢
      • 2019-02-07
      • 2022-01-11
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多