无法从Jenkins签署Android APK,但可以从命令行工作

时间:2011-09-08 15:10:34

标签: android ubuntu continuous-integration jenkins android-2.1-eclair

我有以下构建环境:

  • Ubuntu的
  • Java 1.6.0_24
  • Apache ant 1.8.2
  • Jenkins 1.427
  • Jetty 6.1.26

我可以通过命令行(在jenkins工作区中)创建一个发布APK(zipaligned and signed),运行ant release,然后在提示时键入密钥库。

但是,如果使用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 个答案:

答案 0 :(得分:3)

我们已经设置了Jenkins服务器,使用您在此处概述的相同技术对我们的APK进行签名,这对我们有用。一个区别是我将完全限定的路径放到密钥库而不是依赖于相对路径。我不知道他们在哪里相对。如果您的密钥库处于版本控制中,Jenkins提供了一个工作区根环境变量,您可以使用它来指向它。

还可以从命令行测试此构建,您可以使用ant -Dkey.store=/some/key.store ...指令定义所有这些属性,以确保您提供的所有值都正确。