如何为每个拉取请求托管Android APK文件,以便QA可以在合并之前测试它们?

Tra*_*ash 11 continuous-integration android qa github

为了改进我们的QA工作流程,我们希望为Github上的每个pull-request自动构建一个APK文件,以便我们可以在合并分支之前对其进行测试.我们已经想出了如何构建文件,但我们现在想知道如何将它集成到我们的工作流程中.

似乎大多数可用的Beta程序(例如Crashlytics Beta,Google Play)主要关注在发布前不久创建一个测试版,但不允许并行托管多个APK.

以下是我们理想工作流程的示例:

  1. 开发人员完成编码并创建拉取请求
  2. 测试运行
  3. 如果测试成功,APK会自动构建并上传到某个地方(这是我们想要弄清楚的部分)
  4. QA会查看pull-request,并且应该可以在他们的测试设备上轻松下载正确的APK
  5. 如果在QA期间没有问题,则合并拉取请求
  6. APK文件会自动删除

我们特别不想在pull-request合并之后测试APK,而是测试之前在我们的开发分支中弹出更少的bug.

sol*_*ver 2

实际上 Crashlytics 允许有多个版本的 APK。每个版本都可以有自己的版本字符串,当然还有发行说明,以帮助 QA 找到正确的 APK。

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

gradle assembleRelease crashlyticsUploadDistributionRelease
Run Code Online (Sandbox Code Playgroud)

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()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

gradle assemblePullrequest crashlyticsUploadDistributionPullrequest
Run Code Online (Sandbox Code Playgroud)