メインコンテンツにジャンプします。
CI/CD

Capacitorの自動AndroidビルドはGitLabで行います

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

アニク・ドハバル・バブー

アニク・ドハバル・バブー

コンテンツマーケター

Capacitorの自動AndroidビルドはGitLabで行います

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

CapacitorアプリのCI/CD設定は複雑で時間のかかる作業です。ここでは、必要なことを知っておく必要があります。

前提条件

始める前に、次の設定が必要です。

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

Capgo ビルド for CI/CD by Capgo

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

  • パイプラインと一緒に機能: Trigger Capgo Build from GitLab CI, GitHub Actions, Jenkins, or local scripts after your web build and npx cap sync.
  • CIシークレットから署名: Androidのキーストア、キーアリセイ、パスワード、プレイコンソールサービスアカウントJSONをCIシークレットに保存してください。
  • ネイティブランナーのメンテナンスなし: Capgo ビルドは管理されたAndroidビルド環境を提供するため、SDK イメージ、Gradleキャッシュの問題、またはFastlaneのレーンを管理する必要がありません。
  • アーティファクトと提出: QAで署名されたアーティファクトをダウンロードしたり、リリースビルドをCapgo CLIで提出したりできます。

価格

  • : Capgo プランは1か月あたり$12で開始します。
  • 含まれるもの
  • : OTAの更新と約15回のネイティブビルド

Set up Capgo Build in CI/CD

__CAPGO_KEEP_0__ ビルドをCI/CDに設定するにはどうすればよいですか。

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

ポストのフォローするステップ

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

1. ファストレーンファイルをコピーする

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

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

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 アプリのパッケージ名 (例: com.example.app)
  • PLAY_CONFIG_JSON: Google Play サービス アカウント キーの base64 エンコードされた JSON
  • Google Play サービス アカウント キーを作成します
  • Go to your GitLab project’s Settings.

Navigate to CI/CD > Variables

To generate the __CAPGO_KEEP_0__、以下の手順に従ってください。 PLAY_CONFIG_JSON 秘密鍵を生成するには、以下の手順に従ってください。

  1. Google Cloud Consoleにアクセスしてください。 新しいプロジェクトを作成するか、既存のプロジェクトを選択してください。
  2. Google Play Android Developerのサービスを有効化してください。
  3. Enable the Google Play Android Developer API
  4. 「IAM & Admin」>「サービスアカウント」に移動してください。
    • 「サービスアカウントを作成」ボタンをクリックしてください。
    • サービスアカウントに名前と説明を付けてください。
    • 「作成と続行」ボタンをクリックしてください。
    • ロールの割り当てをスキップして、「完了」ボタンをクリックしてください。
    • __CAPGO_KEEP_0__
  5. JSONキーを生成する:
    • サービスアカウントをリストから見つける
    • 三点メニュー > "キーを管理する" をクリック
    • "キーを追加" > "新しいキーを作成する" をクリック
    • JSON形式を選択
    • 「作成」をクリック
  6. サービスアカウントにアプリへのアクセス権をPlay Consoleで付与する:
    • 以下のURLにアクセス Play Console
    • 「ユーザーと権限」に移動
    • 「新しいユーザーを招待」をクリック
    • サービスアカウントのメールアドレスを入力(*.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 Pipeliningの設定

.gitlab-ci.ymlファイルを作成してプロジェクトのルートディレクトリに置くことで、CI/CD Pipeliningを定義する。以下に、パイプラインの構造例が示されている。

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


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アプリの自動デプロイが可能になる。

まとめ

mingc/android-build-box Docker イメージを使用してGitLab CI/CDを設定することで、Androidアプリのビルドプロセスを自動化し、開発フローを効率的かつ信頼性の高いものにできる。この自動化により、開発の核心となる部分に集中し、高品質なAndroidアプリを効率的に配信できるようになる。

__CAPGO_KEEP_0__

Keep going from Automatic Capacitor Android build with GitLab

GitLabを使用している場合 Automatic Capacitor Android build with GitLab CI/CDの自動化を計画する場合、Cloudflareと接続してください。 Capgo CI/CD Capgo CI/CDの製品ワークフロー Capgo Native Builds Capgo Native Buildsの製品ワークフロー Capgo Integrations Capgo Integrationsの製品ワークフロー CI/CDの統合 CI/CDの実装詳細 GitHub Actions Integration GitHub Actions Integrationの実装詳細

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

ウェブ層のバグが生じた場合、Capgoを使用して修正を配信する。アプリストアの承認待ちを数日間省略し、ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路を通る

今すぐ始める

最新のブログ記事

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