JenkinsのAndroidビルドに安全に署名する

翻訳https://www.detroitlabs.com/blog/2017/05/24/securely-signing-jenkins-android-builds/













Jenkins CI(Continuous Integration、以降単にCI)でのAndroidアセンブリの安全な署名は一般的な問題です。 開発期間全体でいくつかのオプションを試してみましたが、それぞれが少し汚れていました... 1つを除いて。







まず、小さな紹介:CIは開発チームにとって非常に重要なツールです。 正しく頻繁に使用すると、デバッグと競合の解決にかかる時間を大幅に短縮できます。 問題はチーム全体に表示され、迅速に解決できます。アセンブリの結果は問題の根本を特定するのに役立ち、テストは回帰エラーの防止に役立ちます。 CIはビルドの配信も自動化するため、テスターまたは顧客は即座に最新の作業結果を取得できます。







したがって、私たちのオプションは次のとおりです。







アセンブリの署名証明書をリポジトリ自体に直接含めます:悪い!



プライベートリポジトリを使用しない場合にのみ、実際に証明書を全世界に公開しますか。 閉じたリポジトリを使用する場合でも、各開発者のマシンに証明書を配置するため、証明書が漏洩する可能性が大幅に増加します。







署名証明書をJenkinsファイルシステムにアップロードし、Gradle:Not badから参照します...



最小限の場所を使用でき、ジェンキンスへのアクセスを規制するのと同じ手段で保護できるため、これは悪くありません。 1つの注意点は、ファイルシステムのどこかにパスワードとキー名を保存する必要があることです。 これを安全に行う方法を見つけるのは難しい場合があります。 また、このソリューションは、複数のプロジェクトと複数のアセンブリがあり、それぞれに証明書が必要な場合、最も使いにくいかもしれません。







プラグインを使用してAndroidアプリケーションに署名する(Android Signing Plugin):すばらしい!



これは、Jenkinsでアプリケーションを保存および署名するための優れたクリーンなソリューションです。 プラグインは、標準のJenkinsストアを使用して証明書を処理します。 これにより、パスワードを知る必要がある開発者の数が制限され、証明書を安全に保存でき、すべてのアセンブリが証明書に簡単にアクセスできます。







Jenkins Android Signing Pluginを構成して使用する方法:



最初に行う必要があるのは、 資格情報プラグインが Jenkinsにインストールされていることを確認することです。

これは、Jenkinsの左パネルを見ると簡単に確認できます。 以下に示すように「資格情報」セクションが表示される場合、インストールされています。

資格情報セクションがない場合は、資格情報プラグインをインストールすることを忘れないでください。これは、Android署名プラグインのインストールと同時に実行できます。







プラグインのインストールは、いくつかの簡単な手順で行われます。







  1. 以下に示すように、「Jenkinsの管理」セクションを選択します。







  2. [プラグインの管理]を選択します。







  3. 現在のプラグインの利用可能な更新を確認する必要があります。 画面の上部で、[利用可能]タブを選択します。







  4. これで、右上の検索を使用して「Credentials Plugin」(インストールされていない場合)と「Android Signing Plugin」を見つけることができます。 各プラグインの左側にあるチェックボックスをオンにして、画面の下部にある[今すぐダウンロードして再起動後にインストールする]をクリックします。



いいね!

すべてがインストールされたので、アプリケーションに署名するために少なくとも1つの証明書を追加できます。 資格情報プラグインを使用するための詳細な手順はこの記事の主題ではありませんが、 インターネットで簡単に見つけることができます。 以下に示すように、1つの新しい証明書を追加する必要があります。







ご覧のとおり、プラグインはPKCS12証明書のみをサポートしています。 残念ながら、Android Studioの最新バージョンは、プラグインと互換性のないJKS証明書を発行します。

「JKS」を「PKCS12」に変換できる便利なコマンドラインユーティリティ「keytool」があると便利です。







keytool -importkeystore -srckeystore {REPLACE_WITH_JKS_FILE} -srcstoretype JKS -deststoretype PKCS12 -destkeystore ConvertedCertificate.p12
      
      





「PKCS12」ファイルを入手したら、ダウンロードできます。 証明書をアップロードする前にパスワードを入力してください。そうしないと、Jenkinsはファイルをダウンロードできません。 これで、Androidビルドにこの証明書を使用する準備が整いました。







ソースコードの唯一の要件は、Jenkins'omのビルド時に使用される「 buildType 」の「 signingConfig 」を空のままにする必要があることです。 次に、未署名のAPKが作成され、プラグインによって署名できます。 標準デバッグビルドは、自動生成された証明書で署名されることに注意してください。







これで、アプリケーションに署名する準備がすべて整いました。「Android APKに署名」ステップをアセンブリに追加する必要があります。 以下は簡単な例です。まず、Gradleコマンドを実行して、未署名のリリースビルドをビルドします。 その後、次のステップでビルドに署名できます。 使用する証明書を証明書ストアから選択し、キーエイリアスと署名されていないAPKへのパスを指定する必要があります。







以上です! これで、ビルド後すぐに配布できる署名付きビルドが作成されました。







ちなみに、Googleには独自の証明書ストアがあり、安全なキーストレージの問題を部分的に解決します。








All Articles