Azure Pipeline -作业依赖于上一个作业,但上一个作业是基于参数数组的循环的一部分

bq9c1y66  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(169)

我有这样的东西:

- ${{ each workItem in parameters.workList }}:
    - job: '{{workItem.Name}}_${{ parameters.poolObj.Name }}_${{ parameters.agentName }}'
        ...

   - job: 'Clean_up':
        ...

如何使Clean_up取决于上一个作业,因为上一个作业是动态的。
谢谢。

z31licg0

z31licg01#

首先,我想指出的是,可以为每个作业定义自定义displayName。该值将在每次运行时显示。默认情况下,它与id相同。在您的示例中,您使用了复杂的id值,这将使解决方案更加复杂。
下面是一个简单的场景:

parameters:
  - name: workList
    type: object
    default: [FirstThing, SecondThing, ThirdThing]
  - name: poolObj
    default: MyMachines
  - name: agentName
    default: customAgent

jobs:
  - ${{ each workItem in parameters.workList }}:
    - job: '${{workItem}}'
      steps:
        - script: echo 'Doing some things...'
      displayName: ${{workItem}}_${{ parameters.poolObj }}_${{ parameters.agentName }}

  - job: cleanup
    dependsOn: ${{ parameters.workList }}
    steps:
      - script: echo doing cleanup

在上面的示例中,我将循环中作业的id仅更改为workItem。这仍然会产生唯一的作业id,因为poolObjagentName参数不依赖于当前的workItem。但它仍然会在运行结果中显示全名。
cleanup作业依赖于整个workList数组,并且它将工作,因为所有作业都具有与该数组中的项相同的ID。
这将是更复杂的解决方案,如果出于某种原因,我们将使用的作业ID是连接的几个参数的结果。

parameters:
  - name: workList
    type: object
    default: [FirstThing, SecondThing, ThirdThing]
  - name: poolObj
    default: MyMachines
  - name: agentName
    default: customAgent

jobs:
  - ${{ each workItem in parameters.workList }}:
    - job: '${{workItem}}_${{ parameters.poolObj }}_${{ parameters.agentName }}'
      steps:
        - script: echo '${{workItem}}_${{ parameters.poolObj }}_${{ parameters.agentName }}'

  - job: cleanup
    dependsOn: ${{ split(format('{0}_{1}_{2}', join(format('_{0}_{1};', parameters.poolObj, parameters.agentName), parameters.workList), parameters.poolObj, parameters.agentName), ';') }}
    steps:
      - script: echo doing cleanup

在这里,我加入参数数组并将其拆分回来以生成转换后的数组。

相关问题