在单条命令中重置ERRORLEVEL以避免Bamboo构建失败
解决Bamboo因编译器警告(ERRORLEVEL=1)判定构建失败的问题
嘿,我之前帮团队处理过一模一样的Bamboo构建问题,给你说个不用批处理文件的单命令解决方案,完美适配你的需求:
核心思路:用cmd强制重置退出码
首先得搞清楚Windows里的小细节:ERRORLEVEL不是普通环境变量,是进程的退出码,直接set ERRORLEVEL=0根本没用,得用exit /b来修改当前cmd进程的退出码——这才是Bamboo真正读取的“错误级别”。
你只需要在Bamboo里把执行命令改成调用cmd.exe,让它帮你先跑编译器,再强制返回0就行,单条命令搞定:
/c "C:\你的编译器路径\compiler.exe [你的编译参数] 2>&1 & exit /b 0"
拆解开给你解释下:
/c:告诉cmd执行完后面的命令就退出2>&1:把编译器的警告/错误输出重定向到标准输出,这样Bamboo的构建日志里能完整看到所有警告,不会丢信息& exit /b 0:不管编译器返回啥退出码,都让cmd进程返回0,这样Bamboo就会认为构建成功
如果你想更精准一点——只有当编译器返回非0(也就是有警告)时才重置退出码,正常成功(退出码0)时保持原样,可以把&换成||:
/c "C:\你的编译器路径\compiler.exe [你的编译参数] 2>&1 || exit /b 0"
||的意思是“前面命令失败(返回非0)时才执行后面的命令”,这样无警告的正常构建就保持原有的成功状态,有警告时才强制让Bamboo不判失败。
Bamboo里怎么配置?
很简单,调整你的构建任务:
- 可执行文件选
cmd.exe(如果系统路径里有,直接写cmd就行,找不到的话写完整路径C:\Windows\System32\cmd.exe) - 参数就填上面的完整命令字符串,替换成你实际的编译器路径和参数就行
关键提醒:别丢了警告信息
一定要加上2>&1,不然编译器的警告可能不会出现在Bamboo的日志里,你就看不到哪里有问题了——咱们要的是不让Bamboo因警告失败,不是要隐藏警告对吧?
这样既满足了你不用批处理文件的要求,又解决了构建误判的问题,还能保留所有警告信息,完美适配你的场景。
内容的提问来源于stack exchange,提问作者Sean Frisbey
相关产品推荐
相关产品推荐

