如果自上一晚以来没有任何变化,但杰里特(Jerrit)触发了CI生成,如何防止詹金斯触发每晚生成?

时间:2018-07-16 04:13:50

标签: android jenkins continuous-integration gerrit

我们有

当前构建环境设置:

  • Android项目包含数百个存储库。
  • 使用Gerrit进行代码审查过程
  • 构建服务器Jenkins
  • 一个由以下两种方式触发的构建计划:
    • CI构建类型: Gerrit在创建补丁集时触发
    • 夜间构建类型:由计时器(每晚)
  • 一个shell脚本,它根据是否设置了$GERRIT*变量来处理两种情况。该脚本的另一个不同之处在于,我们在夜间进行make clean

因此,构建结果可以如下所示:

Build History of CI & Nightly in one view

不能完全确定以这种方式进行此操作的最初动机是什么,但是

好处可能是:

  • 更少的磁盘空间,仅需要1个Jenkin的工作空间
  • 最初可能会缩短构建时间
  • 在一个视图中可以看到CI和NIGHTLY构建的状态

但是缺点是:

  • 当先前的NIGHTLY与当前的NIGHTLY之间没有区别时(我可以在shell脚本中做到这一点,以检索上一个/真实的NIGHTLY回购清单),因此无法(按计时器)有条件地构建NIGHTLY(并且通过计时器)詹金斯(Jenkins)触发了构建...因此已经有一个无效的记录,因为我现在退出脚本。因为要说明数百个Android存储库之间的差异,是.repo/manifest.xml文件从上次构建(最有可能是CI,基于Gerrit变更集)到当前每晚之间都留在磁盘上。
  • 也不总是正确地了解有关版本(两种类型)之间的更改的信息

到目前为止我要去哪里?

  • 了解了Run Condition Plugin,但是在我开始构建它之前,还没有弄清楚如何将最新的/即时的NIGHTLY构建repo / manifest.xml与当前清单传递给它(调用{{1 }})
  • 从那里使用Jenkins CLI plugin to trigger a Jenkins build。到目前为止,我认为是可以实现的。但是我仍然感到-如果我需要的全部逻辑都放在外部脚本中,为什么我根本需要詹金斯。
  • 有人指出我有关how to get changes since the last build的问题。但是我不知道如何在Jenkins中实现它。

任何人都有使用Jenkins和Gerrit构建Android项目的经验吗?您有什么解决方案?如果在主服务器上进行了真正的更改,则如何实现NIGHTLY触发(忽略CI Gerrit构建)。还要查看构建之间的真正变化(尤其是在此过程中,这会在NIGHT更改)。

对我来说,理想的选择是使用两个单独的工作区来制定两个单独的构建计划,但是我的磁盘空间有限,所以买不起。 如果有帮助,这是我们的build script

0 个答案:

没有答案