Alm*_*und 9 android code-signing continuous-deployment gitlab flutter
亲爱的stackoverflow社区,我再次向您求助:)
最近,我遇到了Gitlab及其非常好的捆绑CI / CD解决方案的奇迹。它工作得很出色,但是我们所有人都需要对二进制文件进行签名,我们没有发现像我将密钥上传到Jenkins服务器那样的方法。
那么,在构建发行版时,如何在不检查密钥和秘密的情况下对我的android(实际上是颤抖的)应用程序进行签名?
据我所知,大多数人使用签名设置来定义构建作业,签名设置是指未提交的key.properties文件,该文件指定了本地keystore.jks。在本地构建APK时,这种方法可以正常工作,但是如果我想作为CI / CD工作的一部分来构建和存档它们,我该怎么办?
对于秘密密钥,例如密钥库本身的密码,我发现我可以将它们简单地存储为受保护的变量,但可以存储实际的密钥库文件本身。我该怎么办?
任何想法,建议都将受到欢迎。干杯
通常我将密钥库文件(作为 base64 字符串)、别名和密码存储到 Gitlab 的 Secrets 变量中。
使用GitLab 15.0(2022 年 5 月)应该会更容易
项目级安全文件公开测试版
以前,很难在 CI/CD 管道中使用二进制文件,因为 CI/CD 变量只能包含文本值。这使得使用配置文件、证书、密钥库和其他安全信息变得困难,而这些信息对于构建移动应用程序的团队来说非常重要。
今天,我们发布了项目级安全文件的公开测试版。现在,您可以将二进制文件上传到 GitLab 中的项目,并将这些文件包含在 CI/CD 作业中,以便根据需要在构建和发布过程中使用。安全文件存储在版本控制之外,并且不是项目存储库的一部分。
请在反馈问题中向我们留下您对该功能的体验反馈。
通常,我将密钥库文件(作为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
Run Code Online (Sandbox Code Playgroud)
最后,在您的构建包中:
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'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
感谢 @IvanP 的回答,但我必须在 Gitlab 管道中进行一些更改才能使其正常工作。
将密钥库导出为 base64 字符串:
openssl base64 -A -in my.keystore > base64
Run Code Online (Sandbox Code Playgroud)
创建一个新变量并将值复制粘贴到文件 base64 中。执行此操作时要小心,我搞砸了格式,管道无法解码密钥库。变量必须用 ${} 而不仅仅是 $ 来引用。
- echo -n ${ANDROID_KEYSTORE} | base64 -d > my.keystore
- echo "keystorePath=../my.keystore" > myapp.properties
- echo "keystorePassword=${KEYSTORE_PASSWORD}" >> myapp.properties
- echo "keyAlias=${ALIAS_NAME}" >> myapp.properties
- echo "keyPassword=${KEY_PASSWORD}" >> myapp.properties
Run Code Online (Sandbox Code Playgroud)
请参阅 build.gradle 中的 myapp.properties,如上面 @IvanP 的答案中所述。
| 归档时间: |
|
| 查看次数: |
2619 次 |
| 最近记录: |