在GitHub动作中设置Android CI/CD工作流程的简单方法

497 阅读4分钟

今天我将分享我如何在GitHub Actions中为一个安卓项目实现CI/CD工作流

在开发软件时,测试的价值是不可估量的。它不仅使改变小段代码或整个组件后发现错误更加容易,而且通过代码覆盖率,它给开发团队带来额外的信心,以及由此带来的所有好处。

最近在我的工作中,我被分配了一些可以被认为是专门针对DevOps职位的任务,虽然我是专门从事移动开发的,但对每个领域都了解一点总是好的。

我一直在和Jenkins打交道,以便开发一些CI/CD管道,在Firebase测试实验室中运行单元和工具测试,并生成应用程序的不同变体,AAB和APK,准备发布到商店或通过Firebase应用程序分发功能自动上传。

虽然Jenkins很好,但它主要使用bash脚本,这是众所周知的,而且互联网上到处都有资源。这给了我们很多定制化的功能,但我想为我的个人项目试试GitHub Actions,因为我并不真的需要什么巨大的东西,大多数时候我更喜欢简单。

我们先来看看一些重要信息

GitHub Actions 是一个允许开发者更容易地实施 CI/CD 管道的系统,特别是对于初学者来说,与之前所说的 Jenkins 相比。

它提供了已经配置好的机器,可以使用Linux、Windows和Mac,但根据机器的不同,有有限的免费时间。对于较小的项目,在我看来这是一个相当好的起点,特别是如果你只需要Linux,这是最便宜的。

它基本上是通过一个YAML文件来工作的,该文件指示机器要进行哪些操作。这个文件存储在项目仓库中,位于仓库根部的.github/workflows 文件夹中。

GitHub 还提供了可以被 GitHub Actions 访问的秘密密钥的存储。例如,在安卓项目中,如果需要签署APK或AAB文件,而密钥需要在仓库文件中被混淆并不可用,这样就没有人可以窃取它们,这一点就很重要。

代码

如前所述,我们需要一个YAML文件,主要有三个部分。

  • 工作流名称
  • 触发条件
  • 要做的工作

工作流名称将显示在 GitHub 仓库的 Actions 标签中的工作流摘要中,如下图所示,在触发工作流的提交信息下方。

工作流摘要

触发器可以被配置为在不同情况下采取行动。在这个例子中,我展示的是如果我们想在主分支的推送上采取行动,它是如何做到的,但它是超级可配置的。你可以在这里查看所有的选项。

触发条件

作业部分是我们指定要使用的机器和要做的工作的地方。你可以同时运行两个工作,也可以按顺序运行,这样一个工作就会依赖于另一个。

在下面的例子中,你可以看到我是如何配置一个构建Android应用程序的作业,然后运行单元测试。如果这些都成功了,一个发布的AAB就会被编译并作为可下载的工件更新到版本库中。

对于作业,你可以直接在机器上运行Gradle命令,或者使用其他用户开发的GitHub Actions。在这个例子中,我使用了这两个选项,向你展示了这是可能的,而且有时候这样做比我们自己运行整个命令要容易。

由其他用户开发的GitHub Action从我们可以在GitHub配置文件中设置的秘密中获取签署应用的密钥,并输出准备发布到商店的文件。如果你知道GitHub的秘密,设置起来超级简单,但如果你不知道,你可以查看这个仓库 来学习如何实现这个。

签署AAB

如果你想快速复制和粘贴,我会在这里留下一个包含完整代码的GitHub Gist。

总结

根据我的经验,我认为我更喜欢Jenkins,因为我不需要把仓库专门放在GitHub上,我也喜欢用bash脚本来定义CI/CD管道的步骤,而且,我不受限于GitHub提供的机器价格,我可以评估其他选项。

但如果项目规模较小,我不考虑扩大规模,而且我不想考虑Docker和Jenkins的配置,这可能是一个令人头痛的问题,GitHub Actions是我认为最好的选择。