如何使 yaml 管道 dependson 在上一个循环的上下文中工作?

How do I make a yaml pipeline dependson work in the context of a previous loop?

我希望能够通过数组工作.. 运行 作业无论多少次(与数组中的项目一样多)- 但我需要下一个作业取决于上一个作业.

如何将数组中最后一个元素的值放入下一个作业的dependsOn:参数中??有可能吗?如果不是那么我如何让下一个工作依赖于上一个工作的最后一个 运行 的成功?

parameters:
- name: solutionName
  type: object
  default: ['entry1', 'entry2']

variables:
- group: 'Key Vault Test'
- name: Var1
  value: 'lol'


trigger:
- main

jobs:
- ${{each Solution in parameters.SolutionName}}:
  - job: Job_${{Solution}}
    displayName: ${{Solution}}
    pool:
      vmImage: ubuntu-latest
    steps: 
    - script: |
        echo $(Var1)
        echo ${{Solution}}
        echo ${{join(' ',parameters.SolutionName)}}

- job: Job_2
  dependsOn: HOW_DO_I_PUT_JOB_NAME_IF_I_DONT_KNOW_IT
  displayName: Job2
  pool:
    vmImage: ubuntu-latest
  steps:
  - script: |
      echo 'Second Job'

${{parameters.SolutionName}}object类型,关键字dependsOn不接受(它接受string),要指定作业名称,需要使用下面格式取决于之前的作业。

- job: Job_2
  dependsOn: 
    - Job_${{parameters.SolutionName[0]}}   # it points to the 1st job
    - Job_${{parameters.SolutionName[1]}}   # it points to the 2nd job
  displayName: Job2
  pool:
    vmImage: ubuntu-latest
  steps:
  - script: |
      echo 'Second Job'

或者你可以把Job_2放到一个新的阶段。

stages:
  - stage: stage1
    jobs:
    - ${{each Solution in parameters.SolutionName}}:
      - job: Job_${{Solution}}
        displayName: ${{Solution}}
        pool:
          vmImage: ubuntu-latest
        steps: 
        - script: |
            echo $(Var1)
            echo ${{Solution}}
            echo ${{join(' ',parameters.SolutionName)}}
  - stage: stage2
    dependsOn: stage1   # depends on stage instead.
    jobs:
    - job: Job_2
      displayName: Job2
      pool:
        vmImage: ubuntu-latest
      steps:
      - script: |
          echo 'Second Job'

您可以使用另一个 each 来定义第二个作业中的依赖项列表:

jobs:
- ${{each Solution in parameters.SolutionName}}:
  - job: Job_${{Solution}}
    displayName: ${{Solution}}
    pool:
      vmImage: ubuntu-latest
    steps: 
    - script: |
        echo $(Var1)
        echo ${{Solution}}
        echo ${{join(' ',parameters.SolutionName)}}

- job: Job_2
  dependsOn:
    - ${{each Solution in parameters.SolutionName}}:
      - Job_${{Solution}}
  displayName: Job2
  pool:
    vmImage: ubuntu-latest
  steps:
  - script: |
      echo 'Second Job'

请注意,第一个 each 循环中的 'last' 作业不是确定的;这些作业都将 运行 并行进行,因此它们中的任何一个都可能首先或最后完成。所以为了让你的第二份工作等待它们全部完成,它需要对它们中的每一个都有明确的依赖。