メインコンテンツにジャンプ
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 project with Play Store API enabled
  • サービスアカウントの適切な権限
  • GitLab CI/CDワークフローの理解
  • Fastlaneの設定の知識
  • パイプラインの維持とデバッグの時間

Capgo Build for CI/CD by Capgo

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

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

価格設定

  • Capgo プランは 1 か月あたり 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 フォルダーを作成し、次のファイルをコピーしてください: 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 Android ビルドに使用するために base64 エンコードされたファイルを指定します。
  • キーストアキー・パスワード: キーストアファイルに関連付けられたパスワード
  • キーストアキー・アライアス: キーストアのアライアス
  • キーストア・ストア・パスワード: 秘密鍵のパスワード
  • 開発者パッケージ名: AndroidアプリのIDのようなもの (例: com.example.app)
  • プレイ・コンフィグ・JSON: base64エンコードされたサービスアカウントキーJSON

Google Play Service Account Keyの作成

秘密鍵の作成のために、以下の手順に従ってください。 PLAY_CONFIG_JSON Google Cloud Consoleにアクセスしてください。

  1. 新しいプロジェクトを作成するか、既存のプロジェクトを選択してください。 Google Play Android Developerの機能を有効にします。__CAPGO_KEEP_0__
  2. __CAPGO_KEEP_0__
  3. API
  4. サービスアカウントを作成してください:
    • 「IAM & Admin」>「サービスアカウント」に移動してください
    • 「サービスアカウントを作成」ボタンをクリックしてください
    • 名前と説明を付けてください
    • 「作成して続行」ボタンをクリックしてください
    • ロールの割り当てをスキップして「完了」ボタンをクリックしてください
  5. JSONキーを生成してください:
    • サービスアカウントのリストから該当のサービスアカウントを探してください
    • 三点メニュー>「キーを管理」ボタンをクリックしてください
    • 「キーを追加」>「新しいキーを作成」ボタンをクリックしてください
    • JSON形式を選択してください
    • 「作成」ボタンをクリックしてください
  6. サービスアカウントにPlay Consoleへのアクセス権を付与してください:
    • Go to 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 Pipelinesを設定してください

__CAPGO_KEEP_0__

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

Automatic Capacitor Android ビルドの GitLab から続けてください。

Automatic __CAPGO_KEEP_0__ Android ビルドの GitLab を使用している場合 Automatic Capacitor Android ビルドの GitLab を使用して CI/CD の自動化を計画し、Capacitor CI/CD と接続する __CAPGO_KEEP_0__ CI/CD の製品ワークフローに __CAPGO_KEEP_0__ CI/CD を接続する Capgo CI/CD Capgo Capgo Native Builds Capgo の製品ワークフロー向け Capgo Integrations Capgo の製品ワークフロー向け CI/CD Integration CI/CD統合 GitHub Actions Integration 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製品/ブランドと開発者用語をそのまま保存。

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

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