作者:火影魂XJ_710 | 来源:互联网 | 2022-12-08 14:17
亲爱的stackoverflow社区,我再次向您求助:)
最近,我遇到了Gitlab及其非常好的捆绑CI / CD解决方案的奇迹。它工作得很出色,但是我们所有人都需要对二进制文件进行签名,我们没有发现像我将密钥上传到Jenkins服务器那样的方法。
那么,在构建发行版时,如何在不检查密钥和秘密的情况下对我的android(实际上是颤抖的)应用程序进行签名?
据我所知,大多数人使用签名设置来定义构建作业,签名设置是指未提交的key.properties文件,该文件指定了本地keystore.jks。在本地构建APK时,这种方法可以正常工作,但是如果我想作为CI / CD工作的一部分来构建和存档它们,我该怎么办?
对于秘密密钥,例如密钥库本身的密码,我发现我可以将它们简单地存储为受保护的变量,但可以存储实际的密钥库文件本身。我该怎么办?
任何想法,建议都将受到欢迎。干杯
1> 小智..:
通常,我将密钥库文件(作为base64字符串),别名和密码存储到Gitlab的secrets变量中。
在.gitlab-ci.yml中执行以下操作:
create_property_files:
stage: prepare
only:
- master
script:
- echo $KEYSTORE | base64 -d > my.keystore
- echo "keystorePath=my.keystore" > signing.properties
- echo "keystorePassword=$KEYSTORE_PASSWORD" >> signing.properties
- echo "keyAlias=$ALIAS" >> signing.properties
- echo "keyPassword=$KEY_PASSWORD" >> signing.properties
artifacts:
paths:
- my.keystore
- signing.properties
expire_in: 10 mins
最后,在您的构建包中:
signingConfigs {
release {
file("../signing.properties").with { propFile ->
if (propFile.canRead()) {
def properties = new Properties()
properties.load(new FileInputStream(propFile))
storeFile file(properties['keystorePath'])
storePassword properties['keystorePassword']
keyAlias properties['keyAlias']
keyPassword properties['keyPassword']
} else {
println 'Unable to read signing.properties'
}
}
}
}