доступ запрещен с помощью mkdir и rmdir в jenkins - PullRequest
0 голосов
/ 25 января 2020

Дженкинс генерирует сборку проекта C ++, выполненного в Visual Studio.

Во время этого процесса вызывается несколько .bat s, и в одном из них есть такая структура:

SET TEMPDIR=Temp
rmdir %TEMPDIR% /S /Q
echo Don't continue if there was an error above (except the not found error which is ok) and go hand delete the dir!
:pause
mkdir %TEMPDIR%

Я не очень знаком с пакетными сценариями, но когда вызываются и rmdir, и mkdir, Дженкинс дает мне access denied.

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

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

1 Ответ

1 голос
/ 25 января 2020

Некоторые причины rmdir могут не работать:

  • Нет разрешений
  • Каталог содержит файлы.
  • Это текущий рабочий каталог одного или нескольких процессы.
  • Процесс заблокирован.

По некоторым причинам mkdir может произойти сбой:

  • Нет разрешений
  • Каталог уже существует.

Сценарий OP пытается создать каталог с именем "Temp" в любом %CD% для процесса, выполняющего этот сценарий. Если есть другие процессы, которые также запускают этот сценарий, или те, которые по той или иной причине используют один и тот же путь %CD%\Temp, могут возникнуть сбои при создании или удалении этого пути.


It распространен в системах сборки, поскольку существует множество параллельных процессов и потоков, выполняющих различные программы / сценарии в различных рабочих каталогах. С точки зрения любого экземпляра файла cmd, любой путь, относительный %CD%, является фактически случайным. Все системы компоновки нисходящего CI предоставляют переменные среды, которые такие программы / сценарии могут использовать для правильной ориентации относительно известной сборки root некоторой формы, часто называемой чем-то вроде BuildRoot.

Но реальная проблема Вот как сценарии OP обрабатывают управление временными каталогами. Они просто недостаточно надежны для совместного использования общего временного каталога.


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

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