【问题标题】:How to generate signed app bundle using jenkins?如何使用詹金斯生成签名的应用程序包?
【发布时间】:2020-07-20 10:35:55
【问题描述】:
使用 jenkins,我可以为我的应用程序生成一个发布应用程序包,但是,我陷入了下一步,这涉及为我的应用程序生成一个签名的应用程序包,以便我可以在 Playstore 上更新我的构建。那么有没有插件或任何其他方式可以让我在 jenkins 上为我的应用程序生成签名的应用程序包?
【问题讨论】:
标签:
android
jenkins
continuous-integration
google-play-services
jenkins-plugins
【解决方案1】:
这可以通过以下方式完成:
- 配置 Android 应用的 build.gradle 文件以从环境变量中获取签名信息(如果它们可用)。
- 通过 Jenkins UI 将签名密钥、别名和密码配置为 Jenkins 作业(秘密文件、秘密文本...)中的凭据。
- 使用凭据绑定插件从 Jenkinsfile 中的凭据中设置环境变量,从而将它们传递给 build.gradle。
从build.gradle中提取:
apply plugin: 'com.android.application'
def myStoreFile = System.getenv('MY_STORE_FILE')
def myStorePassword = System.getenv('MY_STORE_PASSWORD')
def myKeyAlias = System.getenv('MY_KEY_ALIAS')
def myKeyPassword = System.getenv('MY_KEY_PASSWORD')
android {
...
signingConfigs {
release {
if (myStoreFile) {
storeFile rootProject.file(myStoreFile)
storePassword myStorePassword
keyAlias myKeyAlias
keyPassword myKeyPassword
}
}
}
buildTypes {
release {
...
if (myStoreFile && myStorePassword && myKeyAlias && myKeyPassword) {
signingConfig signingConfigs.release
}
}
}
...
}
从 Jenkinsfile 中提取:
stage ('Build and Sign Android Bundle') {
...
steps {
// Signing parameters are configured in Jenkins (here we use secret file, secret text and username with password respectively)
// and are passed to the build.gradle file using the environment variables (MY_STORE_FILE, MY_KEY_ALIAS etc)
withCredentials([file(credentialsId: 'android-store-file', variable: 'MY_STORE_FILE'),
string(credentialsId: 'android-store-password', variable: 'MY_STORE_PASSWORD'),
usernamePassword(credentialsId: 'android-key', usernameVariable: 'MY_KEY_ALIAS', passwordVariable: 'MY_KEY_PASSWORD')]) {
dir ('android-app-root-directory') {
sh 'gradle clean bundleRelease'
}
}
}
}