Предотвращение сбоя очистки (и, следовательно, сборки) из-за чего-либо, блокирующего каталог сборки

#windows #ant #build

#Windows #ant #сборка

Вопрос:

Приглашение Windows cmd является одним из виновников — иногда я захожу на компакт-диск в один из моих подкаталогов сборки, чтобы что-то проверить, и если я не закрою консоль или компакт-диск где-нибудь еще, моя следующая сборка, конечно, завершится неудачей, потому что она не может удалить каталоги сборки.

Конечно, я могу просто выйти из командной строки или с компакт-диска, но я забываю, и, прежде чем я это узнаю, на моем сервере CI появляются все эти неудачные сборки только из-за этого.

Я могу представить, что Ant никак не может принудительно удалить, но есть ли другая хорошая стратегия? Можно ли сказать Ant, чтобы он попытался удалить, но не потерпел неудачу, если это невозможно? Я вижу, что это может быть не очень хорошей идеей, но это то, что я должен был бы взвесить специально для моего сценария.

Или, по крайней мере, есть ли cmd.exe опция или альтернативная строка cmd, которая не блокирует текущий рабочий каталог?

Ответ №1:

Windows не позволит вам удалить каталог, если в этом каталоге есть кто-то другой. Не имеет значения, является ли это окном консоли или окном проводника. Реального способа обойти это нет, кроме как сначала завершить процесс.

Какой инструмент непрерывной интеграции вы используете? Если вы используете Jenkins или Hudson (Дженкинс отделился от Hudson несколько месяцев назад), вы можете просмотреть рабочий каталог, нажав на ссылку Рабочий каталог в левой части окна браузера. Это даст вам доступ к вашему рабочему каталогу (чтобы вы могли все проверить), но не заблокирует каталог и не предотвратит удаление.

Если вам нужно подключиться к машине сборки, отключите задание, чтобы сервер сборки не пытался выполнить сборку, пока вы проверяете вещи.

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

1. Я на Bamboo, но проводник Windows не блокирует каталог, просто просматривая его в проводнике. Или вы хотите сказать, что Дженкинс разрешит просмотр файлов в этом каталоге без блокировки содержащих каталогов? Это может быть удобно, но все еще очень ограничено по сравнению с командной строкой. Я думаю, чего я не понимаю, так это почему командная строка должна блокировать каталог только потому, что это текущий рабочий каталог. Разрешить другому процессу удалить каталог и просто вернуться к первому родительскому, который все еще существует, как это делает Explorer.

2. Вот почему я переключался, была альтернативная командная строка, которая не блокирует каталог только потому, что вы находитесь внутри него.

3. Вы можете в Jenkins просматривать файлы, не блокируя их, потому что просматриваете их через веб-браузер. Когда вы «просматриваете» файл в рабочем каталоге, файл открывается, содержимое считывается, а затем закрывается. Он не удерживается заблокированным, как это было бы в редакторе командной строки. Я никогда не использовал Bamboo, но он также основан на Интернете и должен обладать аналогичными возможностями. Это должно позволить вам просматривать рабочий каталог, фактически не находясь на сервере сборки.

Ответ №2:

Во-первых, я не думаю, что вам следует заходить на свой сервер сборки и просматривать подкаталоги сборки так часто, чтобы это стало постоянной проблемой. Вы работаете над своей сборкой на самом buildserver? Если это так, то вам лучше убедиться, что вы можете запустить точно такой же скрипт сборки с компьютера разработчика и можете работать с ним локально. Согласованность является ключевой.

Помимо этого, вы можете отключить сеансы, на которых размещено командное окно. Окна команд будут частью интерактивных сеансов. Вы можете настроить запланированный процесс для поиска и уничтожения неактивных, но оставленных сеансов. Вот хорошее руководство по выполнению этого в интерактивном режиме, но это можно легко создать по сценарию.

http://www.howtogeek.com/howto/windows/command-line-hack-for-terminal-server-has-exceeded-the-maximum-number-of-allowed-connections/

Вам придется определить свои собственные критерии для автоматического завершения сеансов.

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

1. Я перехожу в каталог сборки исключительно для целей настройки процесса CI. Проблемы с прорезыванием зубов, другими словами, связанные с проблемными и плохо документированными инструментами разработки. Как только я узнаю их специфические способы и обходные пути, я больше не захожу в каталоги сборки.

Ответ №3:

Возможно, вы захотите изучить атрибуты ‘quiet’ и ‘failonerror’ задачи удаления ant. Однако будьте осторожны.

Ответ №4:

Может ли это быть проверка на вирусы, которая вызывает у вас проблемы? Возможно, сработало бы просто исключение этого каталога.