[英]What is the best practice to use keystores to sign release version of an Android app on Travis CI?
我一直在使用Travis CI來構建我的Android應用程序 。 我在調試版本中使用debug.keystore
對其進行簽名,我將其推送到公共存儲庫
但我想構建發布版本並使用此gradle插件將其上傳到Google Play商店。
此過程需要keystore
和p12
證書文件。
雖然我可以將加密的環境變量添加到Travis CI,但我不知道存儲這些文件的最佳方法。
問題1:這樣做的最佳做法是什么? 有人可以提供開源實現嗎? (我找不到一個)
一種可能的實現:安全地存儲用戶名和密碼作為環境變量。 將文件存儲在啟用SSL的環境中,並使用這些用戶名和密碼通過簡單的HTTP身份驗證保護它們。 在構建過程開始之前使用它們使用curl
下載。
問題2這種實施是否有意義? 它安全嗎?
額外:這2篇博文是與此相關的很好的資料,但不幸的是,它們都沒有回答這個問題。
http://stablekernel.com/blog/deploying-google-play-continuous-delivery-android-part-4/ https://www.bignerdranch.com/blog/continuous-delivery-for-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'
}
}
你看到這個答案嗎? 他在“之前”和“之后”修改他的構建時發布了他的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
這是使用密鑰的過程的secure
部分,密碼用於TravisCI(安全地存儲在TravisCI上)。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.