在开发 Android 项目时,为了自动化构建输出签名 APK 方便,通常会配置 signingConfigs
项来直接输出签名后的 APK。在构建开源项目时,证书文件一般不会上传到仓库,证书相关的配置也会存在被 ignore 的本地 properties 文件中。之前使用 Travis 构建开源项目时,使用的方式是仓库中存有一个加密的证书文件,通过在 Travis 控制台配置这个加密文件的密钥,以及其他必需的配置项来完成构建。在 Jenkins 里也是类似的方式不过更加方便一些。
首先,可以把证书文件直接上传到 Jenkins 里:
-
进入
Credentials
-System
-Global credentials (unrestricted)
-Add Credentials
,选择Secret File
,选择要上传的签名文件,ID 和 Description 按照需要给一个有含义的文本即可 -
同级下面,再通过
Add Credentials
添加一项,选择Username and Password
。Username 存储签名需要的 Alias,密码存储 Store Password 和 AliasPassword(这里我自己的约定是这样的,如果不相符可以建立更多的 credential 项)。 -
在构建项目下面,
Build Environment
下面勾选Use secret text(s) or file(s)
,Binding
下添加一个Secret File
和Username and Password
,分别对应 1、2 步添加的两项,绑定三个变量:KEY_PATH
、KEY_ALIAS
和KEY_PASSWD
。 -
在构建时使用 Execute Shell,在构建之前的脚本之前获取变量来生成 gradle.properties 文件:
echo "\ CERT_PATH=$KEY_PATH\n\ CERT_ALIAS=$KEY_ALIAS\n\ CERT_KEY_PASSWD=$KEY_PASSWORD\n\ CERT_STORE_PASSWD=$KEY_PASSWORD" > gradle.properties
-
gradle 配置中读取的变量和第 4 步保持对应:
signingConfigs { release { keyAlias CERT_ALIAS keyPassword CERT_KEY_PASSWD storeFile file(CERT_PATH) storePassword CERT_STORE_PASSWD } }