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

Capacitorの自動Capacitor Androidビルド

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

Anik Dhabal Babu

Anik Dhabal Babu

コンテンツマーケター

Capacitorの自動Capacitor Androidビルド

Capacitorアプリの自動Androidビルド: GitLab CI

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

前提条件

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

  • A GitLabアカウントに管理者権限
  • Google Play Storeに正しく署名されたアプリがすでに公開されている
  • Android署名キーとキーストアファイル
  • Google Cloud ConsoleプロジェクトにPlay Store APIが有効
  • サービスアカウントに適切な権限
  • GitLab CI/CDワークフローの理解
  • Fastlane構成の知識
  • パイプラインの維持とデバッグに必要な時間

Capgo Build for CI/CD by Capgo

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

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

価格

  • : Capgo プランは月額$12で始まります。
  • : OTA更新と約15回のネイティブビルドを含みます。
  • : 追加のビルド分数は、分単位でクレジットで請求されます。

CI/CD環境でCapgoビルドを設定する

マニュアル設定ガイド

ここで行う必要のあること

この記事に従って実行する手順

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

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

Fastlaneは、Rubyライブラリで、モバイル開発の一般的なタスクを自動化するために作成されたものです。Fastlaneを使用すると、カスタムの「レーン」を構成できます。これは、Android Studioで実行する通常のタスクのシーケンスです。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はCI/CD変数を暗号化して保存する方法を提供しています。これはGitHubのリポジトリシークレットと似ています。機密情報を安全に保存するには

  1. GitLabプロジェクトの設定に移動してください
  2. CI/CD > 変数に移動してください
  3. 次の変数を追加してください
  • ANDROID_KEYSTORE_FILE: Androidビルドに使用する署名用のキーストアファイルのbase64エンコード .jks または .keystore Capacitorライブアップデートの代替方法を比較するページです。Capacitorの代替方法を比較するページです。
  • Appflowの比較/移行マーケティングコピーです。
  • Capawesomeの比較ページです。
  • Capgoのコンサルティングサービスページです。
  • Appflowの比較/移行マーケティングコピーです。AppflowのプラグインまたはアプリのIDを選択してください。
  • 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で付与する:
    • Go to Play Console
    • “Users and permissions” に移動する
    • クリック “新しいユーザーを招待”
    • サービスアカウントのメールアドレスを入力(*.iam.gserviceaccount.comで終わる)
    • 「リリースをプロダクションに」許可を付与
    • クリック “ユーザーを招待”
  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 Pipelinesを定義します。以下は、Pipelinesの構造例です。

Pipelinesをトリガーする


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は定義されたPipelinesを自動的にトリガーし、Fastlaneを使用してAndroidアプリをビルドおよびデプロイします。

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

Create a .gitlab-ci.yml file at the root of your project to define your CI/CD pipeline. Below is an example of how you can structure your pipeline:

Conclusion

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

Automatic Capacitor Android build with GitLabから続きましょう。

Capgoを使用している場合 Automatic Capacitor Android build with GitLab Capgo CI/CDと接続することで Capgo CI/CD for the product workflow in Capgo CI/CD, Capgo Native Builds for the product workflow in Capgo Native Builds, Capgo Integrations for the product workflow in Capgo Integrations, CI/CD統合 CI/CD統合の実装詳細については GitHub アクション統合 for the implementation detail in GitHub Actions Integration.

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

ウェブ層のバグが生じた場合、Capacitor ではなく Capgo を使用して修正を配信し、数日間待つ必要がなくなる。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー パスを通る。

マーティンから人間のサポート

スタートする

最新のブログ

Capgo gives you the best insights you need to create a truly professional mobile app.