Frage

Ich habe die folgende Bauumgebung:

  • Ubuntu
  • Java 1.6.0_24
  • Apache Ant 1.8.2
  • Jenkins 1.427
  • Jetty 6.1.26

Ich kann eine Release -APK (Zipaligned und Signed) aus der Befehlszeile (im Jenkins -Arbeitsbereichsbereich) erstellen, indem ich ausführen ant release und dann die Keystore eintippen, wenn sie aufgefordert werden.

Verwenden Sie jedoch denselben Build -Befehl von einem Jenkins -Job, es schlägt jedoch mit Folgendem fehl:

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

Im Jenkins Ant Target -Schritt habe ich die folgenden Eigenschaften festgelegt:

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

Was würde dazu führen, dass Jenkins nicht unterschreibt, wobei die Ausführung des gleichen Ziels aus der Befehlszeile einwandfrei funktioniert?

Ich habe dafür gegoogelt und festgestellt, dass einige Leute ihre eigenen Bash -Skripte schreiben, um ihre APKs zu unterschreiben, und diese als Shell -Ziele danach ausführen, aber es scheint ziemlich schmutzig zu sein ... irgendwelche Vorschläge?

Vielen Dank

War es hilfreich?

Lösung

Wir haben unseren Jenkins -Server eingerichtet, um unsere APKs mit derselben Technik zu unterschreiben, die Sie hier skizzieren, und es funktioniert für uns. Ein Unterschied besteht darin, dass ich den vollqualifizierten Pfad in den Keystore versetze, anstatt mich auf einen relativen Weg zu verlassen. Ich bin mir nie sicher, woher sie relativ sind. Wenn sich Ihr Keystore in der Versionskontrolle befindet, bietet Jenkins eine Variable der Arbeitsbereichsroot, mit der Sie darauf hinweisen können.

Es lohnt sich auch, diesen Build aus der Befehlszeile zu testen, in der Sie all diese Eigenschaften definieren ant -Dkey.store=/some/key.store ... Anweisungen, um sicherzustellen, dass alle von Ihnen bereitgestellten Werte korrekt sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top