Назад | Перейти на главную страницу

Сценарий Azure DevOps Bash Проверка запроса на извлечение

Я хочу создать небольшой сценарий bash, который проверяет, запускается ли запрос на вытягивание из правильных ветвей или завершается при ошибке, если это не так.

Это была моя последняя попытка / итерация перед тем, как я опубликовал этот вопрос:

if [[ -n $(System.PullRequest.TargetBranch) ]]&&[[ "$(System.PullRequest.TargetBranch)"!="refs/heads/master" ]];
  then
    echo "$(System.PullRequest.TargetBranch)"!="refs/heads/master"
    echo "Branch $(System.PullRequest.TargetBranch) is not master, proceed."
    exit 0
fi

if [ -n $(system.pullRequest.sourceBranch) ];
  then
    if [ "$(system.pullRequest.sourceBranch)"!="refs/heads/hotfixes/"* ]&&[ "$(system.pullRequest.sourceBranch)"!="refs/heads/develop" ];
      then
        echo "Only hotfixes and develop are allowed to be pulled to the master branch"
        exit 1
      else
        echo "$(system.pullRequest.sourceBranch) is allowed to be pulled to the master branch"
    fi
  else
    echo "variable does not exists"
fi

В настоящее время я тестирую / строю этот скрипт и ожидаю выхода 1 в моем тестовом примере. Но я получаю следующий результат:

refs/heads/master!=refs/heads/master 
Branch refs/heads/master is not master, proceed.

Я предполагаю, что я делаю что-то не так с операторами сравнения строк (не говоря уже о том, что исправления запускаются с проверкой позже). Но я не могу понять, что делаю не так. Я пробовал несколько вариантов, некоторые дают другие ошибки. Я понятия не имею, куда двигаться дальше.

Как видно из выходных данных, две сравниваемые строки фактически одинаковы. Так что я не уверен, где что-то не так.

Вам нужны пробелы между переменными и оператором. И вам не нужно для этого сравнения двойные скобки.

Вместо того

if [[ -n $(System.PullRequest.TargetBranch) ]]&&[[ "$(System.PullRequest.TargetBranch)"!="refs/heads/master" ]];

Пытаться

target_branch=$(System.PullRequest.TargetBranch) # to simplify the next lines
if [ -n "$target_branch" ] && [ "$target_branch" != "refs/heads/master" ]; then 
# ...