在詹金斯中使用mkdir和rmdir拒绝访问

时间:2020-01-25 18:15:37

标签: batch-file jenkins mkdir access-denied rmdir

Jenkins正在生成Visual Studio中制作的C ++项目的构建。

在此过程中,调用了一些.bat,其中之一具有这样的结构:

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%

我对批处理脚本不是很熟悉,但是当同时调用rmdirmkdir时,詹金斯给了我access denied

我查看了构建配置以搜索任何类型的读/写权限,但似乎没有任何权限。

我该如何解决?后来其他脚本尝试访问Temp,但它们失败了,这破坏了我的构建。

1 个答案:

答案 0 :(得分:1)

rmdir失败的某些原因:

  • 没有权限
  • 该目录包含文件。
  • 这是一个或多个进程的当前工作目录。
  • 进程已锁定。

mkdir失败的某些原因:

  • 没有权限
  • 该目录已存在。

OP的脚本正尝试在运行该脚本的进程的%CD%中创建一个名为“ Temp”的目录。如果还有其他进程也在运行该脚本,或者由于某种原因而使用同一%CD%\Temp路径的任何进程,则创建或删除该路径都可能会失败。


在构建系统中很常见,因为有多个并行进程和线程在各种工作目录中运行各种程序/脚本。从cmd文件的任何实例的角度来看,%CD%相对的任何路径实际上都是随机的。所有下降的CI构建系统都提供了环境变量,这些程序/脚本可使用这些环境变量来相对于某种形式的已知构建根(通常称为BuildRoot之类)正确定向自身。

但是这里真正的问题是OP的脚本如何处理临时目录管理。它们根本不够强大,无法共享一个公共的临时目录。


我还要添加一个好的CI构建系统,它提供某种形式的每进程/线程临时目录,程序/脚本可以使用它们而无需进行任何目录管理。