私はTravisCIを使用して Androidアプリ をビルドしています。 パブリックリポジトリ にプッシュしたdebug.keystore
を使用してデバッグビルドで署名しています
しかし、リリースビルドをビルドし、これを使用してGoogle Playストアにアップロードしたいと思います gradleプラグイン 。
このプロセスには、keystore
とp12
の証明書ファイルが必要です。
暗号化された環境変数をTravisCIに追加することはできますが、これらのファイルを保存するための最良の方法がわかりません。
質問1:これを行うためのベストプラクティスは何ですか?そして、誰かがオープンソースの実装を提供できますか? (見つかりませんでした)
1つの可能な実装:ユーザー名とパスワードを環境変数として安全に保存します。ファイルをSSL対応環境に保存し、単純なHTTP認証を使用してこれらのユーザー名とパスワードでファイルを保護します。ビルドプロセスを開始する前に、それらを使用してcurl
を使用してダウンロードします。
質問2この実装はまったく意味がありますか?安全ですか?
追加:これらの2つのブログ投稿は、これに関連する優れた情報源ですが、残念ながら、いずれもこの質問に答えていません。
http://stablekernel.com/blog/deploying-google-play-continuous-delivery-Android-part-4/https://www.bignerdranch.com/blog/continuous -Android用の配信/
ここでソリューションの実装を開始しました(オープンソース): https://github.com/NonameDev/MathApp
System.getenv("TRAVIS")
を使用して、ビルドがTravisで実行されていることを検出します。storeFile rootProject.file('release.keystore')
-リリースキーを自分のリポジトリに保持します-travisはパスワードを非表示にしますstorePassword System.getenv("KEYSTORE_PASS")
-環境変数をtravisに保存します-travisは出力を非表示にしますkeyAlias System.getenv("ALIAS_NAME")
-環境変数をtravisに保存します-travisは出力を非表示にしますkeyPassword System.getenv("ALIAS_PASS")
-環境変数をtravisに保存します-travisは出力を非表示にしますSystem.getenv("SERVICE_EMAIL")
-環境変数をtravisに保存します-travisは出力を非表示にしますrootProject.file('play.p12')
-証明書をローカルに保存します-travisはメールサービスアカウントを保存しますbuild.gradle
:buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.2.3'
classpath 'com.github.triplet.gradle:play-publisher:1.1.0'
}
}
build.gradle
:apply plugin: 'com.Android.application'
apply plugin: 'com.github.triplet.play'
Android {
compileSdkVersion 22
buildToolsVersion '22.0.1'
defaultConfig {
applicationId 'burrows.apps.mathapp'
minSdkVersion 9
targetSdkVersion 22
versionCode 1
versionName '1.0'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
signingConfigs {
debug {
storeFile rootProject.file('debug.keystore')
storePassword 'Android'
keyAlias 'androiddebugkey'
keyPassword 'Android'
}
if (System.getenv("TRAVIS")) {
release {
storeFile rootProject.file('release.keystore')
storePassword System.getenv("KEYSTORE_PASS")
keyAlias System.getenv("ALIAS_NAME")
keyPassword System.getenv("ALIAS_PASS")
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
if (System.getenv("TRAVIS")) {
play {
serviceAccountEmail = System.getenv("SERVICE_EMAIL")
pk12File = rootProject.file('play.p12')
track = 'production' // or 'alpha' or 'beta' or 'production'
}
}
これを見たことがありますか answer ?彼は、自分のビルドを修正する「前」と「後」に、TravisCIビルドへのリンクを投稿しています。
これが彼の答えです:
基本的に彼はSudo pip install google-api-python-client
を実行する必要がありました
そうは言っても、私はgithubリポジトリをチェックしました ここ 。
.travis.yml
です:language: Android
android:
components:
- build-tools-21.1.2
- extra-Android-m2repository
env:
global:
- secure: <removed>
- secure: <removed>
before_install:
- ci/decrypt_files
- ci/start_emulator
install:
- ./gradlew build
before_script:
- ci/wait_for_emulator
script:
- ./gradlew connectedAndroidTestMockDebug
after_success:
- ci/deploy_all
notifications:
email:
- <removed>
ソース:https://github.com/mg6maciej/VielenGamesAndroidClient/blob/develop/.travis.yml
これは、キーが使用され、パスワードがTravisCI(TravisCIに安全に保存されている)から使用されるプロセスのsecure
部分です。
before_install:
- ci/decrypt_files
- ci/start_emulator
ci/decrypt_files
のソース:
#!/bin/bash
openssl aes-256-cbc -d -k "$file_password" -in app/gradle.properties.enc -out app/gradle.properties
openssl aes-256-cbc -d -k "$file_password" -in app/crashlytics.properties.enc -out app/crashlytics.properties
openssl aes-256-cbc -d -k "$file_password" -in ci/vielengames.keystore.enc -out ci/vielengames.keystore
openssl aes-256-cbc -d -k "$file_password" -in ci/key.p12.enc -out key.p12
ソース:https://github.com/mg6maciej/VielenGamesAndroidClient/blob/develop/ci/decrypt_files
ここで、python
およびその他のGoogle
ライブラリがダウンロードされ、アプリをGoogle Play
にデプロイするために使用されます。
after_success:
- ci/deploy_all
ci/deploy_all
のソース:
#!/bin/bash
test "$TRAVIS_BRANCH" == "master" && ci/deploy_google_play
ci/deploy_testfairy
ci/deploy_crashlytics_beta
ci/deploy_google_play
のソース:
#!/bin/bash
DIR=$(dirname $0)
Sudo apt-get install python-openssl
Sudo pip install google-api-python-client
python $DIR/basic_upload_apks.py com.vielengames $DIR/../app/build/outputs/apk/app-production-release.apk
python $DIR/basic_upload_apks.py com.vielengames.staging $DIR/../app/build/outputs/apk/app-staging-release.apk
あなたの質問1:
アプリにはkeystore
とp12
の両方が必要だと思いますが、TravisCIでパスワードを安全に保存できます("$file_password"
を参照)。上記の例。
あなたの質問2:
keystore
およびp12
証明書を持っている場合でも、両方が機能し、ストアへの公開に使用するには、パスワード("$file_password"
を参照)が必要です。
セキュリティを強化するために、メインログインよりも少ない権限で別のログインを追加する必要があります。リポジトリの作成者が行ったことは次のとおりです ここ :
...
TRACK = 'beta' # Can be 'alpha', beta', 'production' or 'rollout'
SERVICE_ACCOUNT_EMAIL = (
'148768954062-sp89pjb1blr7cu2f73f4fpd6dqloc047@developer.gserviceaccount.com')
# Declare command-line flags.
argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument('package_name',
help='The package name. Example: com.Android.sample')
argparser.add_argument('apk_file',
nargs='?',
default='test.apk',
help='The path to the APK file to upload.')
...
ソース:https://github.com/mg6maciej/VielenGamesAndroidClient/blob/develop/ci/basic_upload_apks.py