设置 CI/CD 为 Capacitor 应用程序可能会很复杂和耗时。以下是您需要了解的内容:
推荐用于新构建:使用 Capgo 构建
我们现在建议使用 Capgo 构建与 Capgo CLI 用于本机 Capacitor 构建。 本 Fastlane 指南保留用于维护现有 GitHub Actions pipeline 的团队,但新 Android 构建应使用 Capgo CLI 以免自己维护 Fastlane、Gradle 运行器、密钥库和上传脚本。
前提条件
开始之前,您需要设置:
- 一个具有管理员权限的 GitHub 账户
- 已在 Google Play 商店发布的应用程序
- Android 签名密钥和密钥库文件
- Google Cloud Console 项目,已启用 Play Store API
- 具有适当权限的服务账户
- 对 GitHub Actions 工作流程的理解
- 对 Fastlane 配置的了解
- 维护和调试管道所需的时间
Capgo 由 Capgo 为 CI/CD 构建
避免Fastlane、Gradle runner、keystore和上传脚本的维护工作。 Capgo 构建 在您的现有CI/CD管道中生成签名的原生Android构建。
- 从您的现有CI/CD管道中运行已签名的原生Android构建:: 触发 Capgo 从 GitHub Actions、GitLab CI、Jenkins 或本地脚本后,构建您的 Web 构建和
npx cap sync. - : 在您的Web构建之后从__CAPGO_KEEP_1__ Actions、GitLab CI、Jenkins或本地脚本中触发__CAPGO_KEEP_0__ 构建从CI密钥中签名
- : 在您的CI密钥中保留Android密钥库、密钥别名、密码和Play Console服务帐户JSON。: Capgo Build 提供维护的 Android 构建环境,因此您不需要管理 SDK 镜像、Gradle 缓存问题或 Fastlane 通道。
- : __CAPGO_KEEP_0__ 构建提供维护的Android构建环境,因此您不需要管理__CAPGO_KEEP_1__镜像、Gradle缓存问题或Fastlane通道。下载签名的构件用于QA或通过Capgo CLI提交发布构件。
Pricing
- Capgo 计划从每月 12 美元起始
- 包括即时 OTA 更新和每月约 15 个本机构建
- 额外的构建分钟以分钟计费,通过积分进行计费
在 CI/CD 中设置 __CAPGO_KEEP_0__ 构建
手动设置指南
GitHub Actions 价格

GitHub 构建动作价格
- __CAPGO_KEEP_0__ 构建动作提供基于您的仓库类型的免费分钟数:
- 公共仓库:每月 2,000 分钟
私有仓库:每月 2,000 分钟(Linux 运行器)
手动设置步骤
- 创建Android Keystore
- 设置Google Play服务帐户
- 设置Fastlane
- 配置GitHub密钥
- 创建GitHub Actions工作流
1. 创建Android Keystore
在发布Android应用之前,您需要创建一个keystore文件。这是一个一次性设置。
使用keytool生成Keystore
在您的终端中运行以下命令:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
您将被要求输入:
- Keystore密码: 选择一个强密码 (你会需要这个)
KEYSTORE_STORE_PASSWORD) - Key 密码: 选择一个强密码 (你会需要这个)
KEYSTORE_KEY_PASSWORD) - Your 名字, 组织等: 填写您的详细信息
重要注意事项
-
保存这些值安全:
- Keystore 文件位置 (例如,
my-release-key.keystore) - Key 别名 (例如,
my-key-alias) - 你会需要这个KEYSTORE_KEY_ALIAS - Keystore 密码 - 你会需要这个
KEYSTORE_STORE_PASSWORD - Key 密码 - 你会需要这个
KEYSTORE_KEY_PASSWORD
- Keystore 文件位置 (例如,
-
备份密钥库文件: 如果您丢失它,您将无法更新您的发布应用
-
保密: 不要将密钥库文件提交到git
-
安全存储: 在安全位置保留多个备份
Alternative: 使用现有密钥库
: 如果您已经发布应用,您必须使用最初使用的相同密钥库。您可以在以下位置找到它:
- 在您第一次构建应用的本地机器上
- 在Play Console → 设置 → 应用签名(如果使用Google Play App Signing)
2. 设置Google Play服务账户
: 为允许GitHub Actions 将构建上传到Google Play,您需要一个服务账户。
第 2 步 1:创建 Google Cloud 项目
- 前往 Google Cloud 控制台
- 创建新项目或选择现有项目
- 注意项目 ID
第二步2.2:启用Google Play开发者API
- 在 Google Cloud 控制台中,前往 APIs & Services → 库
- 在“Google Play Android Developer API”中搜索
- 点击 启用
第 2.3 步:创建服务帐户
- 前往 身份与管理 → 服务帐户
- 点击 创建服务帐户
- 输入详细信息:
- 名称:
github-actions-uploader - 描述: “GitHub 动作上传构建的服务帐户”
- 名称:
- 点击 创建并继续
- 暂时跳过角色赋予(点击 继续, 然后 完成)
步骤 2.4: 创建服务帐户密钥
- 点击新创建的服务账号
- 点击新创建的服务帐户 前往 密钥
- 选项卡 点击 → 添加密钥
- 创建新密钥 JSON 格式
- 点击 创建
- 下载一个 JSON 文件 - 请安全保存这个文件你将需要它
步骤 2.5:在 Play Console 中授权
- 前往 Google Play Console
- 前往 设置 → API 访问
- 在 服务帐户, 点击 为您的服务帐户 在
- 应用权限 选项卡中添加您的应用 帐户权限
- 应用权限 选项卡中授予这些权限: tab, grant these permissions:
- 查看应用信息和下载批量报告(只读)
- 创建、编辑和删除草稿应用
- 发布应用到测试轨道
- 发布应用到生产、排除和其他轨道
- 点击 邀请用户
- 点击 发送邀请
步骤 2.6:验证 JSON 密钥
下载的 JSON 文件应类似于以下内容:
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "...",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "github-actions-uploader@your-project-id.iam.gserviceaccount.com",
"client_id": "...",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "..."
}
您将在 GitHub 秘密设置步骤中将其转换为 base64。
3. 设置 Fastlane
创建一个 fastlane 项目根目录下的文件夹并添加一个 Fastfile 包含以下内容:
default_platform(:android)
KEYSTORE_KEY_ALIAS = ENV["KEYSTORE_KEY_ALIAS"]
KEYSTORE_KEY_PASSWORD = ENV["KEYSTORE_KEY_PASSWORD"]
KEYSTORE_STORE_PASSWORD = ENV["KEYSTORE_STORE_PASSWORD"]
platform :android do
desc "Deploy a beta version to the Google Play"
private_lane :verify_changelog_exists do |version_code: |
changelog_path = "android/metadata/en-US/changelogs/#{version_code}.txt"
UI.user_error!("Missing changelog file at #{changelog_path}") unless File.exist?(changelog_path)
UI.message("Changelog exists for version code #{version_code}")
end
private_lane :verify_upload_to_staging do |version_name: |
UI.message "Skipping staging verification step"
end
lane :beta do
keystore_path = "#{Dir.tmpdir}/build_keystore.keystore"
File.write(keystore_path, Base64.decode64(ENV['ANDROID_KEYSTORE_FILE']))
json_key_data = Base64.decode64(ENV['PLAY_CONFIG_JSON'])
# Get previous build number and increment
previous_build_number = google_play_track_version_codes(
package_name: ENV['DEVELOPER_PACKAGE_NAME'],
track: "internal",
json_key_data: json_key_data,
)[0]
current_build_number = previous_build_number + 1
sh("export NEW_BUILD_NUMBER=#{current_build_number}")
# Build the app
gradle(
task: "clean bundleRelease",
project_dir: 'android/',
print_command: false,
properties: {
"android.injected.signing.store.file" => "#{keystore_path}",
"android.injected.signing.store.password" => "#{KEYSTORE_STORE_PASSWORD}",
"android.injected.signing.key.alias" => "#{KEYSTORE_KEY_ALIAS}",
"android.injected.signing.key.password" => "#{KEYSTORE_KEY_PASSWORD}",
'versionCode' => current_build_number
})
# Upload to Play Store
upload_to_play_store(
package_name: ENV['DEVELOPER_PACKAGE_NAME'],
json_key_data: json_key_data,
track: 'internal',
release_status: 'completed',
skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
end
end
4. 配置GitHub机密
现在您已经拥有您的密钥库和服务帐户 JSON,需要安全地将它们存储在GitHub中。
步骤 4.1:访问GitHub机密
- Go to your repository on GitHub
- 点击 设置 → 机密和变量 → 动作
- 点击 新仓库密钥
步骤 4.2: 添加必需密钥
关于
添加每个密钥一个一个的:
- PLAY_CONFIG_JSON
- 取出步骤 2.4 中下载的服务帐户 JSON 文件
将其转换为 base64:
base64 service_account_key.json | pbcopy
在 macOS/Linux 上:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
- 在 Windows (PowerShell) 上:
PLAY_CONFIG_JSON创建一个新密钥名为
并粘贴 base64 字符串
- ANDROID_KEYSTORE_FILE
在 macOS/Linux 中:
base64 my-release-key.keystore | pbcopy
在 Windows (PowerShell) 中:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
- 创建一个名为
ANDROID_KEYSTORE_FILE并粘贴 base64 字符串
KEYSTORE_KEY_ALIAS
创建一个名为你生成密钥库时使用的别名的新机密(例如: my-key-alias)
KEYSTORE_KEY_PASSWORD
创建一个名为你生成密钥库时设置的密钥密码的新机密
KEYSTORE_STORE_PASSWORD
创建一个名为你生成密钥库时设置的密钥库密码的新机密
Capacitor
创建一个名为你的应用程序包名的新机密(例如: com.example.app)
您可以在 android/app/build.gradle 下面找到 applicationId
步骤4.3:验证所有机密
确保您已配置以下6个机密:
- ✅ 配置文件 JSON
- ✅ AndroidKeystore文件
- ✅ 证书别名
- 🔑 密钥库密码
- 🔒 密钥库存储密码
- ✅ 开发者包名
5. 创建GitHub Actions工作流
创建 .github/workflows/build-upload-android.yml:
name: Build and Deploy Android App
on:
push:
tags:
- '*'
jobs:
build_android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Cache Gradle
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build app
run: npm run build
- name: Sync Capacitor
run: npx cap sync
- name: Setup Java
uses: actions/setup-node@v5
with:
distribution: 'zulu'
java-version: '17'
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- name: Run Fastlane
uses: maierj/fastlane-action@v3.1.0
env:
PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}
ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
DEVELOPER_PACKAGE_NAME: ${{ secrets.DEVELOPER_PACKAGE_NAME }}
KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
with:
lane: android beta
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: android-release
path: ./android/app/build/outputs/bundle/release/app-release.aab
retention-days: 10
自动构建
- 创建一个 Git 标签来触发工作流程
- GitHub Actions 构建您的应用
- Fastlane 上传到 Google Play beta 频道
- 您的应用将自动更新
构建时间和成本
- 构建时间:3-5 分钟
- 私有仓库的成本:约 $0.04/次
- 开源项目免费
相关文章
CI/CD 设置指南
- 自动 Capacitor iOS 构建与 GitHub Actions - iOS CI/CD 完全设置
- 自动构建和发布与 GitHub 动作 - CI/CD pipeline 完全教程
- 使用 GitHub 动作管理开发和生产构建 - 环境管理
替代 CI/CD 平台
- 使用 GitLab CI 构建 - GitLab Android 替代方案
- 使用 CodeMagic 构建 - CodeMagic 设置指南
实时更新和部署
- Capgo 实时更新文档 - 为应用添加 OTA 更新
- - 与 Capgo 集成 - 在管道中集成实时更新
资源
从自动 Capacitor Android 构建中继续使用 GitHub 动作
如果您正在使用 Automatic Capacitor Android build with GitHub actions 与 __CAPGO_KEEP_0__ CI/CD Capgo 自动化构建 Capgo CI/CD Capgo 原生构建 为产品工作流程在 Capgo 原生构建 Capgo 集成 为产品工作流程在 Capgo 集成 CI/CD 集成 为 CI/CD 集成的实现细节 GitHub 动作集成 为 GitHub 动作集成的实现细节