我的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似乎无法“解决”秘密文件绑定? 任何帮助都会非常感激。
提前感谢,
答案 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/keystore
,ls -l $SECRET_PATH/keystore
或使用keytool
或类似内容来仔细检查。
你没有提到将密钥库和密码密码注入工作中 - 你是怎么做到的?
首先确保从命令行使用Gradle按预期构建和签署发行版本。
然后您可以尝试在Jenkins中执行相同操作,方法是通过Gradle步骤传递文件名和密码(例如,如果您使用“作业配置历史记录”插件,这并不是一个好主意)
一旦有效,您可以使用凭证绑定插件注入文件,并注入密码。