【问题标题】:Azure Devops YAML pipeline - how to repeat a taskAzure Devops YAML 管道 - 如何重复任务
【发布时间】:2020-08-07 10:14:18
【问题描述】:

在我的 YAML 管道中,我有一个部署工作:

- stage: deployment_to_development
  jobs:
  - deployment: deployment_to_development
    displayName: Deploy to Development
    environment: Development
    variables:
    - template: migrate-vars.yml
    strategy:
      runOnce:
        deploy:
          steps:
          - template: migrate-data.yml

部署模板是一个简单的 DbUp 任务:

steps:
  - task: UpdateDatabaseWithDbUp@2
    displayName: Migrate data
    inputs:
      ConnectionString: 'Data Source=$(DatabaseServer);Initial Catalog=$(DatabaseName);Integrated Security=SSPI'
      ScriptPath: '$(Pipeline.Workspace)\data-migrations'
      JournalSchemaName: dbo
      JournalTableName: _SchemaVersions
      LogScriptOutput: true
      IncludeSubfolders: true
      Order: FolderStructure
      TransactionStrategy: SingleTransaction

变量模板定义了服务器和数据库名称:

variables:
   DatabaseServer: 'server'
   DatabaseName: 'dbName'
   Instances: '_1,_2'

这一切都适用于单个数据库。但是,我希望对 Instances 变量中定义的每个实例重复该任务,即对于名为 dbName_1、dbName_2 的数据库。事实证明,这个看似简单的壮举很困难。

我尝试将实例作为参数数组传递并使用

对其进行迭代
parameters:
  param: []

steps:
  - ${{each p in parameters.param}}:

但任务中没有评估“p”变量。 还有很多徒劳的尝试。我必须在这里遗漏一些非常明显的东西。这是什么?

【问题讨论】:

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


    【解决方案1】:

    我无法测试UpdateDatabaseWithDbUp@2,但我知道如何解释如何实现目标。先定义template.yaml

    parameters:
    - name: 'instances'
      type: object
      default: {}
    - name: 'server'
      type: string
      default: ''
    
    steps:
    - ${{ each instance in parameters.instances }}:
      - script: echo ${{ parameters.server }}:${{ instance }}
    

    然后在您的构建中重复使用此模板:

    steps:
    - template: template.yaml
      parameters:
        instances: 
        - test1
        - test2
        server: someServer
    

    结果如下:

    【讨论】:

    • 感谢您的回答,我在那里学到了一些关于参数结构的新知识。我可以复制您的回复,但似乎破坏了我的模板,该模板现在在部署步骤中根本没有触发。我会继续修补的。
    • 现在可以正常工作了,非常感谢。我最初尝试使用问题中描述的参数数组,但这不起作用。我将其更改为您详细说明的格式,并将任务包装在“每个”块中效果很好。再次感谢。
    猜你喜欢
    • 2020-08-27
    • 2021-12-29
    • 2022-08-02
    • 2020-05-28
    • 2020-11-23
    • 2020-05-23
    • 2020-01-18
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多