Azure DevOps YAML管道 - 如何重复执行任务

7
在我的 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'变量。 已经有许多徒劳的尝试了。我一定是漏掉了非常明显的东西。是什么呢?

1个回答

11

我不能测试 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 日志


谢谢你的回答,我学到了一些关于参数结构的新知识。我可以复制你的回答,但似乎在部署步骤中我的模板出现了问题,现在根本没有触发。我会继续尝试修复它。 - semprini
现在已经解决了,非常感谢。我最初尝试使用问题中描述的参数数组,但那并没有起作用。我按照您详细说明的格式进行了更改,并将任务包装在“each”块中,效果非常好。再次感谢。 - semprini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接