メインコンテンツにジャンプ
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署名キーとキーストアファイル
  • Play Store API が有効になっている Google Cloud Console プロジェクト
  • 適切な権限を持つサービスアカウント
  • GitLab CI/CD ワークフローの理解
  • Fastlane構成の知識
  • パイプラインの維持とデバッグに必要な時間

Capgo Build for CI/CD by Capgo

Fastlane、Gradleランナー、キーストア、そしてアップロードスクリプトのメンテナンスをスキップ Capgo Build __CAPGO_KEEP_0__ Build

  • パイプラインと一緒に機能します: 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. ステップを実行する
  2. Fastlane ファイルをコピーする
  3. GitLab の暗号化されたシークレットに秘密情報を保存する
  4. Google Play サービス アカウント キーを作成して保存する
  5. Android の署名キーを保存する

GitLab ワークフロー .yml ファイルをセットアップする

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

Fastlane は、Ruby ライブラリで、モバイル開発の一般的なタスクを自動化するために作成されたものです。Fastlane を使用すると、カスタムの「レーン」を構成できます。これは、通常 Android Studio を使用して実行する「アクション」のシーケンスです。Fastlane を使用すると、Android Studio を使用せずに実行することができるタスクが多数ありますが、このチュートリアルでは、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エンコードされたファイルのパスです。このファイルは、Play App Signingを使用している場合、アップロードキーに関連付けられたキーストアファイル、またはアプリケーション署名キーになります。 .jks KEYSTORE_KEY_PASSWORD: キーストアファイルに関連付けられたパスワード .keystore KEYSTORE_KEY_ALIAS: キーストアのエイリアス
  • KEYSTORE_STORE_PASSWORD: 秘密鍵のパスワード
  • DEVELOPER_PACKAGE_NAME: AndroidアプリのID、例: com.example.app
  • Androidビルドに署名するために使用されるbase64エンコードされたファイルのパスです。このファイルは、Play App Signingを使用している場合、アップロードキーに関連付けられたキーストアファイル、またはアプリケーション署名キーになります。
  • キーストアファイルに関連付けられたパスワード
  • PLAY_CONFIG_JSON: Base64でエンコードされたサービスアカウントキーJSON。

Google Play Serviceアカウントキーを作成

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

  1. 新しいプロジェクトを作成または既存のプロジェクトを選択 Google Play Android Developerを有効
  2. サービスアカウントを作成
  3. Enable the Google Play Android Developer API
  4. 「サービスアカウントを作成」
    • 名前と説明を付けてください
    • __CAPGO_KEEP_0__
    • Enable the Google Play Android Developer __CAPGO_KEEP_0__
    • クリック “Create and Continue”
    • ロール割り当てをスキップし、 “Done” をクリック
  5. JSON キーを生成する:
    • サービス アカウントをリストから見つける
    • 三点メニューをクリック > “Manage keys”
    • “Add Key” > “Create new key” をクリック
    • JSON形式を選択
    • “Create” をクリック
  6. サービス アカウントにアプリへのアクセス権をPlay Consoleで付与する:
    • Play Consoleに移動する “Users and permissions” に移動する
    • __CAPGO_KEEP_0__
    • 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 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アプリを自動的にデプロイできます。

__CAPGO_KEEP_0__

Conclusion

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

Automatic Capacitor Android build with GitLabから続けてください

Capgoを使用している場合 Automatic Capacitor Android build with GitLab をCI/CDの自動化計画に接続し、__CAPGO_KEEP_0__ CI/CD の製品ワークフローに接続し、Capgo CI/CD の製品ワークフローに接続し、Capgo Native Builds の製品ワークフローに接続し、Capgo Integrations for the product workflow in Capgo Native Builds, Capgo CI/CD Capgo Native Builds CI/CD統合 CI/CD統合の実装詳細について GitHub アクション統合 GitHub アクション統合の実装詳細について

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

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

今すぐ始める

Latest from our Blog

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