Я запускаю сценарий make (параметр команды Execute Shell) внутри задания jenkins.
Сценарий make имеет команду оболочки rm -rf <directory name>
.
Эта команда завершается с ошибкой, указывающей, что каталог не пуст. Поскольку скрипт использует rm -rf
, он должен работать, даже если каталог не пуст.
Не уверен, что здесь не так.
Любая помощь в этом будет высоко оценена.
Задание Дженкинса не может удалить каталог
Ответы (2)
Если ваше задание Jenkins выполняется на компьютере с Linux, это может быть:
- проблема с разрешениями.
- состояние гонки (которое почему сначала удалить файлы - хорошая идея. Тогда ваш
rm -Rf
удалит все пустые папки)
В Windows проверьте полное сообщение об ошибке: возможно, ресурс вытеснен ОС (используется другим процессом).
person
VonC
schedule
05.04.2017
Это Linux Box. Я вижу, что каталог рабочей области принадлежит пользователю jenkinsutil, а задание выполняется пользователем projectutil. ‹br/› Могу ли я убедиться, что задание может запускать указанную команду в каталоге, принадлежащем другому пользователю?
- person Sandy; 05.04.2017
@Sandeep Итак, первые три ссылки (из первых двух пунктов) актуальны.
- person VonC; 05.04.2017
да. Я думаю, что могу изменить разрешение для файлов, загруженных в рабочую область jenkins, до запуска сценария. Я попробую.
- person Sandy; 05.04.2017
Привет, я попытался добавить разрешения для удаляемого каталога, но команда rm -rf не работает с тем же сообщением. Не уверен, что не так. Та же команда отлично работает на локальной машине
- person Sandy; 11.04.2017
@Sandeep Можете ли вы попробовать
rm -Rf
вместо rm -rf
?
- person VonC; 11.04.2017
Я не могу, так как код извлекается из репо, где я не могу вносить изменения, но та же команда работает для другой папки. Вот вывод сборки - ДОБАВИТЬ прокси / тест с использованием кеша RUN rm -rf /test/.classpath /test/.gitignore /test/.gradle /test/.project /test/.settings /test/Dockerfile /test/build RUN cd /тест; ./gradlew oneJar RUN rm -rf /test/src [91mrm: невозможно удалить '/test/src/main/java/prj/java/action': каталог не пуст Команда '/bin/sh -c rm -rf / test/src' вернул ненулевой код:
- person Sandy; 11.04.2017
@Sandeep, так что это может быть не проблема с разрешением, а какая-то проблема с гонкой, здесь папка все еще используется предыдущей командой, я полагаю
- person VonC; 11.04.2017
Это может происходить. Команда перед rm -rf, которая завершается ошибкой, является командой сборки, которая компилирует код в тот же каталог. Есть ли способ дождаться завершения этой команды сборки, а затем выполнить только команду em -rf?
- person Sandy; 11.04.2017
Вы можете сначала попытаться очистить каталог, а затем удалить каталог.
Попробуйте запустить следующую команду:
rm mydir/* mydir/.*
rmdir mydir
person
Pritam Banerjee
schedule
05.04.2017
В среде Windows это должно быть rmdir 'mydir' /S /Q, чтобы принудительно удалить все содержимое и сам каталог, не спрашивая, но исходный вопрос выглядит так, как будто это был сценарий Linux, понятия не имею, как это сделать
- person DanDan; 19.07.2019