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
可能会失败:
- 没有权限
- 该目录已存在
%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,您可能有自定义的生成步骤,或者某些生成过程是由您使用的包定义的。