4

在我的 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”变量。还有很多徒劳的尝试。我必须在这里遗漏一些非常明显的东西。它是什么?

4

1 回答 1

7

我无法测试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

结果如下:

Azure DevOps 日志

于 2020-04-24T01:46:02.397 回答