如何为每个请求请求托管一个Android APK文件,以便质量检查人员可以在合并之前对其进行测试?

时间:2018-09-26 15:11:08

标签: android github continuous-integration qa

为了改善我们的质量检查工作流程,我们希望为Github上的每个提取请求自动构建一个APK文件,以便我们可以在合并分支之前对其进行测试。我们已经找到了如何构建文件,但是现在我们想知道如何将其集成到我们的工作流程中。

似乎大多数可用的Beta程序(例如Crashlytics Beta,Google Play)大多专注于在发行前不久创建一个Beta版本,但不允许并行托管多个APK。

这是我们理想的工作流程的一个示例:

  1. 开发人员完成编码并创建请求请求
  2. 运行测试
  3. 如果测试成功,则会自动构建一个APK,并将其上传到某个地方(这是我们要弄清楚的部分)
  4. 质量检查人员查看了请求请求,应该能够轻松地在其测试设备上下载正确的APK
  5. 如果在质量检查过程中没有问题,则合并合并请求请求
  6. APK文件自动删除

我们特别不希望在合并pull-request之后测试APK,而要在我们的develop分支中弹出更少错误之前进行测试。

3 个答案:

答案 0 :(得分:2)

实际上,Crashlytics允许具有多个版本的APK。 Ech版本可以有各自的Version字符串,当然也可以有release notes,以帮助质量检查人员找到正确的APK。

问题的第3点可以这样描述: CI已配置为将构建上传到Crashlytics。 可以通过gradle任务来实现:

gradle assembleRelease crashlyticsUploadDistributionRelease

在这种情况下,具有特殊的构建类型(pullrequest)非常有用。您可以通过通讯组,有关构建的通知和发行说明来指定特殊的分发规则。

build.gradle:

//example function for change log 
def getLastGitCommitMessage() {
  try {
    "git log -1 --pretty=%B".execute().text.trim()
  } catch (e) {
    'Undefined message.'
  }
}

android {
  buildTypes {
    ...
    pullrequest { 
      //invitation
      ext.betaDistributionGroupAliases = "QA, devs"
      // notification
      ext.betaDistributionNotifications = true
      // last commit message as release notes
      ext.betaDistributionReleaseNotes = getLastGitCommitMessage()
    }
  }
}

在这种情况下,构建和上传命令将如下所示:

gradle assemblePullrequest crashlyticsUploadDistributionPullrequest

答案 1 :(得分:0)

使系统成为服务器。

之后,在生成APK时,请提供服务器路径。 如果您这样做,那么每次您的APK更新时, 因此,您需要使用一个变量?哪个决定您的apk是否部署在本地服务器上。

完成开发后,将其设置为true,然后将apk复制到本地服务器上。然后,质量检查小组可以轻松访问它。

Follow this question.

一些演示代码。

debug {
   applicationVariants.all { variant ->
       variant.outputs.each { output ->
           def apk = output.outputFile;
           def newName;
           newName = apk.name.replace("-" + variant.buildType.name, "")
                   .replace(project.name, name);
           newName = newName.replace("-", "-" + version + "-" + milestone +
                   "-" + build + "-");
           output.outputFile = new File(apk.parentFile, newName);
       }
   }
}

答案 2 :(得分:0)

有很多方法可以实现它。但是我认为最好的方法是创建下一个阶段,该阶段将生成artefact的apk,随后您的质量检查团队将能够在设备上下载apk并对其进行测试。作为anaxad wrote,您还可以使用邮件和通讯组列表发送apk文件。但是这样的解决方案会更加困难,因为您需要创建任务(例如使用docker)来发送带有apk的邮件。