跳转至正文
CI/CD

使用 GitHub Actions 管理开发与生产环境构建

使用 Capgo 将 dev build 发布到特定 channel,让团队无需等待 Apple 和 Google 审核即可试用您的 Capacitor Ionic 应用

使用 GitHub actions 管理开发与生产环境的 build Capgo

本教程聚焦于 GitHub 托管,但稍作调整即可适配任何其他 CI/CD 平台。

前言

请确保先将你的 Capacitor 应用添加到 Capgo,本教程只聚焦上传阶段

Commit 规范

首先,你需要开始遵循 commit 规范 约定式提交 (conventional commits)` 这将帮助工具链理解如何升级版本号,学会它只需 5 分钟。

约定式提交 (Conventional commits)

用于 tag 的 GitHub actions

接下来,你需要创建第一个 GitHub action,以实现自动 build 并创建 tag。

在此路径下创建文件: .github/workflows/bump_version.yml

内容如下:

name: Bump version

on:
  push:
    branches:
      - main
      - development

jobs:
  bump-version:
    if: "!startsWith(github.event.head_commit.message, 'chore(release):')"
    runs-on: ubuntu-latest
    name: "Bump version and create changelog with standard version"
    steps:
      - name: Check out
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
          filter: blob:none
          token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}'
      - name: Git config
        run: |
          git config --local user.name "github-actions[bot]"
          git config --local user.email "github-actions[bot]@users.noreply.github.com"
      - name: Create bump and changelog
        if: github.ref == 'refs/heads/main'
        run: npx capacitor-standard-version
      - name: Create bump and changelog
        if: github.ref != 'refs/heads/main'
        run: npx capacitor-standard-version --prerelease alpha
      - name: Push to origin
        run: |
          CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
          remote_repo="https://${GITHUB_ACTOR}:${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git"
          git pull $remote_repo $CURRENT_BRANCH
          git push $remote_repo HEAD:$CURRENT_BRANCH --follow-tags --tags

这将为 main 分支的每次 commit 发布一个 tag,并生成一个 alpha release, development最后,为该分支的每次 commit 生成一条 changelog 条目。 CHANGELOG.md.

如果你没有这个文件,别担心,它会自动为你创建。

要实现此功能,你需要创建一个 个人访问令牌 (PERSONAL ACCESS TOKEN) 并将其添加到你的 GitHub secrets 命名为 PERSONAL_ACCESS_TOKEN.

这是为了让 CI 能够提交 changelog 并进行版本号更新。

创建令牌时,请将有效期设置为 never 并将权限范围 (scope) 设置为 repo.

在你的 version 中设置 package.json 键。请使用应用商店中发布的最新版本号。

这仅在第一次时需要,之后工具会自动保持更新。

现在你可以提交这两个文件,并在 GitHub 中看到你的第一个 tag 了!

capacitor-standard-version 是负责实现这一功能的 package,默认情况下它还会更新 Android 和 iOS 的版本号

GitHub 的构建 action

在此路径下创建文件: .github/workflows/build.yml

内容如下:

name: Build source code and send to Capgo

on:
  push:
    tags:
      - '*'
      
jobs:
  deploy:
    runs-on: ubuntu-latest
    name: "Build code and release"
    steps:
      - name: Check out
        uses: actions/checkout@v6
      - name: Install dependencies
        id: install_code
        run: npm i
      - name: Build
        id: build_code
        run: npm build
        env:
          MY_ENV_VAR: ${{ secrets.MY_ENV_VAR }}
      - name: Create Release Alpha
        if: "contains(github.ref, '-alpha.')"
        id: create_release_prepro
        run: npx @capgo/cli@latest bundle upload -a ${{ secrets.CAPGO_TOKEN }} -c development
      - name: Create Release Production
        if: "!contains(github.ref, '-alpha.')"
        id: create_release_prod
        run: npx @capgo/cli@latest bundle upload -a ${{ secrets.CAPGO_TOKEN }} -c production

这会在发送到 Capgo 之前,先安装并构建你的依赖。

如果你的构建命令不同,可以在 build_code 步骤中修改。

如果需要环境变量,请使用 MY_ENV_VAR 并设置 secret 在你的 GitHub 项目设置中,然后选择 secret,再选择 GitHub Action。

要让 Capgo upload 正常工作,你需要获取 Capgo 的 API 密钥,并把它添加到 你的 GitHub 仓库的 secret 中, 命名为 CAPGO_TOKEN.

现在你可以提交这两个文件,并在 Capgo 中看到你的第一个版本了!

添加这个 commit 会为 production 和 development channel 生成新的 Capacitor build。

你应该在 Ionic build 步骤中加入测试,确保你的 code 正常工作。

前往你的 Capgo dashboard 查看刚刚生成的 build,你现在已经拥有了自己的 CI/CD 系统。

继续阅读:使用 GitHub actions 管理 development 和 production build

如果你正在使用 使用 GitHub Actions 管理开发与生产环境构建 要规划 Channel 路由和分阶段发布,请将其与 通道 有关 Channels 的实现细节, 通道 有关 Channels 的实现细节, 通道 有关 Channels 的实现细节, Beta 测试解决方案 适用于 Beta Testing Solution 产品工作流的,以及 版本定向解决方案 适用于 Version Targeting Solution 产品工作流的。

为 Capacitor 应用提供 Live Updates

当 Web 层出现线上 Bug 时,通过 Capgo 发布修复,而不用等 App Store 审核好几天。用户会在后台收到更新,原生变更则仍走正常审核流程。

博客最新动态

Capgo 为你提供打造真正专业的移动应用所需的最有价值的洞察。