メインコンテンツにジャンプ
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 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 Build provides maintained Android build environments, so you do not have to manage SDK images, Gradle cache issues, or Fastlane lanes.
  • アーティファクトと提出: 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に保存する

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: Base64でエンコードされたサービスアカウントキーJSON。

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

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

  1. 新しいプロジェクトを作成するか、既存のプロジェクトを選択してください。 Google Play Android Developerを有効にします: __CAPGO_KEEP_0__
  2. サービスアカウントを作成します:
  3. Enable the Google Play Android Developer API
  4. 「サービスアカウントを作成」ボタンをクリックしてください。
    • サービスアカウントに名前と説明を付けます。
    • Go to the Google Cloud Console
    • Create a new project or select an existing one
    • 「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 __CAPGO_KEEP_0__
    • 新規ユーザーを招待する
    • __CAPGO_KEEP_0__
    • 「リリースをプロダクションに」権限を付与する
    • ユーザーを招待する
  7. __CAPGO_KEEP_0__
    base64 -i path/to/your/service-account-key.json | pbcopy
  8. GitLabにbase64エンコードされた文字列を追加する PLAY_CONFIG_JSON GitLab CI/CDパイプラインを設定する

GitLab CI/CDパイプラインを設定する

プロジェクトのルートディレクトリに`.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 CI/CDは、GitLabリポジトリに新しいタグがPushされたときに自動的に定義されたパイプラインをトリガーし、Fastlaneを使用してAndroidアプリをビルドおよびデプロイします。

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

Conclusion

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

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

Capgoアプリのバグが生じた場合、修正をアプリストアの承認待ちなしで配信することができます。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路を通じます。

今すぐ始める

最新のブログ記事

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