如何解决Secret文件绑定问题

时间:2015-08-13 21:49:33

标签: android jenkins binding gradle continuous-integration

我的jenkins构建有问题。

我已在我的全局凭据中配置了一个密钥库,用于我的一个Android构建。当我必须签署我的apk以便在Google Play上分发我的应用程序时,需要此密钥库。

因此,在作业中,我已经配置了一个秘密文件绑定,以允许jenkins将密钥库文件复制到临时位置,并将一个变量(我们称之为SECRET_PATH)设置到该位置。然后,当调用gradle脚本(在开关部分中)时,我可以在命令行上为gradle提供此变量的值。

但是每次构建都失败了:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':myapp:packageRelease'.
> Failed to read key ******** from store "/home/jenkins/slave/secretFiles/3607aab3-6e27-497a-b198-7d9a3aeb2913/keystore": Keystore was tampered with, or password was incorrect

就好像位置 / home / jenkins / slave / secretFiles / 3607aab3-6e27-497a-b198-7d9a3aeb2913 / keystore 甚至不存在。

在作业配置中, Bindings 部分的帮助提示也提到了这一点:

Warning: if the master or slave node has multiple executors, any other build running concurrently on the same node will be able to read the contents of this file.

就好像另一个并发构建正在运行并删除了密钥库所在的位置。这真的很奇怪。

还有一件事,我正在使用主/从拓扑,其中所有东西都是docker化的。虽然不确定docker本身是否参与其中。我认为这纯粹是一个詹金斯问题,但我提供这些信息,以便你们有一些背景。

你们有没有经历过这种奇怪的行为,jenkins似乎无法“解决”秘密文件绑定? 任何帮助都会非常感激。

提前感谢,

1 个答案:

答案 0 :(得分:0)

  

Failed to read key ******** from store "/home/jenkins/slave/secretFiles/3607aab3-6e27-497a-b198-7d9a3aeb2913/keystore": Keystore was tampered with, or password was incorrect

     

就好像位置/.../keystore甚至不存在一样。

不,错误消息是正确的 - 文件存在,但很可能您提供的商店密码或密钥密码不正确。

如果密钥库不存在,则会出现如下错误:
File '/.../release.keystore' specified for property 'signingConfig.storeFile' does not exist.

您可以通过运行file $SECRET_PATH/keystorels -l $SECRET_PATH/keystore或使用keytool或类似内容来仔细检查。

你没有提到将密钥库和密码密码注入工作中 - 你是怎么做到的?

首先确保从命令行使用Gradle按预期构建和签署发行版本。

然后您可以尝试在Jenkins中执行相同操作,方法是通过Gradle步骤传递文件名和密码(例如,如果您使用“作业配置历史记录”插件,这并不是一个好主意)

一旦有效,您可以使用凭证绑定插件注入文件,并注入密码。