我需要能够使用Jenkins工作构建我的apk的发布版本。
阅读以下SO问题
How to create a release signed apk file using Gradle?
我知道我可以通过两种方式之一来做到这一点。要么让用户在cmd提示符下输入密码,要么将我的密码详细信息存储在一个没有提交给git的纯文本文件中,并存在于我的本地计算机上。
但是在jenkins上运行构建作业时,这些都不起作用。 1)我无法获得用户输入,因为这可能是在半夜运行(即使用户在他们的机器上,我甚至不知道如何从cmd线路获得用户输入)2任何可以访问该构建框的人都可以通过cmd行或在该jenkins服务器上运行的另一个build.gradle作业捕获该文件的内容。
有没有人知道我可以隐藏密码,但Jenkins的工作可以访问它?
由于
答案 0 :(得分:6)
您可以使用Mask Password Plugin,它就是这样做的。或者EnvInject插件中包含相同的功能,并且迟早所有Jenkins项目都需要EnvInject插件(这可以做很多其他事情),所以不妨现在就开始使用它。
在任何构建步骤中,您现在可以使用$name
(如前所述)来引用密码,就像您在纯文本中输入密码一样。
$name
本身不会产生任何内容,并且像所有Jenkins变量一样,它不是持久的)。****
而不是密码。唯一的安全问题是,如果某人具有管理权限来配置您的作业,他们可以将echo $name > secretpassword.txt
写入构建步骤,然后查看工作区中的文件。但是你应该小心为谁分配管理权限。
答案 1 :(得分:1)
答案 2 :(得分:0)
如果您的Jenkins实例恰好在EC2上运行,并且您不想在文件系统中永久存储机密,则可以将商店和密钥密码放入Systems Manager Parameter Store,然后在构建时查询它们。此外,您可以将密钥库本身放入外部存储(例如S3),并且只在构建期间将其保留在本地。
以下是一个示例构建脚本(假设秘密参数名为android-keystore-pass
和android-signature-key-pass
):
set -o errexit
set -o pipefail
keystore_file=keystore.properties
keystore=wise.jks
aws s3 cp s3://path-to-android/$keystore .
chmod go-rwx $keystore
touch $keystore_file
chmod go-rwx $keystore_file
cat > $keystore_file << EOF
storePassword=`aws ssm get-parameters --names android-keystore-pass --with-decryption | cut -f4`
keyPassword=`aws ssm get-parameters --names android-signature-key-pass --with-decryption | cut -f4`
keyAlias=android
storeFile=$WORKSPACE/$keystore
EOF
可以找到Gradle构建脚本的示例in this answer。您可以向源控件提交虚拟keystore.properties
,以便(非发布)构建在dev计算机上工作。
还有一些独立于平台的开源秘密分发工具,例如: Vault,但我没有尝试过任何一个。