Azure Функции конвейера шаблонов DevOps - PullRequest
1 голос
/ 17 января 2020

Я работаю с Azure шаблонами конвейера. Я знаю, что можно выполнять итерацию по списку элементов, например,

parameters:
jobs: []

jobs:
  job: SomeSpecialTool # Run your special tool in its own job first
    steps:
      ${{ each job in parameters.jobs }}: # Then do each job
        ${{ each pair in job }}: 
        # Insert all properties other than "dependsOn"
        ${{ if ne(pair.key, 'dependsOn') }}:
            ${{ pair.key }}: ${{ pair.value }}
            dependsOn: # Inject dependency
            SomeSpecialTool
            ${{ if job.dependsOn }}:
        ${{ job.dependsOn }}

Можно ли также проверить, не является ли список первым пустым? Чтобы сделать некоторую предварительную обработку перед итерацией? например как то так?

parameters:
jobs: []

jobs:
  job: SomeSpecialTool # Run your special tool in its own job first
    steps:
        ${{ if not(empty(jobs))}}: 
        # Then do job preparation that is not needed when there is no job e.g.
        - checkout: self
            displayName: 'Get source files from GitHub'

        - task: HelmInstaller@1
          displayName: 'Install Helm on the agent'
          inputs:
                helmVersionToInstall: 'latest'    
      ${{ each job in parameters.jobs }}: # Then do each job
        ${{ each pair in job }}: 
        # Insert all properties other than "dependsOn"
        ${{ if ne(pair.key, 'dependsOn') }}:
            ${{ pair.key }}: ${{ pair.value }}
            dependsOn: # Inject dependency
            SomeSpecialTool
            ${{ if job.dependsOn }}:
        ${{ job.dependsOn }}

1 Ответ

0 голосов
/ 18 января 2020

Это возможно. Так как там empty не распознается. Вы можете использовать - ${{if parameters.jobs[0]}}:, чтобы проверить, пустые работы или нет.

Если задания пустые, то parameters.jobs[0] будет оцениваться как false. Пожалуйста, проверьте ниже мой пример yaml.

parameters:
  buildSteps: []


stages:
- stage: secure_buildstage
  pool: Hosted VS2017

  jobs:
  - job: secure_buildjob
    steps:

    - ${{if parameters.buildSteps[0]}}:  # will be evaluated to false if buildsteps is empty, and the following task will not be run,

      - script: echo ${{parameters.buildSteps[0]}} 
        displayName: 'Base: Pre-build'

      - script: echo Building
        displayName: 'Base: Build'

    - ${{ each step in parameters.buildSteps }}:
      - ${{ each pair in step }}:
          ${{ if ne(pair.key, 'script') }}:
            ${{ pair.key }}: ${{ pair.value }}       
          ${{ if eq(pair.key, 'script') }}: # checks for buildStep with script
            'Rejecting Script: ${{ pair.value }}': error # rejects buildStep when script is found         

My azure -pipeline.yml:

trigger: none

stages:

- template: deploy-jobs.yaml
  parameters:
    buildSteps:  
      - bash: echo Test #Passes
        displayName: Test - Will Pass
      - bash: echo "Test"
        displayName: Test 2 - Will Pass
      - bash: echo "Script Test" # Comment out to successfully pass
        displayName: Test 3 - Will Fail
...