【Gradle-23】CICD 之 GitHub Actions
点击关注公众号,“技术干货”及时达!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 ActionsGitHub 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 工作流[1]仓库查看。
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、流程介绍name:工作流程的名称,可以自己定义。
on:触发工作流运行的事件,比如代码推送(push)、拉取请求(pull_request)、时间计划(schedule)等,这里指定的分支是 master。
push:当代码被推送到指定的分支时触发。pull_request:当有新的拉取请求时触发。schedule:基于时间的触发,比如 “每天晚上 8 点”。jobs:一个或多个任务,每个任务包含一个或多个步骤。
runs-on:任务运行的环境,比如 ubuntu-latest、windows-latest 等。steps:任务中的具体步骤,包括检查代码、设置环境、构建项目、运行测试等。
name:步骤的名称。uses:使用的操作。run:要执行的命令。
2.3.2、具体释义触发工作流运行的事件中,分支指定的是 master,可以自己修改,比如 develop。
steps 中:
actions/checkout@v4:表示检出代码。set up JDK 11:表示 java 运行环境,可以根据自己项目所需环境进行修改,比如 JDK 17。chmod +x gradlew:表示赋予 gradlew 可执行权限。./gradlew build:则表示构建项目。在示例项目中,所需 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、GitHubgithub.com/yechaoa/Gra…[2]
5、相关文档Executing Gradle builds on GitHub Actions[3]GitHub Actions documentation[4]starter workflows[5]Configure Gradle for GitHub Actions workflows[6]About GitHub and Git[7]点击关注公众号,“技术干货”及时达!
阅读原文
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。 项目经理在线