从外部存储库使用ARM模板

时间:2019-08-22 10:34:18

标签: azure-devops yaml azure-resource-manager multistage-pipeline

我正在使用蔚蓝的多级管道,在单独的存储库中使用带有模板的部署作业。我目前正在开始在部署过程中使用ARM模板,并且还希望运行位于不同存储库中的ARM模板。这是我遇到困难的地方,任何帮助/建议都值得赞赏。

为说明我的设置,

  • 回购A ->必须构建并部署到Azure的源代码
  • 存储库B -> Azure管道模板(仅包含yml文件)
  • 存储库-> ARM模板

所以我要完成的事情: A 使用 B 使用 C

REPA A:文档构建和发布yml

resources:
  repositories:
    - repository: templates
      type: git
      name: <ACCOUNT>/Azure.Pipelines.Templates
      ref: refs/tags/2.2.40

stages:
  - stage: Build
    jobs:
      - template: src/jobs/doc-build.yml@templates

  - stage: DEV
    jobs:
      - template: src/deployment-jobs/doc.yml@templates
    ....

REPO B:文档部署

parameters:
  webAppName: ''
  connectedServiceName: 'DEV'

jobs:
  - deployment: doc_deploy
    pool:
      name: 'DOC'
    environment: 'doc'
    strategy:
      runOnce:
        deploy:
          steps:
            - template: ../deployment/arm-template.yml
              parameters:
                connectedServiceName: ${{ parameters.connectedServiceName }}
                resourceGroupName: 'documentation'
                templateFile: $(Build.SourcesDirectory)/Azure.ARM.Templates/src/web-app/documentation.jsonc
                paramFile: $(Build.SourcesDirectory)/Azure.ARM.Templates/src/web-app/documentation-params.json
                parameters: -name ${{ parameters.webAppName }}
            ...

REPO C:包含手臂模板+参数文件

我面临的问题是我似乎无法获取仓库的文件。我尝试在多个级别上添加另一个repository条目,但它似乎根本没有克隆从属存储库。

我当前的解决方法/解决方案:

使用powershell脚本手动克隆repo C并直接引用磁盘上的文件。

相关的github问题:https://github.com/microsoft/azure-pipelines-yaml/issues/103

1 个答案:

答案 0 :(得分:2)

我也偶然发现了这个问题,不得不将手臂模板从另一个仓库加载到当前版本中。我所做的是在包含arm模板的仓库上建立构建,并通过以下azure-pipelines.yml生成构建工件:(这将是您的仓库c)

trigger:
- master

steps:
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/templates'
    ArtifactName: 'templates'
    publishLocation: 'Container'

然后,我可以将以下步骤添加到实际管道中:

- task: DownloadPipelineArtifact@2
            displayName: 'Get ARM Templates'
            inputs:
              buildType: 'specific'
              project: <YOUR-PROJECT-ID>'
              definition: '<ARM-BUILD-DEFINITION-ID>'
              buildVersionToDownload: 'latest'
              artifactName: 'scripts'
              targetPath: '$(Pipeline.Workspace)/templates'

我可以按以下方式访问文件:

- task: AzureResourceGroupDeployment@2
            displayName: 'Create Queues $(ResourceGroup.Name) '
            inputs:
              azureSubscription: '<YOUR-SUBSCRIPTION>'
              resourceGroupName: '$(ResourceGroup.Name)'
              location: '$(ResourceGroup.Location)'
              csmFile: '$(Pipeline.Workspace)/templates/servicebus.json'

有关“下载管道工件”任务的更多信息,请查看以下链接: Download Pipeline Artifact task