我们有
当前构建环境设置:
- Android项目包含数百个存储库。
- 使用Gerrit进行代码审查过程
- 构建服务器Jenkins
一个由以下两种方式触发的构建计划:
- CI构建类型: Gerrit在创建补丁集时触发
- 夜间构建类型:由计时器(每晚)
- 一个shell脚本,它根据是否设置了
$GERRIT*
变量来处理两种情况。该脚本的另一个不同之处在于,我们在夜间进行make clean
。
因此,构建结果可以如下所示:
不能完全确定以这种方式进行此操作的最初动机是什么,但是
好处可能是:
- 更少的磁盘空间,仅需要1个Jenkin的工作空间
- 最初可能会缩短构建时间
- 在一个视图中可以看到CI和NIGHTLY构建的状态
但是缺点是:
- 当先前的NIGHTLY与当前的NIGHTLY之间没有区别时(我可以在shell脚本中做到这一点,以检索上一个/真实的NIGHTLY回购清单),因此无法(按计时器)有条件地构建NIGHTLY(并且通过计时器)詹金斯(Jenkins)触发了构建...因此已经有一个无效的记录,因为我现在退出脚本。因为要说明数百个Android存储库之间的差异,是
.repo/manifest.xml
文件从上次构建(最有可能是CI,基于Gerrit变更集)到当前每晚之间都留在磁盘上。
- 也不总是正确地了解有关版本(两种类型)之间的更改的信息
到目前为止我要去哪里?
任何人都有使用Jenkins和Gerrit构建Android项目的经验吗?您有什么解决方案?如果在主服务器上进行了真正的更改,则如何实现NIGHTLY触发(忽略CI Gerrit构建)。还要查看构建之间的真正变化(尤其是在此过程中,这会在NIGHT更改)。
对我来说,理想的选择是使用两个单独的工作区来制定两个单独的构建计划,但是我的磁盘空间有限,所以买不起。
如果有帮助,这是我们的build script。