android build在jenkins上发布apk,无需将我的密码存储在纯文本中

android build在jenkins上发布apk,无需将我的密码存储在纯文本中,android,jenkins,apk,android-build,Android,Jenkins,Apk,Android Build,我需要能够使用Jenkins作业构建apk的发布版本 通过阅读下面的问题 我知道我可以用两种方法中的一种。要么让用户在cmd提示符下输入密码,要么将我的密码详细信息存储在一个纯文本文件中,该文件不会提交给git,并且存在于我的本地计算机上 但是,在jenkins上运行构建作业时,这两种方法都不起作用。1)我不能获得用户输入,因为这可能是在午夜运行(我甚至不知道如何从CMD线获得用户输入,即使用户在他们的机器)2)任何人都可以访问该构建框,可以通过cmd行或运行在jenkins服务器上的另一个b

我需要能够使用Jenkins作业构建apk的发布版本

通过阅读下面的问题

我知道我可以用两种方法中的一种。要么让用户在cmd提示符下输入密码,要么将我的密码详细信息存储在一个纯文本文件中,该文件不会提交给git,并且存在于我的本地计算机上

但是,在jenkins上运行构建作业时,这两种方法都不起作用。1)我不能获得用户输入,因为这可能是在午夜运行(我甚至不知道如何从CMD线获得用户输入,即使用户在他们的机器)2)任何人都可以访问该构建框,可以通过cmd行或运行在jenkins服务器上的另一个build.gradle作业对该文件的内容进行cat

有人知道我可以隐藏我的密码,但詹金斯的工作可以访问它吗


谢谢

你应该看看这个插件


您可以使用掩码密码插件,它就是这样做的。或者相同的功能也包含在Envinjet插件中,迟早所有Jenkins项目都会需要Envinjet插件(它可以做很多其他事情),所以最好现在就开始使用它

在生成/生成后步骤中安全使用密码
  • 安装
  • 在Jenkins全局配置下,查找全局密码部分
  • 添加一个名称(这将是环境变量名)和密码(将用星号****)
  • 在作业配置下,找到构建环境部分
  • 选中标记将密码作为环境变量注入到生成中
  • 然后选中全局密码
在任何构建步骤中,现在都可以使用
$name
(如前面所定义)引用密码,就像在纯文本中键入密码一样

  • 密码变量仅在作业执行时注入(在服务器的命令行上键入
    $name
    本身不会产生任何结果,并且与所有Jenkins变量一样,它不是持久的)
  • 作业控制台日志将显示
    **
    ,而不是密码(如果出现)
  • 您可以为每个作业配置密码,而不是全局配置密码,以便其他作业无法使用它

唯一的安全问题是,如果某人有管理权限来配置您的作业,他们可以将
echo$name>secretpassword.txt
写入生成步骤,然后查看工作区中的文件。但是,您应该小心将管理权限分配给谁。

如果您的Jenkins实例恰好在EC2上运行,并且您不想在文件系统中永久存储机密,您可以将存储密码和密钥密码放入,然后在构建时查询它们。此外,您可以将密钥库本身放入外部存储器(如S3),并且只在构建期间将其保存在本地

下面是一个构建脚本示例(假设机密参数命名为
android密钥库密码
android签名密钥密码
):

set-o errexit
设置-o管道故障
keystore_file=keystore.properties
keystore=wise.jks
aws s3 cp s3://android路径/$keystore。
chmod go rwx$keystore
触摸$keystore\u文件
chmod go rwx$keystore\u文件

cat>$keystore\u文件哇,谢谢。一个很好的答案和一些我们希望得到的东西,但是找不到。谢谢你的回答。你们都有相同的回答,但@slav有更多的细节,所以我给他打勾
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