Jenkins 是一个持续集成的工具上,想必大家都有所了解,这里就不再赘述。
最近在做一个C++项目,项目代码使用SVN管理。提交项目代码时,项目成员为了方面,基本上把所有文件(除了中间文件)一股脑地提交了,这就给后面使用Jenkins进行持续集成了挖了一个坑。最后出现了一个现象——本地编译,没有问题,但Jenkins编译死活不成功。
分析原因:自定义环境变量中使用了一个QTDIR,对应的是QT库安装路径。Jenkins提示找不以moc(QT的一个编译工具),但在Jenkins服务器上明明已经配置了该环境变量。
经过查找,发现了VS 2010在编译时会生成一个*.user的文件,在该文件中记录了本地环境变量的配置内容,而这个文件又被项目组成员上传至SVN,这就导致了Jenkins编译时 使用的环境变量内容是*.user中的,而非Jenkins服务器上配置的。 因为Jenkins在编译VS工程(*.sln)时不会生成*.user文件,而VS2010在编译时会生成*.user文件。 这就是Jenkins编译失败,而直接用vs2010却可以编译成功的原因。
以下是*.user 的内容:
一个个小小的失误,浪费了一个多小时的时间来解决,并且在百度上基本搜索不到该错误。做开发真是应该事无巨细呀!献给所有的码农。