Im пытается скопировать полученный файл войны из одного каталога сборки в другой с помощью сценария сценария Jenkins (groovy). Я тестировал команду find/exec/cp в самой системе как пользователь jenkins из той же рабочей области, что и сценарий, и работает отлично (прямая копия с консоли).Выполнение команды Groovy через Jenkins: «find: missing argument to -exec»
String buildNumber = env.BUILD_NUMBER
def sout = new StringBuffer()
def serr = new StringBuffer()
//Create package directory in jenkins job folder
def packageDir = "${env.JENKINS_HOME}/jobs/Package_Deploy_Pipeline/builds/${buildNumber}/package/"
def command = "mkdir ${packageDir}"
def proc = command.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(3000)
println "out> $sout err> $serr"
command = "find ${env.JENKINS_HOME}/jobs/myJob/builds/lastSuccessfulBuild/archive/build/libs/ -name *.war -exec cp {} ${packageDir} \\;"
println command
proc = command.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(3000)
println "out> $sout err> $serr"
Ошибка видны в консоли выводе является:
[Pipeline] echo
out> err>
[Pipeline] echo
find /var/lib/jenkins/jobs/myJob/builds/lastSuccessfulBuild/archive/build/libs/ -name *.war -exec cp {} /var/lib/jenkins/jobs/Package_Deploy_Pipeline/builds/23/package/ \;
[Pipeline] echo
out> err> find: missing argument to `-exec'
Edit: Я также попытался "*.war"
, '*.war'
, \;
и ';'
Есть ли '.war' файлы в текущем каталоге? Такое, что '* .war' может быть развязано оболочкой? Процитирует ли этот аргумент? (Я бы не ожидал, что проблема будет здесь, но это может быть, и это потенциальная проблема, которую вы должны исправить в любом случае.) (Что расширяет '$ {env.JENKINS_HOME}' в этой команде?) Удаляет ли '; 'снова помогите? –
Единственный .war находится в исходном каталоге cp. Я попробовал одинарную цитату '*.войны "и получил те же результаты. $ {env.JENKINS_HOME} расширяется до/var/lib/jenkins /, и я знаю, что это правильно из Консольного выхода. Я не уверен, что вы имеете в виду, убегая снова, можете ли вы уточнить? –
Это не связано с проблемой вообще, но 'env.JENKINS_HOME' не является допустимой переменной оболочки. Оболочка не может расширять это. Так что же это? И, ускользнув от него снова, я имел в виду, что, возможно, все, что выполняет команда, удаляет обратную косую черту с '\;', и вы должны попытаться получить '\\;' в командной строке в качестве теста. –