使用 Atlassian Bamboo 的 Android CI

Posted

技术标签:

【中文标题】使用 Atlassian Bamboo 的 Android CI【英文标题】:Android CI with Atlassian Bamboo 【发布时间】:2014-09-12 02:54:38 【问题描述】:

有没有人有任何好的资源来设置 Bamboo 对 android 项目进行 CI ?我有我的设置来提取源代码并用 ant 编译它。但我很想知道如何设置 JUnit 测试,这些测试位于单独的项目中。

谢谢

【问题讨论】:

您能在这里分享使用 gradle 构建 Android 项目的指南吗? 我们将 JFrog Artifactory 插件安装到竹子中,它有一个构建 gradle 任务。你不需要使用 JFrog 来使用。然后,您可以在任务类型“clean assembleDebug”下说出任务名称 我已经尝试过,但出了点问题。上次我尝试这个时,至少构建正在启动并抛出失败输出,但这次没有发生任何事情。让我检查一下我的身边,很快就会回复你。 【参考方案1】:

我已经弄清楚如何使用 Bamboo CI 和带有 gradle 的新 Android Studio 项目来做到这一点。 Bamboo 还没有很好的任务下降,但您可以利用脚本运行器来完成它。我们将基本构建任务设置如下:

源代码签出。 脚本任务:

脚本位置:内联 脚本主体:gradlew.bat assembleDebug test(我们的 Bamboo 服务器是 Windows,所以我们使用 bat 文件,linux 使用 ./gradlew assembleDebug 测试命令)

然后我们添加一个JUnit解析器的最终任务,我们使用结果目录行:**/test-results/debug/*.xml

至于测试,我们使用 Robolectric Gradle 测试,它会生成 JUnit 测试结果。

我希望这对正在研究如何使用 Android 设置 Bamboo 的其他人有所帮助,希望他们有一天会像对 .NET 一样添加支持,因为它只是构建和测试的一项任务。脚本命令感觉有点像 hack。

如果有人正在寻找 Ant 风格的测试,我也可以分享,但希望现在每个人都已从 eclipse 迁移到 Android Studio。我会说 Ant 和 Instrumentation 所需的步骤需要更多时间来设置,并且我必须使用在服务器上运行的模拟器来进行测试。

【讨论】:

我的任务是在仓库外寻找测试报告,像这样:Could not find test result reports in the /Users/<user>/bamboo-agent-home/xml-data/build-dir/<bamboo_pbuild_name> directory 这仅在连接了一个设备或模拟器已启动时才有效。【参考方案2】:

除了使用 Bamboo 为我的 Android 项目构建 APK 之外,我还想使用 Bamboo 针对 Android 模拟器运行基于 JUnit 的测试。经过相当多的“反复试验”,主要是围绕寻找一种可靠的方式来启动和停止 Android 模拟器,这是我为我的 Bamboo 构建计划提出的。请参阅Bamboo waits for script task to terminate, although it is run in the background,了解有关我为何采用下述方法的更多背景信息。

我的 Bamboo 计划是一个阶段和两个工作。这些作业使用在同一系统上执行的两个代理运行。两个作业并行启动和运行。一项作业使用 Android SDK 模拟器命令启动 Android 模拟器。另一个作业等待模拟器启动,构建移动应用程序,针对模拟器运行测试,然后使用始终执行的最终任务停止正在运行的模拟器,即使构建作业中的前一个任务失败也是如此。

模拟器作业在启动模拟器后确实会“卡住”,因为它正在等待模拟器进程完成。当构建作业运行时,构建作业中的最后一个任务会停止模拟器,从而导致模拟器作业完成,因为模拟器进程不再运行。

以下是构建作业的关键任务详细信息:

第一个任务是等待模拟器启动的脚本任务。如果模拟器无法启动,下面的 adb -s 命令将失败,从而导致此任务失败。

echo "Waiting 60 seconds for the Android emulator to start"
sleep 60
echo "See if Emulator is up and running"
$bamboo.ANDROID_HOME/platform-tools/adb -s emulator-5554 shell getprop dev.bootcomplete

第二个和第三个任务检查源代码并使用 Gradle 构建应用程序。构建针对正在运行的模拟器运行 JUnit 测试。

配置为最终任务的第四个任务是停止模拟器的脚本任务。

echo "Stopping the Android emulator"
$bamboo.ANDROID_HOME/platform-tools/adb -s emulator-5554 emu kill

【讨论】:

以上是关于使用 Atlassian Bamboo 的 Android CI的主要内容,如果未能解决你的问题,请参考以下文章

Atlassian Bamboo如何识别python pytest报告[关闭]

Bamboo Atlassian:如何在阶段之间共享变量

ruby Atlassian Bamboo的示例serverspec测试

Jenkins 和 Atlassian Bamboo 的集成

将 Atlassian Bamboo 用于 .Net 项目的 CI

如何使用 NUnit 3 在 Atlassian Bamboo 中运行 NUnit Runner?