Jak mogę dynamicznie opisywać zadania w Azure DevOps?

0

Pytanie

Mam kilka zadań dla różnych platform, które chciałbym wykonywać równolegle. Chciałbym założyć inny zestaw platform do różnych sytuacji (na przykład, kompletny zespół, dym, żądanie na rozciąganie, itp.). Jak mogę zrobić listę zadań dynamicznym na podstawie zmiennych?

Na przykład, jeśli jest to jeden z "ściśle zaprogramowanych" implementacji:

jobs:

- job: Platform1
  pool: Pool1
  steps:
      - template: minimal_template.yml
        parameters:
          BuildTarget: Platform1

- job: Platform2
  pool: Pool1
  steps:
      - template: minimal_template.yml
        parameters:
          BuildTarget: Platform2
        
- job: Platform3
  pool: Pool2
  steps:
      - template: minimal_template.yml
        parameters:
          BuildTarget: Platform3

Jak mógłbym zamiast tego wyodrębnić zbiór zestawów zmiennych, Tj.

[[Platform1, Pool1], [Platform2, Pool1], [Platform3, Pool2]]

I wykonaj to na taśmie produkcyjnej, takim jak:

jobs:

??(Foreach platform in platforms)??

- job: $(platform[0])
  pool: $(platform[1])
  steps:
      - template: minimal_template.yml
        parameters:
          BuildTarget: $(platform[0])
azure-devops azure-pipelines
2021-11-24 00:29:59
3

Najlepsza odpowiedź

2

Można określić ją w parameters i powtarzać go:

parameters:
  - name: Platforms
    type: object
    default:
      - name: 'Platform1'
        pool: 'Platform1Pool'
      - name: 'Platform2'
        pool: 'Platform2Pool'
jobs:
- ${{ each platform in parameters.Platforms}}:        
  - job: ${{ platform.name }}
     pool: ${{ platform.pool }}
     steps:
         - template: minimal_template.yml
2021-11-30 07:41:07

Każde słowo kluczowe jest opisane w dokumentach tutaj: docs.microsoft.com/en-us/azure/devops/pipelines/process/...
Vince Bowdren

To jest to, co ja w końcu wykorzystał, jednak postawiłem jobs: nad each platform. Dziękuję!
House

@Dom, masz rację! Poprawiłem swój składnia.
Shayki Abramczyk
1

Można również użyć typu "Lista ofert" dla parametrów szablonu:

parameters:
- name: 'testsJobsList'
  type: jobList
  default: []

jobs:
- ${{ each job in parameters.testsJobsList }}: # Each job
  - ${{ each pair in job }}:          # Insert all properties other than "steps"
      ${{ if ne(pair.key, 'steps') }}:
        ${{ pair.key }}: ${{ pair.value }}
    steps:                            # Wrap the steps
    - ${{ job.steps }}                # Users steps

I następnie:

trigger:
- none

pool:
  vmImage: 'windows-latest'

jobs:
- template: deployment-template.yml
  parameters:
    testsJobsList: 
      - job: Platform1
        pool: Platform1Pool
        steps:
        - template: minimal_template.yml
      - job: Platform2
        pool: Platform2Pool
        steps:
        - template: minimal_template.yml
      
2021-11-24 08:45:51
0

Szukasz warunki: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=yaml

Etapy, zadania i etapy mogą mieć pewien warunek.

Na przykład, wykonanie zadania, jeśli zmienna ma wartość true:

condition: eq(variables['System.debug'], 'true')
2021-11-24 10:19:20

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................