Проверка условия задачи конвейера Azure DevOps на наличие пустой строки

У меня есть этот шаблон:

parameters:
  gitTag: ' '

stages:
- stage: CreationTag

  jobs:
  - job: Tag
    pool:
      name: Default

    steps:

    - task: PowerShell@2
      displayName: 'gitTag parameter trim'
      inputs:
        targetType: 'inline'
        script: | 
          $trimmedGitTag = "${{parameters.gitTag}}".Trim()
          Write-Host "##vso[task.setvariable variable=trimmedGitTag]$trimmedGitTag"
          Write-Output "Trimed parameter = '$trimmedGitTag'"
      
    - task: PowerShell@2
      displayName: 'Creation du tag Git'      
      inputs:
        targetType: 'inline'
        script: |
          Write-Output "Trimed parameter = '$(trimmedGitTag)'"
      condition: and(succeeded(), ne('$(trimmedGitTag)', ''))

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

Первый шаг выполняется и выводит на консоль «Trimedparameter = ''».

Моя проблема в том, что вторая задача все еще выполняется, хотя и не должна. И он также отображает то же значение («Параметр Trimed = ''») с выходом записи.

В чем здесь будет проблема? Или это другой способ гарантировать, что задача выполняется только тогда, когда параметр имеет значение, отличное от пустого или пробельного?

РЕДАКТИРОВАТЬ

Я изменил значение параметра по умолчанию на пустое место в качестве обходного пути для необязательного параметра. В исходном сообщении я использовал пустую строку ''. Я хочу иметь возможность управлять случаями, когда:

  • пользователь ничего не вводит
  • пользователь вводит только пробелы (любой длины, поэтому '' не следует запускать задачу
  • пользователь вводит допустимое значение, но начинается или заканчивается пробелами, что приведет к сбою моих задач. Вот почему мне нужен Trim()
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
149
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вместо:

condition: and(succeeded(), ne('$(trimmedGitTag)', ''))

Пытаться:

condition: and(succeeded(), ne(variables['trimmedGitTag'], ''))

Или, как альтернатива:

- ${{ if replace(parameters.gitTag, ' ') }}:
  - task: PowerShell@2
    displayName: 'Do something with the tag'
    inputs:
      targetType: 'inline'
      script: |
        $trimmedGitTag = "${{ parameters.gitTag }}".Trim()
        Write-Output "Trimed parameter = '$trimmedGitTag'"

@PatriceCote вы используете шаблоны и передаете правильные параметры? Потому что я протестировал свой код, и он работал. Дважды проверьте, правильно ли вы передаете все параметры.

Rui Jarimba 05.06.2024 18:02

Кроме того, вы устанавливаете и используете переменную в одном задании?

Rui Jarimba 05.06.2024 18:17

Ладно, это была просто опечатка, моя ошибка. Ваше решение с условием отлично работает. Я не понял, что переменная была добавлена ​​в массив «переменные». Большое спасибо за вашу помощь!

Patrice Cote 05.06.2024 19:08

По умолчанию вы устанавливаете значение ''. Это означает, что если ничего не указано, то результатом будет ''.

Я думаю, что использование PowerShell здесь слишком усложняет то, что вы пытаетесь сделать. Я бы порекомендовал поставить if утверждение к задаче.

steps:
- ${{ if paraemters.Tag }}:
  - task:someTask@1

В настоящее время вы используете условия, которые будут оцениваться при выполнении конвейера и обычно будут показывать статус «пропущено», если условие не выполнено. Используя условие if, оно оценивается во время компиляции, и поэтому неудовлетворенные задачи даже не будут загружены в задание.

Некоторые ресурсы: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#conditionally-run-a-step

https://techcommunity.microsoft.com/t5/healthcare-and-life-sciences/azure-devops-pipelines-if-expressions-and-conditions/ba-p/3737159

Осторожно: ${{ if parameters.Tag }}: примет значение True, если строка НЕ ​​пуста. См. Приведение типов — String.

Rui Jarimba 05.06.2024 16:57

Однако допустимо: 1.) для него установлено значение по умолчанию '' и предполагается, что с именем типа githubTag не будет пробелов.

DreadedFrost 05.06.2024 16:59

Да, значение по умолчанию — пустая строка, но, возможно, это просто пример. Не делайте слишком много предположений о том, как люди будут использовать конвейер (или шаблон). Лучше перестраховаться, чем потом сожалеть :-)

Rui Jarimba 05.06.2024 17:00

@DreadedFrost Я использовал оператор If для своих тестов, но мне все равно кажется, что условие намного понятнее и читабельнее

Patrice Cote 05.06.2024 17:19

Также я изменил значение по умолчанию для '', так как хочу, чтобы оно было необязательным параметром. я отредактирую пост

Patrice Cote 05.06.2024 17:34

Ради интереса, зачем менять? Установка значения по умолчанию на '' фактически делает его необязательным. Если значение отсутствует, оно пусто.

DreadedFrost 05.06.2024 17:48

Другие вопросы по теме