Ошибка Дженкинса: «Не удается удалить файл» при вызове Ant

#ubuntu #ant #permissions #jenkins

#ubuntu #ant #разрешения #Дженкинс

Вопрос:

Я запускаю Jenkins 1.433 в Ubuntu 11.04, чтобы выполнить сборку, которая включает в себя задачу Ant. clean Часть моей задачи Ant, которая удаляет build каталог из предыдущих сборок, будет работать при запуске sudo Ant с терминала, но завершается сбоем из Jenkins со следующим:

 BUILD FAILED
/var/lib/jenkins/workspace/AomaTests/build.xml:47: Unable to delete directory /var/lib/jenkins/workspace/AomaTests/build
  

Установка Ant, на которую ссылается Дженкинс, работает из командной строки ( usr/bin/ant ), и проект Дженкинса конкретно указывает на этот экземпляр (а не на Default ). Полагая, что это проблема с разрешениями, я попробовал следующее:

  • chown -R соответствующий build каталог, установив его владельца на jenkins .
  • Выполнение a chmod 777 в каталоге.
  • Временно предоставляя jenkins пользователю возможность запускать что-либо без пароля (путем редактирования sudoers файла с помощью строки jenkins ALL = NOPASSWD:ALL ).

Ни один из этих подходов не работает. Должен ли я запускать ant через другого пользователя или, возможно, передавать ему некоторые свойства через Jenkins?

Обновление: вывод ps -ef | grep "jenkins" :

 jenkins   1647     1  0 12:28 ?        00:00:00 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/var/lib/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid -- /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8080 --ajp13Port=-1
jenkins   1660  1647  7 12:28 ?        00:00:13 /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8080 --ajp13Port=-1
mattcarp  2393  2229  0 12:31 pts/0    00:00:00 grep --color=auto jenkins
  

Запуск ls -l в каталоге, который не удается удалить (при запуске из Jenkins), показывает:

 drwxr-xr-x 2 jenkins root 4096 2011-10-03 14:49 build
  

Большое спасибо за любые советы!

Комментарии:

1. Очень интересная ваша настройка. Наше рабочее пространство Jenkins находится в /home/jenkins, а не в /usr/lib/jenkins . Я также не вижу имени задания в структуре каталогов. В нашем каталоге будет /home/jenkins/aromaTest/workspace/build.xml

Ответ №1:

Как оказалось, все, что требовалось, это установить для владельца родительского каталога jenkins значение .

Вау — это был долгий путь для такого простого ответа!

Комментарии:

1. Я рад, что вы решили проблему. Следующее, что я бы посоветовал вам попробовать, это войти в систему как Jenkins на вашем сервере Jenkins, перейти в рабочий каталог и попробовать вручную запустить Ant оттуда. Это устранило бы ошибку с Дженкинсом. Теперь, зная, что Дженкинса нет на картинке, вы бы посмотрели на свою среду и обнаружили проблему с каталогом. Лучший способ решить проблему сборки — попробовать запустить сборку в каталоге рабочей области. Сначала просто отключите задание.

2. А как насчет Windows? У меня такая же проблема в Windows.. Я знаю, что мне нужно предоставить права администратора, чтобы отключить jenkins или ant, но как..

Ответ №2:

Кто запускает Jenkins? Вот в чем вопрос. Есть какой-то пользователь, который запускает процесс Java, на котором запущен сервер Jenkins. Вам нужно найти этого пользователя. Попробуйте это:

  $ ps -ef | grep "jenkins"
  

и посмотрите, что вы получите.

Зная, что вас зовут Мэтт, и я вижу, что файл, который нельзя удалить, находится в каталоге /home / mattcarp, что-то подсказывает мне, что происходит что-то странное. Мое первое предположение заключается в том, что Jenkins не выполняется пользователем mattcarp .

  • Как установлен Jenkins? Установлен ли он как собственный пользователь в своем собственном каталоге? Обычно так это делается. Например, вы устанавливаете Jenkins /home/jenkins , и все задания /home/jenkins/jobs загружены, и рабочее пространство для задания foo /home/jenkins/jobs/foo/workspace for загружено . Почему Дженкинс просматривает ваш $HOME каталог?
  • Как работает ваш Ant build.xml -файл? Вы жестко кодируете каталог /home/mattcarp/workspace/... в build.xml файле? Если это так, вам нужно переделать свой build.xml , чтобы использовать его текущее дерево каталогов, а не жестко кодировать его.

Комментарии:

1. Спасибо за ответ! Я отредактировал свой вопрос, чтобы отразить вывод ps команды. Ant build.xml использует относительный путь к каталогу сборки, и Дженкинс был установлен aptitude в соответствии с инструкциями на сайте Дженкинса. Он находится в /var/lib/jenkins . Я чувствую, что делаю что-то глупое с разрешениями, но я не совсем уверен, что именно…

2. Кроме того, чтобы избежать каких-либо изменений, я вручную переместил файлы проекта в /var/lib/jenkins/workspace (это отражено в моем редактировании вопроса). Кстати, вывод ps -f | grep "ant" : mattcarp 2775 2231 0 15:41 pts/0 00:00:00 grep --color=auto ant