Не удается подписать Android APK от Jenkins, но работает из командной строки - PullRequest
4 голосов
/ 08 сентября 2011

У меня есть следующая среда сборки:

  • Ubuntu
  • Java 1.6.0_24
  • Apache ant 1.8.2
  • Дженкинс 1,427
  • Причал 6.1.26

Я могу создать выпуск APK (zipaligned и подпись) из командной строки (в рабочей области jenkins), выполнив команду 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, а потом запускают их как цели оболочки, но это кажется довольно грязным ... любые предложения?

Спасибо

1 Ответ

3 голосов
/ 30 ноября 2011

Мы настроили наш сервер Jenkins, чтобы подписывать наши APK, используя ту же технику, которую вы изложили здесь, и она работает для нас.Единственное отличие состоит в том, что я указываю полный путь к хранилищу ключей, а не полагаюсь на относительный путь.Я никогда не уверен, откуда они родом.Если ваше хранилище ключей находится в режиме управления версиями, Jenkins предоставляет корневую переменную среды рабочего пространства, которую вы можете использовать для указания на нее.

Также было бы целесообразно протестировать эту сборку из командной строки, где вы определяете все эти свойства с помощью ant -Dkey.store=/some/key.store ... директивы, чтобы убедиться, что все указанные вами значения верны.

...