4

我有下面的生成环境中工作:未能签署从詹金斯的Android APK,但在命令行

  • Ubuntu的
  • 的Java 1.6.0_24
  • Apache Ant的1.8.2
  • 詹金斯1.427
  • 码头6.1.26

我可以创建一个发布APK(zipalign处理和(在jenkins工作区中),运行ant release,然后在出现提示时键入密钥库传递。

但是使用相同的生成命令从失败与下面的一个詹金斯工作:

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 

在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 

什么会导致詹金斯无法签名,从命令行执行相同的目标工作正常吗?

我已经使用了这个功能,并且发现有些人正在编写自己的bash脚本来签署他们的APK,然后将这些作为shell目标运行,但它看起来相当肮脏......任何建议?

感谢

回答

3

我们已经建立了我们的詹金斯服务器使用相同的技术,你勾勒此处登录我们的APK,以及它为我们工作。一个区别是我把完全合格的路径放在密钥库上,而不是依赖相对路径。我不知道他们是从哪里来的。如果您的密钥库在版本控制中,Jenkins会提供一个工作空间根环境变量,您可以使用它来指向它。

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