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

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

5分でfastlaneとGitLabを使用したAndroid IonicアプリのCI/CDパイプラインの設定方法

アニク・ダバル・バブー

アニク・ダバル・バブー

コンテンツマーケター

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

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プロジェクトのPlay Store API機能
  • 適切な権限を持つサービスアカウント
  • GitLab CI/CDワークフローの理解
  • Fastlaneの設定の知識
  • パイプラインの維持とデバッグに必要な時間

Capgo CI/CD用のCapgoビルド

Fastlane、Gradleランナー、キーストア、アップロードスクリプトの維持をスキップ Capgo ビルド __CAPGO_KEEP_0__ CI/CDパイプラインから既存の署名済みネイティブAndroidビルドを実行します

  • パイプラインと連携: GitLab CI、Capgo Actions、Jenkins、またはローカルスクリプトから GitHub ビルドをトリガーします。 npx cap sync.
  • CIシークレットからの署名: Androidのキーストア、キー・アリセイ、パスワード、Play ConsoleサービスアカウントのJSONをCIシークレットに保存します。
  • ネイティブランナーのメンテナンスなし: Capgo ビルドは管理されたAndroidビルド環境を提供するため、SDK イメージ、Gradleキャッシュの問題、またはFastlaneのレーンを管理する必要がありません。
  • アーティファクトと提出: QA用に署名済みアーティファクトをダウンロードしたり、Capgo CLI を通じてリリースビルドを提出します。

価格

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

セットアップ Capgo CI/CD ビルド

マニュアル セットアップ ガイド

ここで何が必要ですか:

ポストの手順

  1. Fastlane ファイルをコピーする
  2. GitLab の暗号化されたシークレットでシークレットを保存する
  3. Google Play サービス アカウント キーを作成して保存する
  4. Android の署名キーを保存する
  5. GitLab ワークフロー .yml ファイルを設定する

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

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

プロジェクトのルートディレクトリに 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: Androidビルドに使用されるbase64エンコードされた .jks または .keystore キーストアファイルです。このファイルは、Play App Signingを使用している場合にアップロードキーに関連付けられたキーストアファイル、またはアプリケーション署名キーです。
  • KEYSTORE_KEY_PASSWORD: キーストアファイルに関連付けられたパスワード
  • KEYSTORE_KEY_ALIAS: キーストアのエイリアス
  • KEYSTORE_STORE_PASSWORD: 秘密鍵のパスワード
  • DEVELOPER_PACKAGE_NAME: AndroidアプリのID、例えばcom.example.app
  • PLAY_CONFIG_JSON: Google PlayサービスアカウントキーJSONのbase64エンコード。

Google Playサービスアカウントキーを作成

シークレットを作成するには、次の手順に従ってください。 PLAY_CONFIG_JSON Google Cloud Consoleにアクセス

  1. 新しいプロジェクトを作成または既存のプロジェクトを選択 Google Play Android Developerを有効
  2. サービスアカウントを作成
  3. Enable the Google Play Android Developer API
  4. 「サービスアカウントを作成」クリック
    • 名前と説明を付けてサービスアカウントを作成
    • __CAPGO_KEEP_0__
    • Give it a name and description
    • クリック “Create and Continue”
    • ロール割り当てをスキップし、 “Done” をクリック
  5. JSON キーを生成する:
    • サービス アカウントをリストから見つける
    • 三点メニューをクリック > “Manage keys”
    • “Add Key” > “Create new key” をクリック
    • JSON形式を選択
    • “Create” をクリック
  6. サービス アカウントにアプリへのアクセス権をPlay Consoleで付与する:
    • Play Consoleに移動 “Users and permissions” に移動
    • Go to
    • Click “新規ユーザーを招待”
    • サービスアカウントのメールアドレス(*.iam.gserviceaccount.comで終わる)を入力してください
    • 「リリースをプロダクションに」権限を付与してください
    • Click “ユーザーを招待”
  7. JSONキーをbase64に変換してください:
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. GitLabにbase64エンコードされた文字列を追加してください PLAY_CONFIG_JSON GitLab CI/CD Pipelinesを設定する

プロジェクトのルートディレクトリに.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アプリを自動的にデプロイできます。

Set Up Your GitLab CI/CD Pipeline

まとめ

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

GitLabで自動的なCapacitor Androidビルドから続けてください。

あなたが GitLabで自動的なCapacitor Androidビルドを使用している場合 CI/CDの自動化を計画する場合、__CAPGO_KEEP_0__ CI/CDと接続します。 CI/CDのCapgo CI/CDの製品ワークフローに ネイティブビルドのCapgo Native Buildsの製品ワークフローに 統合のCapgo Integrationsの製品ワークフローに 統合のCapgo Integrationsの製品ワークフローに 統合のCapgo Integrationsの製品ワークフローに 統合のCapgo Integrationsの製品ワークフローに CI/CD統合 CI/CD統合の実装詳細については GitHub アクション統合 CI/CD統合の実装詳細については GitHub アクション統合

Capacitorアプリのリアルタイム更新

Capgoを使用して、ウェブ層のバグが生じた場合に、ユーザーにバックグラウンドで更新を提供し、ネイティブの変更は通常のレビュー経路を通じて

今すぐ始める

最新のブログから

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