Android开发者从buddybuild到Jenkins

2018-03-06   出处:jenkins.io/blog  作/译者:Christopher Orr/初心  

       上周,专注于移动应用的托管持续集成服务buddybuild宣布它已经被苹果公司收购,因此其完整的的安卓版本以及免费的IOS用户将在今年三月份初停止使用。

       对于Buddybuild的Android用户来说,这是一个糟糕的2018年的开始,他们需要在不到两个月的时间里寻找Buddybuild的替代品进行移动应用的开发和测试。许多人在Twitter祝贺buddybuild被收购,并向那些需要寻找新工具进行移动应用的开发和测试的人们表示同情。

       尽管Jenkins通常作为自我托管的解决方案(安装超过15万次),而不是像buddybuild这样的托管服务,但我们认为这是非常好的时机来强调一下Jenkins能够提供给Android开发者的一些可能,因为Jenkins具有丰富的插件生态系统。


       常见的工作流程

      Android项目与其他类型的软件开发项目在使用持续集成和持续交付系统(CI / CD)(如Jenkins)的方式上基本没有区别:Android开发人员使用SCM工具(如GitMercurial)进行协同开发;他们将创建合并请求,该请求应该能够被自动验证;并且他们希望得到关于测试失败和代码质量的反馈(例如通过电子邮件或Slack;此外,他们应该能够轻松地将应用程序的新版本进行部署以供Beta测试人员或最终用户使用。

      为此,Jenkins允许你以结构化和可审计的方式(通过Jenkinsfile)定义你的构建和部署管道,支持多种SCM工具,而Jenkins的多分支管道功能会自动地为存储库中的每个新的合并请求创建新的Jenkins作业,并且在分支合并时清除它们。Blue Ocean UI将这些功能集成在一个干净的用户界面中,使我们更加方便地进行Jenkins管道构建。

       构建Android应用程序
      要构建一个Android应用程序,你需要Java开发工具JDK(Jenkins可以自动为你安装)、Android SDK(你可以使用 tool installer通过各个构建代理进行安装,或者你可以使用预安装了Android SDK工具Docker容器)。然后,你可以利用SCM插件来抓取你的项目源代码、利用Android gradle插件通过Gradle Wrapper进行app构建,大多数情况下这样做就像运行./gradlew assembleDebug命令一样简单。一旦你的应用被构建并且被打包成为.apk文件时,你可以使用archiveArtifacts存储APK,使同事可以直接从Jenkins下载APK,以便他们可以尝试最新的构建。


      测试Android应用程序
      Android SDK支持两种类型的测试:运行在JVM上的单元测试以及必须在Android设备或模拟器上运行的instrumentation 测试。这两种类型的测试都可以使用Jenkins来执行,并且由于Android Gradle插件以JUnit XML格式将测试结果写入磁盘,因此可以使用Jenkins的JUnit插件来解析结果,使你能够看到测试报告,并且在测试失败获得通知。
      编译和执行应用程序的单元测试就像运行./gradlew testDebugUnitTest命令来添加另一个构建步骤一样简单。
      同样,可以通过Gradle中的connectedDebugAndroidTest任务编译和执行instrumentation 测试。但是,在执行此操作之前,应确保Android设备已连接到Jenkins构建代理,或者可以使用Android Emulator插件在构建过程中自动为你下载、创建和启动仿真器。还有一些用于云测试服务的插件,如AWS Device Farm。
      在你结束测试之后,你可以使用junit命令来分析测试结果:junit '**/TEST-*.xml'


      静态分析
      与其他Java或Kotlin项目类似,你可以使用类似FindBugs或Checkstyle等静态分析工具扫描你的代码库。 Jenkins中有一些分析插件可以解析这些工具的输出,并向你呈现结果和趋势图,甚至在检测到太多问题会将构建标记为不稳定,导致构建失败。 
      Android SDK提供了另一个有用的名为Lint的静态分析工具。 Android Lint Plugin可以解析此工具的输出,它将分析发现问题,并在Jenkins中为你提供详细报告。几年前,Google工具团队在Google I / O会议上演示了这种功能。


      安全地对Andoroid应用进行签名和部署
      为了发布Android应用,需要使用私钥对其进行签名,你应该尽可能安全地保管该私钥,丢失它意味着你无法将更新发布到你的应用!
      开发人员不必在开发机器上保留签名密钥,可以使用Credentials 插件在Jenkins上安全地存储密钥和其密码。这样就避免了将密码硬编码到build.gradle文件中,或者让它进入你的SCM工具中。
       Credentials插件允许你将秘钥存储在Jenkins中,但秘钥不被使用时它会被加密存储在磁盘上,在构建期间这些秘钥会暂时的可用,以文件的方式存储在构建工作空间中或者被存储为环境变量。
      你可以在build.gradle文件内的一个signingConfig块中使用这样的环境变量,或者你可以使用Android Signing 插件为你的apk签名。
      一旦你制作并签名了可用于生产的APK,你就可以使用Google Play Android Publisher插件自动将其上传到Google Play。 使用此插件的好处是它支持多个APK上传,扩展文件,上传ProGuard映射文件,并支持多版本的发布。此外,由于与Credentials插件的集成,你的Google Play凭证能够被安全地存储在Jenkins上。


       Pipline文件样例
      这里有一个Jenkinsfile文件的简单例子,该文件中定义了可以进行构建、测试、选择性部署Android应用,并且支持多分支的管道。它需要提前安装Pipeline, JUnit, Android Lint, Google Play Android Publisher, 和Mailer等插件。



       不仅仅适用于Android
      虽然buddybuild专注于Android和iOS应用程序,但由于Jenkins的分布式构建代理体系结构,您可以自动执行任何类型的项目。例如,您可以通过添加macOS(或Windows,Linux,BSD ...)代理来扩展Jenkins的功能; 您可以动态调高AWS EC2实例、Microsoft Azure VM或Azure容器实例上的代理; 您可以使用VMware创建代理,等等。

       结束语
      成千上万的Jenkins实例已经在使用各种与Android相关的插件,Pipeline和Blue Ocean用户界面使Jenkins比过去更简单。
      试着用Jenkins构建你的Android项目吧!查看教程,并通过用户的邮件列表或IRC联系我。

      最后,与Jenkins本身一样,所有分发的插件都是开源的,所以请尽情贡献!

       关于作者
      自2008年以来,Christopher Orr一直在Jenkins项目中工作,负责插件开发,在IRC上帮助人们,并在有关Jenkins的会议上与人交流。 他维护了几个与Android相关的插件,并为其他几个插件做出了贡献。


【英文原文】

  https://jenkins.io/blog/2018/01/08/moving-from-buddybuild-for-android/#securely-signing-and-deploying-android-apps

{测试窝原创译文,译者:初心}

译者简介:初心,东南大学在读硕士研究生



欢迎给测试窝投稿或参与内容翻译工作,请邮件至editors@testwo.com。也欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,并与我们的编辑和其他窝友交流。
138°|1383 人阅读|0 条评论

登录 后发表评论