メインコンテンツにジャンプ
CI/CD

GitLabを使用した自動Capacitor Androidビルド

5分でAndroid IonicアプリのCI/CDパイプラインを設定する方法

記事のクレジット

マーティン・ドナディュー

ライター

バレリア

レビュアー

ジョーダン

エディター

Automatic Capacitor Android build with GitLab

GitLab CIを使用した自動Androidビルド

Setting up CI/CD for Capacitor apps can be complex and time-consuming. Here’s what you need to know:

前提条件

開始する前に、以下の設定が必要です。

  • GitLabアカウントの管理者権限
  • Google Play Storeに既に公開されているアプリ
  • Android署名キーとキーストアファイル
  • Google Cloud Console project with Play Store API enabled
  • Play Storeの有効化
  • GitLab CI/CD ワークフローの理解
  • Fastlane 設定の知識
  • パイプラインの維持とデバッグに必要な時間

Capgo CI/CDでCapgo

Fastlane、Gradleランナー、キーストア、アップロードスクリプトのメンテナンスをスキップ Capgo context

  • Page/area: Capgo solutions marketing page. Role: Short UI label or navigation item. Seen in: page solutions/white-label.astro. Preserve Capgo product/brand and developer terms exactly. Message key `solutions_white_label_visual_cell3_value` (Solutions White Label Visual Cell3 Value).: Trigger Capgo Build from GitLab CI, GitHub Actions, Jenkins, or local scripts after your web build and npx cap sync.
  • パイプラインと一緒に機能します: GitLab CI、__CAPGO_KEEP_0__ Actions、Jenkins、またはローカルスクリプトから__CAPGO_KEEP_1__ Buildをトリガーします
  • CIシークレットから署名します: Androidキーストア、キー別名、パスワード、プレイコンソールサービスアカウントJSONをCIシークレットに保持します。: Capgo ビルドは、管理されたAndroidビルド環境を提供するため、SDK イメージ、Gradleキャッシュの問題、またはFastlaneのレーンを管理する必要がなくなります。
  • アーティファクトと提出: Capgo CLI を使用して、QA用に署名されたアーティファクトをダウンロードしたり、リリースビルドを提出したりできます。

Pricing

  • : Capgo プランは $12/月から始まります。
  • : __CAPGO_KEEP_0__ プランには、1 か月あたり約 15 回のネイティブビルドと OTA の更新が含まれます。
  • : __CAPGO_KEEP_0__ ビルドの余分なビルド分数は、クレジットを通じて 1 分あたり請求されます。

: Capgo ビルドを CI/CD にセットアップするには、以下の手順に従ってください。

: __CAPGO_KEEP_0__ ビルドのマニュアルセットアップガイド

: 以下の手順に従ってください。

: Fastlane ファイルをコピーする手順

  1. : __CAPGO_KEEP_0__ ビルドのマニュアルセットアップガイド
  2. GitLabで暗号化されたシークレットを保存する
  3. Google Playサービスアカウントキーを作成して保存する
  4. Android署名キーを保存する
  5. GitLabワークフロー(.ymlファイル)を設定する

1. Fastlaneファイルをコピーする

Fastlaneは、Rubyライブラリで、モバイル開発の一般的なタスクを自動化するために作成されたものです。Fastlaneを使用すると、カスタムの「レーン」を設定できます。これは、通常Android Studioで実行する「アクション」の一連です。Fastlaneを使用すると、Android Studioで実行するタスクの多くを自動化できますが、このチュートリアルでは、Fastlaneの基本的なアクションのみを使用します。

プロジェクトのルートディレクトリにFastlaneフォルダを作成し、以下のファイルをコピーする

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'])
				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}")
        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(
					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
    lane :build do
      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}",
        })
    end
    lane :prod_release do
      build_gradle = File.read("../android/app/build.gradle")

      verify_changelog_exists(version_code: build_gradle.match(/versionCode (\d+)/)[1])
      verify_upload_to_staging(version_name: build_gradle.match(/versionName '([\d\.]+)'/)[1])

      supply(
        track_promote_to: 'beta',
        skip_upload_apk: true,
        skip_upload_aab: true,
        skip_upload_metadata: false,
        skip_upload_changelogs: false,
        skip_upload_images: false,
        skip_upload_screenshots: false
      )
    end
end

GitLab CI/CD変数でシークレットを保存する

GitLabは、GitHubのリポジトリシークレットと同様の暗号化されたCI/CD変数を保存する方法を提供しています。シークレットを安全に保存するには

  1. プロジェクトのGitLab設定画面に移動する
  2. CI/CD > 変数に移動する
  3. 次の変数を追加する
  • ANDROID_KEYSTORE_FILE: base64でエンコードされた .jks or .keystore Capacitorライブアップデートの代替
  • ファイルは、Playアプリ署名を使用している場合にアップロードキーに関連付けられたキーストアファイル、またはアプリ署名キー
  • KEYSTORE_KEY_PASSWORD: キーストアファイルに関連付けられたパスワード
  • KEYSTORE_KEY_ALIAS: キーストアのエイリアス
  • KEYSTORE_STORE_PASSWORD: 秘密鍵のパスワード
  • DEVELOPER_PACKAGE_NAME: AndroidアプリのID、例: com.example.app

PLAY_CONFIG_JSON: base64でエンコードされたサービスアカウントキーJSON

Google Play Service Account Keyの作成 PLAY_CONFIG_JSON 秘密鍵の作成

  1. Google Playの Google Cloud Console
  2. 新しいプロジェクトを作成または既存のプロジェクトを選択
  3. Enable the Google Play Android Developer API
  4. サービス アカウントを作成:
    • 「IAM & Admin」>「サービス アカウント」に移動
    • 「サービス アカウントを作成」クリック
    • 名前と説明を付けて
    • 「作成と続行」クリック
    • ロールの割り当てをスキップして「完了」クリック
  5. JSON キーを生成:
    • サービス アカウントのリストで検索
    • 三点メニュー>「キーを管理」クリック
    • クリック “キーを追加” > “新しいキーを作成”
    • JSON形式を選択
    • クリック “作成”
  6. サービスアカウントにアプリへのアクセス権を付与する
    • 行きましょう Play Console
    • ユーザーと権限
    • を選択
    • クリック “新しいユーザーを招待”
    • サービスアカウントのメールアドレス(*.iam.gserviceaccount.comで終わる)を入力
    • リリースをプロダクションに許可
  7. クリック “ユーザーを招待”
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. GitLab CI/CDパイプラインを設定する PLAY_CONFIG_JSON GitLab CI/CDパイプラインの変数

GitLab CI/CDパイプラインの設定

プロジェクトのルートディレクトリに.gitlab-ci.ymlファイルを作成して、CI/CDパイプラインを定義します。以下に、パイプラインの構造例を示します。


image: mingc/android-build-box:latest

stages:
  - build
  - upload_to_capgo
  - build_and_upload_android

build:
  stage: build
  tags:
    - saas-linux-xlarge-amd64
  cache:
    - key:
        files:
          - bun.lockb
      paths:
        - .node_modules/
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
      - node_modules/
      - dist/
  only:
    - master

upload_to_capgo:
  stage: upload_to_capgo
  tags:
    - saas-linux-xlarge-amd64
  script:
    - npx @capgo/cli@latest bundle upload -a $CAPGO_TOKEN -c dev
  dependencies:
    - build
  when: manual
  only:
    - master

build_and_upload_android:
  tags:
    - saas-linux-xlarge-amd64
  stage:    build_and_upload_android
  cache:
    - key:
        files:
          - android/gradle/wrapper/gradle-wrapper.properties
      paths:
        - ~/.gradle/caches/
  script:
    - npx cap sync android
    - npx cap copy android
    - bundle exec fastlane android beta # We do create a tag for the build to trigger XCode cloud builds
  dependencies:
    - build
  when: manual
  only:
    - master

パイプラインをトリガーする

GitLabリポジトリに新しいタグをプッシュすると、GitLab CI/CDは定義されたパイプラインを自動的にトリガーし、Fastlaneを使用してAndroidアプリをビルドおよびデプロイします。

プロジェクトの構造と要件に応じてパスと依存関係を調整してください。この設定により、GitLab CI/CDでAndroidアプリの自動デプロイが可能になります。

結論

GitLab CI/CDにmingc/android-build-box Dockerイメージを設定することで、Androidアプリのビルドプロセスを自動化できます。これにより、開発ワークフローが効率的で信頼性が高くなり、開発者はアプリ開発の核心部分に集中できます。最終的には、高品質のAndroidアプリを効率的に配信することができます。

Keep going from Automatic Capacitor Android build with GitLab

GitLab CI/CDでAndroidアプリの自動ビルドを使用している場合 Automatic Capacitor Android build with GitLab CI/CD自動化を計画するには、を接続する必要があります。 Capgo CI/CD 製品ワークフローにおけるCapgo CI/CDの機能 Capgoネイティブビルド 製品ワークフローにおけるCapgoネイティブビルドの機能 Capgo統合 Capacitor の製品ワークフローで Capgo インテグレーション CI/CD統合 CI/CD統合の実装詳細 GitHubアクション統合 Capacitorの実装詳細についてはGitHubアクションの統合です。

Capacitorアプリのライブアップデート

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

ウェブ層のバグがライブの場合、__CAPGO_KEEP_0__を使用して修正を配信し、App Storeの承認待ちの日数を待たなくてもよい。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路を通る。

コンテキスト: Capgoマーケティングウェブサイト。役割: サポートする説明文またはメタ説明文。見つける場所: コンポーネント GetStarted.astro。Capgo製品/ブランド名と開発者用語をそのまま保存する。メッセージキー `instant_updates_for_capacitor_apps_description` (Instant Updates For Capacitor Apps Description)。

マーティンから人間のサポートを受ける

Capgoは、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。