📌  相关文章
📜  使用 GitHub Actions 为 Android 自动发布

📅  最后修改于: 2022-05-13 01:58:11.180000             🧑  作者: Mango

使用 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为前缀的新标签时立即触发工作流。正如我们所知,每个工作流都有一些在流程被触发时要执行的作业,因此我们在这里制作了两个标题为apkrelease的作业。

在第一个作业中我们指定名称为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 }}.apkassets_content作为application/zip。

完成工作流程编写后,提交更改并转到“操作”选项卡,您将看到正在运行的工作流程。

当 Generate APK 和 Release APK 这两个作业都显示绿色检查时,转到 Code 并在右侧的 Releases 部分中,您将看到一个发布的版本,其名称与 v1 中的存储库名称相同。

所有这一切都结束了我们编写工作流的任务,其中每次将一些更改推送到主分支时,它都会被触发,最终创建一个发布并将其上传到 GitHub 存储库的发布部分。因此,我们不再需要手动创建发布。