Jenkins生成含百分号的文件夹名不被Visual Studio支持的解决方案咨询
解决方案
方案1:修改Jenkins配置,彻底避免生成带百分号的路径
这是优先级最高的方案,从根源消除特殊字符问题:
- 进入多分支流水线的配置页面,找到「分支源」板块下对应Subversion源的配置项,修改「本地分支名生成规则」,将分支名中的
/直接替换为-或其他合法字符,原来匹配branches/*的foo分支会生成为branches-foo,不会再出现编码后的%2F字符。 - 若使用Jenkinsfile声明式流水线,可在配置块中指定自定义工作目录,强制替换路径中的编码字符:
pipeline { agent any options { customWorkspace "workspace/${JOB_NAME.replace('%2F', '-')}" } // 剩余流水线配置 } - 升级Jenkins Subversion插件至2.15.1及以上版本,该版本新增了「禁用分支路径URL编码」的开关,开启后不会自动将分支名中的
/编码为%2F。
方案2:适配带百分号的路径,修改构建命令逻辑
如果不便修改Jenkins配置,可通过转义处理解决批处理的特殊字符解析问题:
- 报错的根本原因是
%在Windows批处理中是变量前缀的特殊标识符,MSVC自定义构建步骤的执行上下文属于批处理环境,单个%会被识别为变量引用导致路径解析错误,手动执行时无相关变量冲突所以可正常运行。只需要将路径中的单个%转义为%%即可被批处理识别为普通字符。 - 修改MSVC自定义构建步骤的命令,先对
$(ProjectDir)做转义处理再使用,示例如下::: 先把ProjectDir的值存入变量,再转义其中的% set "RAW_PROJ_DIR=$(ProjectDir)" set "SAFE_PROJ_DIR=%RAW_PROJ_DIR:%=%%%" :: 用转义后的路径执行构建命令 CALL "%VS120COMNTOOLS%VsDevCmd.bat" && msbuild.exe /m "%SAFE_PROJ_DIR%toto.sln" /target:build /property:Configuration=Debug - 也可使用Windows 8.3短路径规避特殊字符问题,在对应目录下执行
dir /x即可查看目录的短路径名称,使用短路径执行命令不会触发特殊字符解析。
内容的提问来源于stack exchange,提问作者A. Richard
相关产品推荐
相关产品推荐

