Выполнить команду с помощью `Process` в Jenkins Groovy Pipeline - PullRequest
0 голосов
/ 21 июня 2019

Я выполняю команду cURL, используя команду sh без проблем.

pulic uploadArtifct (String user, String password, String file, String 
  location) {
  def cred = "${user}:${password}"
  def cmd = "curl -v -u cred --upload-file ${file} ${location}"

  sh cmd

  }

Однако, когда я пытаюсь выполнить тот же cmd, используя объект Process.Я получаю ошибку:

public uploadArtifct (String user, String password, String file, String 
  location) {
  def cred = "${user}:${password}"
  def cmd = "curl -v -u cred --upload-file ${file} ${location}"
  try {
   def sout = new StringBuffer(), serr = new StringBuffer()
   def proc = cmd.execute()
   proc.consumeProcessOutput(sout, serr)
   proc.waitForOrKill(1000)
   println sout
  } catch (Exception e) {
    throw new RuntimeExceptipon("Cannot execute curl, exception: [${e.getClass().getName()} - '${e.getMessage()}']")
   }
  }

Я вижу ошибку:

java.lang.RuntimeException: Cannot execute curl, exception: [java.lang.RuntimeException - 'Error running; stdout='', stderr='curl: Can't open 'Folder/artifact/file.zip'!
curl: try 'curl --help' or 'curl --manual' for more information
'']

Что такое Process.execute(), которое не работает.Я что-то пропустил?

1 Ответ

0 голосов
/ 21 июня 2019

Я столкнулся с подобной проблемой полгода назад.Как я выяснил, запрос curl, который вы запускаете с помощью команды sh, выполняется на агенте, на котором выполняется сборка

sh cmd  //this runs on the agent and hence finds the ${file}

Однако второй фрагмент кода

def proc = cmd.execute() . //This is run on the master and hence it cannot find the ${file}

КогдаВы используете классы Groovy, он предназначен для выполнения на мастер-узле.Это потому, что отличный двигатель, который использует Дженкинс, находится на мастере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...