代码之家  ›  专栏  ›  技术社区  ›  TrashyMcTrash

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

  •  11
  • TrashyMcTrash  · 技术社区  · 6 年前

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

    似乎大多数可用的测试程序(例如Crashlytics Beta、googleplay)主要集中在发布前不久创建一个Beta版本,但不允许并行托管多个apk。

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

    1. 测试运行
    2. 自动删除APK文件

    我们特别不想在pull请求被合并之后测试APK,而是在开发分支中出现较少bug之前进行测试。

    3 回复  |  直到 6 年前
        1
  •  2
  •   solikhver    6 年前

    Ech版本可以有每个自己的版本字符串,当然 release notes ,帮助QA找到正确的APK。

    问题的第3点可以这样描述: 配置为将生成上载到Crashlytics的CI。 它可以通过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
    
        2
  •  0
  •   M. Galczynski    6 年前

    有很多方法可以实现。但在我看来,最好的办法是创造下一个阶段,将产生apk作为 artefact 稍后,您的QA团队将能够在设备上下载apk并进行测试。阿纳克斯 wrote

        3
  •  0
  •   Nick Cardoso    6 年前

    使您的系统成为服务器。

    之后在生成APK时,给出服务器路径。 所以你需要用一个变量?这将决定您的apk是否部署在本地服务器上。

    完成您的开发后,使之成为现实,然后您的apk将复制到您的本地服务器上。这样QA团队就可以很容易地访问它。

    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);
           }
       }
    }