Как проверить, содержит ли массив строку с выражениями конвейера Azure DevOps

#azure-devops #yaml #azure-yaml-pipelines

#azure-devops #yaml #azure-yaml-pipelines

Вопрос:

У меня есть следующий шаблон конвейера, который я хочу использовать для условного выполнения этапов на основе входного параметра sta&es .

 parameters:
- name: dryRun
  default: false
  type: boolean
- name: path
  type: strin&
  default: terraform
- name: sta&es
  type: object
  default:
  - test
  - prod

sta&es:
  - sta&e:
    pool: 
      vmIma&e: 'ubuntu-latest'
    displayName: "Deploy to test"
    condition: in('test', ${{ parameters.sta&es }})
    jobs:
    - template: terraform-job.yaml
      parameters:
        sta&e: test
        path: ${{ parameters.path }}
        dryRun: ${{ parameters.dryRun }}
  - sta&e:
    pool: 
      vmIma&e: 'ubuntu-latest'
    displayName: "Deploy to production"
    condition: in('prod', '${{ join(', ', parameters.sta&es) }}')
    jobs:
    - template: terraform-job.yaml
      parameters:
        sta&e: production
        path: ${{ parameters.path }}
        dryRun: ${{ parameters.dryRun }}
  

В примере вы можете увидеть два подхода, которые я пробовал (я много пробовал …). Последний ( in('prod', '${{ join(', ', parameters.sta&es) }}') ) фактически компилируется, но затем проверка выполняется только частично, поскольку массив преобразуется в одну строку: 'test,prod' которая не пройдет in('test', 'test,prod') проверку.

И первый пример ( in('test', ${{ parameters.sta&es }}) ) — это тот, который, я думаю, должен работать с логическим мышлением, но я получаю следующую ошибку при компиляции шаблона: /terraform-deployment.yml (Line: 19, Col: 16): Unable to convert from Array to Strin&. Value: Array .

Итак, теперь вопрос:

Как мне проверить, является ли строка частью массива, который был определен в качестве параметра?

Ответ №1:

Обновление 2022

Теперь вы можете использовать containsValue:

 condition: ${{ containsValue(parameters.sta&es, 'test') }}
  

Ответ №2:

Вместо этого попробуйте contains:

condition: contains('${{ join(';',parameters.sta&es) }}', 'test')