Не удается подписать Android APK от Jenkins, но работает из командной строки
У меня есть следующая среда сборки:
- 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 ответ
Мы настроили наш сервер Jenkins, чтобы подписывать наши APK, используя ту же технику, которую вы изложили здесь, и это работает для нас. Единственное отличие состоит в том, что я указываю полный путь к хранилищу ключей, а не полагаюсь на относительный путь. Я никогда не уверен, откуда они родом. Если ваше хранилище ключей находится в режиме управления версиями, Jenkins предоставляет корневую переменную среды рабочей области, которую вы можете использовать для указания на нее.
Также стоит протестировать эту сборку из командной строки, где вы определяете все эти свойства с помощью ant -Dkey.store=/some/key.store ...
директивы, чтобы убедиться, что все значения, которые вы предоставили, являются правильными.