使用 GitHub Actions 为 Android 自动发布
每当我们构建应用程序并将代码推送到 GitHub 时,很明显我们可能想要创建一个发布,以便人们可以使用它,而无需在他们的本地环境中构建项目。此版本可以是 Android 项目的 APK 或 Web 开发项目的托管网站。我们将在这里讨论Android项目。因此,所有这些都可以通过使用 Releases 部分来完成,每次我们通过为每个版本设置 Release Name、Release Tag 和适当的描述来对代码进行富有成效的修改时,都会生成一个新版本。
重复相同的任务有时会让人感到压力和单调。因此,这里出现了使用 GitHub Actions 构建自动发布的功能。每次我们有一个合并的拉取请求,或者如果代码的维护者将一些更改推送到代码库,构建代码、创建 APK 和发布它的过程就会被触发。因此,手动创建发布的过程被释放。为了开始,我建议对如何使用 GitHub Actions 构建 CI 管道有一个基本的了解。创建一个名为build-and-release.yml的 .yml 文件 在项目根目录下的.github/workflows目录中。开始在该文件中编写代码。
name: Build and Release
on:
push:
branches:
- master
tags:
- "v*"
jobs:
apk:
name: Generate APK
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2.4.0
- name: Setup JDK
uses: actions/setup-java@v2.5.0
with:
distribution: temurin
java-version: "11"
- name: Set execution flag for gradlew
run: chmod +x gradlew
- name: Build APK
run: bash ./gradlew assembleDebug --stacktrace
- name: Upload APK
uses: actions/upload-artifact@v1
with:
name: apk
path: app/build/outputs/apk/debug/app-debug.apk
release:
name: Release APK
needs: apk
runs-on: ubuntu-latest
steps:
- name: Download APK from build
uses: actions/download-artifact@v1
with:
name: apk
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.run_number }}
release_name: ${{ github.event.repository.name }} v${{ github.run_number }}
- name: Upload Release APK
id: upload_release_asset
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: apk/app-debug.apk
asset_name: ${{ github.event.repository.name }}.apk
asset_content_type: application/zip
name是工作流的全名,将显示在操作选项卡下的工作流列表中。 on定义工作流何时触发。在这里,我们愿意在将代码推送到 master 分支或指定以v为前缀的新标签时立即触发工作流。正如我们所知,每个工作流都有一些在流程被触发时要执行的作业,因此我们在这里制作了两个标题为apk和release的作业。
在第一个作业中我们指定名称为Generate APK ,第一步是设置环境,它由runs-on 指定。这里我们使用 GitHub 托管的 ubuntu-latest。在此之后,我们指定了将签出$GITHUB_WORKSPACE 下的存储库的签出操作,以便我们正在编写的工作流可以访问它。然后我们设置JDK和构建 apk。完成后,我们将从目录app/build/outputs/apk/debug/app-debug.apk 获取 apk 并将其上传到 GitHub 的工件部分。
所有这些总结了我们构建 apk、从生成它的目录中检索它并将其上传到工件部分的初始任务。现在我们将在下一个工作中使用这个 apk 创建一个发布,即发布 名称发布 APK。
首先,我们指定要执行这个作业,必须完成标题为 apk 的作业,这是通过编写需要:apk 来完成的。正如我们在之前的工作中所做的那样,这里我们也将环境设置为ubuntu-latest。我们在上一个作业中将 apk 上传到了 artifacts 部分,因此我们现在下载该 apk 并开始创建一个版本。
要创建一个发布,这个作业需要有虚拟环境提供的 GITHUB_TOKEN 并且可以通过简单地写入${{ secrets.GITHUB_TOKEN }} 来访问。现在,对于创建的每个版本,必须有该特定版本的标签名称和版本名称。因此,为了使其动态化,我们将tag_name指定为运行编号,即${{ github.run_number }} ,并将release_name指定为存储库名称以及运行编号,即${{ github.event.repository.name }} v${{ github .run_number }}。
现在发布已经创建,我们要上传发布 apk。因此,再次为此我们需要为工作提供 GITHUB_TOKEN 。我们将upload_url定义为上传资产的URL为${{steps.create_release.outputs.upload_url}} , asset_path将从其中提取apk为apk/app-debug.apk,asset_name用于设置apk的名称作为${{ github.event.repository.name }}.apk和assets_content作为application/zip。
完成工作流程编写后,提交更改并转到“操作”选项卡,您将看到正在运行的工作流程。
当 Generate APK 和 Release APK 这两个作业都显示绿色检查时,转到 Code 并在右侧的 Releases 部分中,您将看到一个发布的版本,其名称与 v1 中的存储库名称相同。
所有这一切都结束了我们编写工作流的任务,其中每次将一些更改推送到主分支时,它都会被触发,最终创建一个发布并将其上传到 GitHub 存储库的发布部分。因此,我们不再需要手动创建发布。