Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果自昨晚以来没有任何更改,但Gerrit触发了CI构建,如何防止Jenkins触发夜间构建?_Android_Jenkins_Continuous Integration_Gerrit - Fatal编程技术网

Android 如果自昨晚以来没有任何更改,但Gerrit触发了CI构建,如何防止Jenkins触发夜间构建?

Android 如果自昨晚以来没有任何更改,但Gerrit触发了CI构建,如何防止Jenkins触发夜间构建?,android,jenkins,continuous-integration,gerrit,Android,Jenkins,Continuous Integration,Gerrit,我们有 当前生成环境设置: Android项目由成百上千的回购协议组成 对于使用Gerrit的代码审查过程 构建服务器Jenkins 一个由两种方式触发的构建计划: CI生成类型:Gerrit在创建补丁集时触发 夜间构建类型:通过计时器(每晚) 一个shell脚本,根据是否设置了$GERRIT*变量来处理这两种情况。另一个区别是脚本所做的,因为我们每晚都做makeclean 因此,构建结果可以如下所示: 不完全确定以这种方式做这件事的最初动机是什么,但是 好处可以是: 磁盘空间更少,

我们有

当前生成环境设置:
  • Android项目由成百上千的回购协议组成
  • 对于使用Gerrit的代码审查过程
  • 构建服务器Jenkins
  • 一个由两种方式触发的构建计划:
    • CI生成类型:Gerrit在创建补丁集时触发
    • 夜间构建类型:通过计时器(每晚)
  • 一个shell脚本,根据是否设置了
    $GERRIT*
    变量来处理这两种情况。另一个区别是脚本所做的,因为我们每晚都做
    makeclean
因此,构建结果可以如下所示:

不完全确定以这种方式做这件事的最初动机是什么,但是

好处可以是:
  • 磁盘空间更少,只需要1个Jenkin的工作区
  • 也许最初的建造时间会更快
  • 在一个视图中,可以看到CI和夜间构建的状态
然而,缺点是:
  • 当前一个晚上和当前晚上没有差异时(我可以在shell脚本中执行此操作以检索上一个/真正的晚上回购清单,但那已经是Jenkins触发构建的时间了…因此已经有一个无效记录,因为我在现阶段退出脚本)。因为与上百个Android存储库不同的是磁盘上的
    .repo/manifest.xml
    文件,它是上次构建(很可能是CI,基于Gerrit changeset)和当前夜间构建的
  • 也不总是正确的信息之间的变化(两种类型)
到目前为止我到哪里去了?
  • 在开始构建之前,我已经了解了上一次/真正的夜间构建repo/manifest.xml以及与当前清单相同的内容(调用
    repo forall-c'git checkout origin/otira_development'
  • 从那里开始使用。到目前为止,这是最接近的,我认为是可以实现的。但我仍然觉得,如果我需要的全部逻辑都存在于外部脚本中,那么我为什么需要Jenkins呢
  • 有人给我指出了这个问题。但是我不知道如何在Jenkins中实现它
有没有人有使用Jenkins和Gerrit构建Android项目的经验?你的解决方案是什么?如何实现在主机上发生真正更改时每晚触发(忽略CI Gerrit构建)。还可以看到构建之间的真正变化(尤其是夜间,因为它们受到此实现的影响)

对我来说,理想的做法似乎是使用两个单独的工作区,有两个单独的构建计划,但我的磁盘空间有限,所以我负担不起。
如果这有帮助的话,下面是我们的。

您使用詹金斯的目的是什么?在没有Android Studio的情况下创建Android APK?我在问……我们正在构建一个Android平台(不是APK),所以Jenkins构建被触发:-由Gerrit变更集验证(给出+1)变更的可构建性。-通过一个定时器,我们每晚都会进行清理,所以我们得到了Android操作系统的图像,我们会将这些图像闪存到设备上,并在设备上运行CTS测试。我已经问过自己——如果我仍然必须在一个外部脚本中编写所有的构建逻辑,为什么我需要使用Jenkins呢。对于CI来说,它的好处似乎是它可以由Gerrit自动触发,但对于每晚我几乎不需要它,但如果有一个它创建的记录就好了。