• 作者:老汪软件技巧
  • 发表时间:2024-08-28 11:02
  • 浏览量:

本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!

1、前言

在前面的章节中曾多次提到CI/CD以及自动化构建等名词,今天就来介绍下CI/CD以及GitHub Actions。

1.1、CI 是什么

CI 是持续集成,它是一种需要频繁提交代码到共享仓库的软件实践。 频繁提交代码能较早检测到错误,减少在查找错误来源时开发者需要调试的代码量。 频繁的代码更新也更便于从软件开发团队的不同成员合并更改。 这对开发者非常有益,他们可以将更多时间用于编写代码,而减少在调试错误或解决合并冲突上所花的时间。

提交代码到仓库时,可以持续创建并测试代码,以确保提交未引入错误,包括代码语法检查、安全性检查、代码覆盖率、功能测试及其他自定义检查。

1.2、CD 是什么

CD 是持续部署,它是使用自动化发布和部署软件更新的做法。 作为典型 CD 过程的一部分,代码在部署之前会自动构建并测试。持续部署通常与持续集成相结合。

1.3、GitHub Actions 是什么1.3.1、GitHub

介绍GitHub Actions之前,先介绍GitHub是什么,GitHub 是一个基于云的平台,可以在其中存储、共享和与他人合作编写代码。因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。

GitHub 是目前最流行的代码托管平台之一,它不仅是一个代码仓库,也是一个充满活力的技术社区,为开发者提供了一个交流、合作和学习的平台。

GitHub发展至今,其功能除了代码托管之外,还有GitHub Copilot,以及GitHub Actions等等。

1.3.2、GitHub Actions

GitHub Actions 是一个持续集成和持续部署 (CI/CD) 平台,可让您自动化构建、测试和部署流程。您可以创建工作流程来构建和测试对存储库的每个拉取请求,或将合并的拉取请求部署到生产环境中。

GitHub Actions 不仅仅是 DevOps,它还允许您在存储库中发生其他事件时运行工作流程。例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加适当的标签。

GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,或者您可以在自己的数据中心或云基础设施中托管自己的自托管运行器。

2、GitHub Actions 实践

略过注册账号和新建仓库的流程,默认你已经有GitHub账号且已经有代码仓库托管了(你已经是个成熟的开发了)。

2.1、创建工作流

打开GitHub,进入仓库首页,点击「Actions」选项,进入创建新的工作流程页面。

2.2、工作流配置

然后找到「Android CI」工作流,然后点击Configure按钮进入配置页面。

左上角是配置文件的路径,项目/.github/workflow/为固定路径,跟我们前面介绍的libs.versions.toml文件类似,也是约定大于配置。

android.yml就是具体的配置文件,yml是YAML文件的缩写,是一种灵活且强大的数据序列化格式,非常适合用于配置文件、脚本语言和 CI/CD 等场景,github会识别这个yml文件并执行其工作流。

左边内容区就是工作流的具体流程,下面详细讲。

内容区右边是工作流市场,有一些大家工作流中常用的功能,比如添加缓存、上传构建产物等。

右上角「Commit changes」按钮则是提交你的工作流到仓库,以便其可以工作。

2.3、工作流介绍

github为我们创建了一个默认的模版,更多模块可以去github工作流仓库查看。

name: Android CI
on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: set up JDK 11
      uses: actions/setup-java@v4
      with:
        java-version: '11'
        distribution: 'temurin'
        cache: gradle
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build

2.3.1、流程介绍2.3.2、具体释义

触发工作流运行的事件中,分支指定的是master,可以自己修改,比如develop。

steps中:

在示例项目中,所需java环境是JDK17,所以我们这里只修改一下JDK版本为17就可以了,其他配置先试用默认即可。

修改完,我们点击右上角的「Commit changes」按钮,将工作流提交到仓库。

2.4、运行工作流

提交之后就会自动触发工作流运行,如下图所示:

运行完成的效果,如下图所示:

根据右侧的运行时间可以发现,构建耗时为12m 30s,还是挺久的,这是因为第一次运行需要一些环境安装配置,以及没有缓存。

2.5、查看运行日志

点击工作流运行记录可以查看build日志,可以看到我们配置的任务的执行情况。

根据我过往的经验,主要关注build with gradle,构建失败的情况下需要具体的错误日志来定位问题。

如下图所示:

其次,是checkout中的Fetching the repository,里面包含了当前构建的分支信息,有时候构建失败可能是分支不对。

如下图所示:

2.6、自定义工作流

可以根据项目需求进一步自定义工作流,比如配置Gradle缓存、增加Lint检查、或者发布APK。

2.6.1、配置Gradle缓存

在steps中添加Setup Gradle步骤,代码如下:

    - name: Setup Gradle
      uses: gradle/actions/setup-gradle@v4

2.6.2、添加Lint检查

    - name: Run Lint
      run: ./gradlew lint

2.6.3、打包并发布APK

    - name: Build APK
      run: ./gradlew assembleRelease
    - name: Upload Release APK
      uses: actions/upload-artifact@v2
      with:
        name: app-release.apk
        path: app/build/outputs/apk/release/app-release.apk

2.7、设置环境变量

我们还可以设置一些环境变量,然后在工作流中读取并使用,比如签名信息。

设置环境变量我们需要用到GitHub Secrets,项目 > Settings > Secrets and variables > New repository secrets

引用代码如下:

- name: Sign and release
  env:
    KEYSTORE_FILE: ${{ secrets.KEYSTORE_FILE }}
    KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
    KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
    KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
  run: |
    echo $KEYSTORE_FILE | base64 --decode > keystore.jks
    ./gradlew signingReport
    ./gradlew bundleRelease

3、总结

通过本文的介绍,我们了解了CI/CD的基本概念,以及如何使用GitHub Actions来实现Android项目的自动化构建和部署。希望本文对你有所帮助,让你的项目开发更加高效。

4、GitHub

/yechaoa/Gra…

5、相关文档