モバイルDevOps
GitLab Mobile DevOpsを使えば、GitLab CI/CDを使ってAndroidやiOSのネイティブアプリやクロスプラットフォームのモバイルアプリを素早くビルド、署名、リリースすることができます。Mobile DevOpsはGitLab Incubation Engineeringによって開発された実験的な機能です。
Mobile DevOpsはまだ開発中ですが、利用することができます:
ビルド環境
GitLab.comのSaaS Runnerを使って素早く始めることも、セルフマネージドRunnerを設定してビルド環境を完全にコントロールすることもできます。
Android ビルド環境
適切なDockerイメージを選択し、.gitlab-ci.yml
。Fabernovelは様々なAndroidバージョンをサポートしています。
使用例:
test:
image: fabernovel/android:api-33-v1.7.0
stage: test
script:
- fastlane test
iOSのビルド環境
GitLab SaaS Runner on macOSはベータ版です。
macOSのGitLab SaaS Runnerでジョブを実行するイメージを選択し、.gitlab-ci.yml
ファイルに追加します。
使用例:
test:
image: macos-12-xcode-14
stage: test
script:
- fastlane test
tags:
- saas-macos-medium-m1
コード署名
すべての Android および iOS アプリは、さまざまなアプリストアを通じてディストリビューションされる前に、安全に署名される必要があります。署名は、ユーザーのデバイスに届く前にアプリケーションが改ざんされていないことを保証します。
プロジェクトレベルのセキュアファイルでは、CI/CDビルドでアプリに安全に署名するために使用できるように、GitLabに以下を保存できます:
- 鍵ストア
- 提供プロファイル
- 証明書の署名
概要については、プロジェクトレベルのセキュアファイルのデモを参照してください。
Fastlane と Gradle による Android プロジェクトのコード署名
Androidのコード署名を設定します:
- キーストアとキーストアのプロパティファイルをプロジェクトレベルのセキュアファイルにアップロードします。
- これらのファイルをビルドで使用するように Gradle 設定を更新します。
概要については、GitLabを使ってAndroidアプリをビルドしてGoogle Playにリリースする方法を参照してください。
キーストアの作成
まだキーストア・ファイルがない場合は、以下のコマンドを実行してキーストア・ファイルを生成してください:
keytool -genkey -v -keystore release-keystore.jks -storepass password -alias release -keypass password -keyalg RSA -keysize 2048 -validity 10000
次に、キーストア設定をrelease-keystore.properties
というファイルに記述します:
storeFile=.secure_files/release-keystore.jks
keyAlias=release
keyPassword=password
storePassword=password
これらのファイルが作成されたら
- GitLabプロジェクトにSecure Filesとしてアップロードし、CI/CDジョブで使用できるようにします。
- 両方のファイルを
.gitignore
ファイルに追加して、バージョン管理にコミットされないようにします。
Gradle の設定
次のステップは、新しく作成した keystore を使用するように Gradle を設定することです。アプリのbuild.gradle
:
-
pluginsセクションの直後に、以下を追加します:
def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('.secure_files/release-keystore.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) }
-
android
:signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } }
-
リリースビルドタイプに
signingConfig
:signingConfig signingConfigs.release
この設定により、fastlaneを使ってアプリをビルドし、セキュアなファイルに保存されたファイルに署名することができます。
使用例:
-
サンプル
fastlane/Fastfile
ファイル:default_platform(:android) platform :android do desc "Create and sign a new build" lane :build do gradle(tasks: ["clean", "assembleRelease", "bundleRelease"]) end end
-
サンプル
.gitlab-ci.yml
ファイル:build: image: fabernovel/android:api-33-v1.7.0 stage: build script: - apt update -y && apt install -y curl - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash - fastlane build
fastlaneによるiOSプロジェクトのコード署名
iOSのコード署名を設定するには、以下の手順が必要です:
- 署名証明書をGitLabにアップロードできるように、fastlaneをローカルにインストールします。
- これらのファイルを使うようにビルドを設定します。
概要については、GitLab で iOS アプリをビルドして Test Flight にリリースする方法をご覧ください。
fastlane の初期化
fastlaneがインストールされている状態で、次のコマンドを実行します:
fastlane init
このコマンドにより、プロジェクト内にAppfile
とスタブアウトされたfastfile
を含むfastlane
フォルダが作成されます。この過程で、アプリ識別子とApp Storeアプリを生成するためのApp Store Connectログイン情報の入力を求められます(まだ存在しない場合)。
次のステップでは、プロジェクトのコード署名ファイルを管理するfastlane matchを設定します。次のコマンドを実行して、設定済みのMatchfile
を生成します:
fastlane match init
このコマンドは次のように促します:
- 使用するストレージバックエンドを選択します。
gitlab_secure_files
を選択する必要があります。 - プロジェクトパスを入力します。例:
gitlab-org/gitlab
.
証明書の生成とアップロード
以下のコマンドを実行して、Apple Developerポータルで証明書とプロファイルを生成し、それらのファイルをGitLabにアップロードします:
PRIVATE_TOKEN=YOUR-TOKEN bundle exec fastlane match development
この例では:
-
YOUR-TOKEN
は、GitLabプロジェクトのメンテナーのロールを持つ個人またはプロジェクトのアクセストークンでなければなりません。 -
appstore
やad-hoc
のように、development
を署名したいビルドのタイプに置き換えてください。
コマンドが完了するとすぐに、プロジェクトのCI/CD設定でファイルを見ることができます。
アップロードのみ
プロジェクトの署名証明書とプロビジョニングプロファイルがすでに作成されている場合は、オプションでfastlane match import
を使って既存のファイルを GitLab に読み込むことができます:
PRIVATE_TOKEN=YOUR-TOKEN bundle exec fastlane match import
ファイルのパスを入力するプロンプトが表示されます。ファイルのパスを入力するプロンプトが表示されます。これらの詳細を入力すると、ファイルがアップロードされ、プロジェクトの CI/CD 設定に表示されます。インポート中にgit_url
の入力を求められたら、空白のままenterを押すのが安全です。
この設定により、fastlaneを使ってアプリをビルドし、安全なファイルに保存されたファイルに署名することができます。
使用例:
-
サンプル
fastlane/Fastfile
ファイル:default_platform(:ios) platform :ios do desc "Build and sign the application for development" lane :build do setup_ci match(type: 'development', readonly: is_ci) build_app( project: "ios demo.xcodeproj", scheme: "ios demo", configuration: "Debug", export_method: "development" ) end end
-
サンプル
.gitlab-ci.yml
ファイル:build_ios: image: macos-12-xcode-14 stage: build script: - fastlane build tags: - saas-macos-medium-m1
ディストリビューション
署名されたビルドは、Mobile DevOps Distributionインテグレーションを使用してGoogle Play StoreまたはApple App Storeにアップロードできます。
Google PlayインテグレーションとfastlaneによるAndroidディストリビューション
Google Playインテグレーションとfastlaneを利用したAndroidディストリビューションを作成するには、以下が必要です:
- Google Cloud PlatformでGoogleサービスアカウントを作成し、そのアカウントにGoogle Playのプロジェクトへのアクセス権を付与します。
- Google Playインテグレーションを有効にします。
- パイプラインにリリースステップを追加します。
概要については、Google Play インテグレーションのデモを参照してください。
Google Playインテグレーションを有効にします。
Google Playインテグレーションを使用して、CI/CDパイプラインをGoogle Play Consoleに接続してAndroidアプリをビルドおよびリリースするように設定します。インテグレーションを有効にするには、以下の手順に従います:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定]>[インテグレーション]を選択します。
- Google Playを選択します。
- インテグレーションを有効にする]で、[アクティブ]チェックボックスを選択します。
-
Package name(パッケージ名)に、アプリのパッケージ名を入力します。例えば、
com.gitlab.app_name
。 - Service account key (.JSON)では、キーファイルをドラッグまたはアップロードします。
- 変更を保存を選択します。
インテグレーションを有効にすると、fastlaneを使ってGoogle Playにビルドをディストリビューションできます。
使用例:
-
サンプル
fastlane/Fastfile
:default_platform(:android) platform :android do desc "Submit a new Beta build to the Google Play store" lane :beta do upload_to_play_store( track: 'internal', aab: 'app/build/outputs/bundle/release/app-release.aab', release_status: 'draft' ) end end
-
サンプル
.gitlab-ci.yml
:beta: image: fabernovel/android:api-33-v1.7.0 stage: beta script: - fastlane beta
iOSディストリビューション Apple Storeインテグレーションとファストレーン
Apple Storeインテグレーションとfastlaneを使ってiOSディストリビューションを作成するには、以下の手順が必要です:
- App Store Connect APIのAPIキーを生成します。Apple App Store Connectポータルで、プロジェクト用の新しい秘密鍵を生成します。
- Apple App Storeインテグレーションを有効にします。
- パイプラインとfastlane設定にリリースステップを追加します。
概要については、Apple App Storeインテグレーションデモをご覧ください。
Apple App Storeインテグレーションを有効にします。
Apple App Storeインテグレーションを使用してCI/CDパイプラインを設定し、App Store Connectに接続してiOS、iPadOS、macOS、tvOS、watchOS向けのアプリをビルドおよびリリースします。インテグレーションを有効にするには、次の手順に従います:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定]>[インテグレーション]を選択します。
- Apple App Storeを選択します。
- インテグレーションを有効にする]で、[アクティブ]チェックボックスを選択します。
- Apple App Store Connectの設定情報を入力します:
- 発行者ID:発行者ID:Apple App Store Connectの発行者IDは、Apple App Store Connectポータルの「ユーザーとアクセス」の「キー」セクションで確認できます。
- 鍵ID:生成された新しい秘密鍵の鍵IDです。
- 秘密鍵:生成された秘密鍵。この鍵は一度しかダウンロードできません。
- 変更を保存を選択します。
インテグレーションを有効にすると、fastlane を使用して TestFlight と Apple App Store にビルドをディストリビューションできます。
使用例:
-
サンプル
fastlane/Fastfile
:default_platform(:ios) platform :ios do desc "Build and sign the application for distribution, upload to TestFlight" lane :beta do setup_ci match(type: 'appstore', readonly: is_ci) app_store_connect_api_key increment_build_number( build_number: latest_testflight_build_number(initial_build_number: 1) + 1, xcodeproj: "ios demo.xcodeproj" ) build_app( project: "ios demo.xcodeproj", scheme: "ios demo", configuration: "Release", export_method: "app-store" ) upload_to_testflight end end
-
サンプル
.gitlab-ci.yml
:beta_ios: image: macos-12-xcode-14 stage: beta script: - fastlane beta
モバイル向けレビューアプリ
レビューアプリを使用して、マージリクエストからの変更を直接プレビューすることができます。この機能はAppetize.ioとのインテグレーションにより実現しました。
概要については、レビューアプリのモバイルセットアップ手順をご覧ください。
使い始めるには、セットアップ手順をご覧ください。
モバイルSAST
静的アプリケーション・セキュリティ・テスト(Static Application Security Testing(SAST))を使用して、コードに対して静的アナライザを実行し、既知のセキュリティ脆弱性をチェックすることができます。モバイルSASTは、モバイルセキュリティフレームワーク(MobSF)に基づく実験的なSAST機能によって、モバイルチーム向けにこの機能を拡張します。
サンプル・リファレンス・プロジェクト
さまざまなプラットフォームの完全なビルド、サイン、リリースのパイプライン例については、以下のサンプル・リファレンス・プロジェクトを参照してください。利用可能なすべてのプロジェクトのリストは、Mobile DevOps Demo Projects グループにあります。
モバイルDevOpsブログ
その他の参考資料はGitLabブログの#mobileセクションにあります。