Jenkins中签署Android APK失败,但从命令行可以成功

5
我拥有以下的构建环境:
  • Ubuntu
  • Java 1.6.0_24
  • Apache ant 1.8.2
  • Jenkins 1.427
  • Jetty 6.1.26
我能通过命令行(在Jenkins工作区域)创建一个已签名并进行了zipalign处理的发布APK,方法是运行ant release,然后在提示时输入keystore密码。
但是,当从Jenkins作业中使用相同的构建命令时,会出现以下错误:
release:
     [echo] Signing final apk...
  [signjar] Signing JAR: /home/james/.jenkins/workspace/android-sam/androidsam/bin/AndroidSam-unsigned.apk to /home/james/.jenkins/workspace/android-sam/androidsam/bin/AndroidSam-unaligned.apk as mykeystore 
  [signjar] jarsigner: Certificate chain not found for: mykeystore .  mykeystore  must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.

BUILD FAILED
/home/james/tools/android-sdk-linux_x86/tools/ant/main_rules.xml:641: jarsigner returned: 1

在Jenkins的Ant目标步骤中,我设置了以下属性:
key.store=my-release-key.keystore
key.alias=mykeystore 
key.store.password=<mypass>
key.alias.password=<mypass>
sdk.dir=/home/james/tools/android-sdk-linux_x86

什么原因会导致jenkins签名失败,而通过命令行执行相同的目标却可以正常工作?
我已经在谷歌上搜索了这个问题,发现一些人正在编写自己的bash脚本来签名他们的APK,并在之后作为Shell目标运行,但这似乎是一种很不好的方法......有什么建议吗?
谢谢
1个回答

3
我们已经按照您在这里概述的技巧设置了Jenkins服务器,用于签署我们的APK文件,对我们有效。不同之处在于,我放置了完全限定路径到密钥库,而不是依赖于相对路径。我从来不确定它们相对位置在哪里。如果您的密钥库在版本控制中,Jenkins提供了一个工作区根环境变量,您可以使用它来指向它。
此外,值得测试的是,从命令行测试构建时,定义所有这些属性与ant -Dkey.store=/some/key.store ...指令,以确保您提供的所有值都是正确的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接