android - 无法从 Jenkins 签署 Android APK,但可以从命令行运行

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

我有以下构建环境:

  • Ubuntu
  • Java 1.6.0_24
  • Apache Ant 1.8.2
  • Jenkins 1.427
  • 码头 6.1.26

我可以从命令行(在 jenkins 工作区)创建一个发布 APK(zipaligned 和签名),方法是运行 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 target 步骤中,我设置了以下属性:

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 目标运行,但这似乎是一种很肮脏的方式……有什么建议吗?

谢谢

最佳答案

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

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

关于android - 无法从 Jenkins 签署 Android APK,但可以从命令行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7350318/

相关文章:

linux - 使用 Ant 复制到受限文件夹(在 Ubuntu 中使用 Eclipse)

continuous-integration - VSTS 构建中的混合目标

bash - 如何简化 YAML CircleCI 配置以获得更好的可读性?

android - 在android中 Activity 动画结束后如何调用函数

java - Intent getSerializedExtra ClassCastException

android - 审核 APK 时的警告信息

android - 数据绑定(bind)构建错误,无关输入 '\r' 期望 {COMMENT, SEA_WS, '<' , PI}

django - 如何在安装了python 3.4的情况下使用python 2.7在nginx和virtualenv上使Django 1.7在Ubuntu 14.04上正常工作?

mysql - apache/mysql 响应缓慢但未达到 cpu/内存和限制

java - 为什么 Hudson 忽略我的 profiles.xml 文件?