Значение переменной внутри сценария Jenkins Pipeline sh - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь написать сценарий Jenkins, и у меня возникают проблемы с разрешением одной команды.Существует оператор if, который проверяет наличие удаленного каталога, и, если он доступен, он предоставляет разрешения для того же самого и, если нет, возвращает ошибку.Проблема в том, что часть пути к каталогу получена с использованием переменной, и на эту переменную ссылаются как $variable_name.Проблема, с которой я сталкиваюсь, заключается в том, что эта переменная либо представляет собой полную строку, либо получает пустое значение внутри команды if.Когда мы проверяем значение снаружи, используя echo, оно возвращает правильное значение.Ниже приведен фрагмент моего кода:

def myversion ="${params.VersionName}"
pipeline {
  agent { label 'example' }
    stages {
      stage('Testing Stage') {
         steps {
            script { 
                sh "echo '${myversion}'"
                sh '''if sshpass -p remote_user_password ssh remote_user_name@remote_user_address '[ -d "some_path_here-${myversion}/Mac" ]'; then 
sshpass -p remote_user_password ssh remote_user_name@remote_user_address "echo remote_user_password | sudo -S chmod -R 777 some_path_here-${myversion}/Mac"
else
    echo "failure"
fi'''
                  }
                }
             }
          }
      }

И вывод консоли

echo test
test
[Pipeline] sh
+ sshpass -p remote_user_password ssh remote_user_name@remote_user_address [ -d "some_path_here-${myversion}/Mac" ]
+ echo failure
failure

Из вывода консоли я вижу, что ${myversion} идет как есть, а непереданный параметр ' test ' Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Наконец, после многих различных попыток настройки, мы получили решение: несмотря на то, что генератор синтаксиса Jenkins Pipeline способен генерировать сценарий Jenkins, он не всегда может быть полезен.В этом случае мне пришлось использовать двойные кавычки вместо одинарных кавычек и изменить внутреннюю команду -d.Наконец, вот рабочий код:

def myversion ="${params.VersionName}"
pipeline {
  agent { label 'example' }
    stages {
      stage('Testing Stage') {
         steps {
            script { 
                sh "echo '${myversion}'"
                sh """if sshpass -p remote_user_password ssh remote_user_name@remote_user_address '[ -d some_path_here-${myversion}/Mac ]'; then 
sshpass -p remote_user_password ssh remote_user_name@remote_user_address 'echo remote_user_password | sudo -S chmod -R 777 some_path_here-${myversion}/Mac'
else
    echo 'failure'
fi"""
                  }
                }
             }
          }
      }
0 голосов
/ 19 февраля 2019

Измените одинарные квоты на двойные за пределами команды sh:

def myversion ="${params.VersionName}"
pipeline {
  agent { label 'example' }
    stages {
      stage('Testing Stage') {
         steps {
            script { 
                sh "echo '${myversion}'"
                sh """if sshpass -p remote_user_password ssh remote_user_name@remote_user_address '[ -d "some_path_here-${myversion}/Mac" ]'; then 
sshpass -p remote_user_password ssh remote_user_name@remote_user_address "echo remote_user_password | sudo -S chmod -R 777 some_path_here-${myversion}/Mac"
else
    echo "failure"
fi"""
                  }
                }
             }
          }
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...