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

标签 android github continuous-integration

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

似乎大多数可用的 Beta 程序(例如 Crashlytics Beta、Google Play)主要侧重于在发布前不久创建一个 Beta 版本,但不允许同时托管多个 APK。

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

  1. 开发人员完成编码并创建拉取请求
  2. 测试运行
  3. 如果测试成功,将自动构建一个 APK 并上传到某处(这是我们试图找出的部分)
  4. QA 查看拉取请求,应该能够在他们的测试设备上轻松下载正确的 APK
  5. 如果在 QA 期间没有问题,则合并拉取请求
  6. APK 文件自动删除

我们特别不想在拉取请求合并后测试 APK,而是在我们的开发分支中弹出更少的错误之前进行测试。

最佳答案

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

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

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

关于android - 我如何为每个拉取请求托管一个 Android APK 文件,以便 QA 可以在合并之前测试它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52521009/

相关文章:

android - 从 github 导入 ADT Eclipse 中的 android 项目

javascript - githubs api 搜索参数是什么来将结果限制为仅前 X?

amazon-web-services - 如何使用 GitLab CI 部署到 AWS Beanstalk

android - eclipse Juno 中的 google play services( Rev. 30) 中没有 libproject

android - 从 Fragment 请求权限时,在 Activity 的 onRequestPermissionsResult 中收到不正确的 resultCode

github - 从 github 存储库加载时 Gradle 独立插件未知属性

azure-devops - 有没有办法在变量组中设置变量

ios - Jenkins - Xcode 构建工程协同设计失败

android - Android : how to prevent text selection? 上运行的 Web 应用程序

锁定屏幕上的 Android 对话框