Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在jenkins中使用mkdir和rmdir拒绝访问 詹金斯正在生成VisualStudio./P>中的C++项目的构建_Batch File_Jenkins_Mkdir_Access Denied_Rmdir - Fatal编程技术网

Batch file 在jenkins中使用mkdir和rmdir拒绝访问 詹金斯正在生成VisualStudio./P>中的C++项目的构建

Batch file 在jenkins中使用mkdir和rmdir拒绝访问 詹金斯正在生成VisualStudio./P>中的C++项目的构建,batch-file,jenkins,mkdir,access-denied,rmdir,Batch File,Jenkins,Mkdir,Access Denied,Rmdir,在此过程中,会调用一些.bats,其中一个中有如下结构: 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时,Jenkins会

在此过程中,会调用一些
.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
时,Jenkins会给我
拒绝访问

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


我怎样才能解决这个问题?后来,其他脚本尝试访问
Temp
,但它们失败了,这破坏了我的构建。

一些原因
rmdir
可能失败:

  • 没有权限
  • 该目录包含文件
  • 它是一个或多个进程的当前工作目录
  • 进程上有一个锁
某些原因
mkdir
可能会失败:

  • 没有权限
  • 该目录已存在
OP的脚本正在尝试在运行该脚本的进程的
%CD%
中创建名为“Temp”的目录。如果有其他进程也运行该脚本,或者任何进程出于任何原因使用相同的
%CD%\Temp
路径,则创建或删除该路径都可能失败


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

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



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

temp
是一个相对路径,那么它与什么相关呢?我不太明白你的意思
Temp
是变量
TEMPDIR
引用的文件夹的真实名称
Temp
用于存储visual studio在生成过程中生成的二进制文件。由于它给我
访问被拒绝
,因此文件夹未创建,生成中断。
Temp
是分配给
TEMPDIR
的文本,而不是
%Temp%
中包含的值,因此它是来自
%CWD%
的相对路径。Jenkins进程在其
%CWD%
所在的位置是否具有特权?您可以使用
%VAR%
表单读取存储在
VAR
中的值
%CWD%
是一个内置的
cmd.exe
伪环境变量。@Compo,我认为您永远无法删除当前目录。我认为那些
.bat
是由visual studio自动生成的。@Daniel,您可能有自定义的生成步骤,或者某些生成过程是由您使用的包定义的。