2014-10-20 16 views
18

Sto cercando di eseguire un xcodebuild automatizzato su Jenkins, ma io sono in esecuzione nell'erroreXcode, Codesign errore da Jenkins/SSH - "Interazione Utente non è consentito"

L'interazione dell'utente non è permesso. comando/usr/bin/codesign non riuscita con codice di uscita 1

ho già fatto riferimento "User interaction is not allowed" trying to sign an OSX app using codesign e altri thread simili, ma nessuna delle soluzioni sembrano porre rimedio corretto l'errore.


Ecco quello che ho già provato:

  • mi hanno permesso tutti gli elementi per accedere al portachiavi, e mi hanno specificatamente aggiunto codesign alla lista "consentire sempre" (come fatto qui https://stackoverflow.com/a/22637896)

  • ho impostato il portachiavi di non bloccare automaticamente con un timeout, sia attraverso le impostazioni di accesso portachiavi, e attraverso il comando

    0.123.516,410617 millions
    security set-keychain-settings -t 3600 -l <KEYCHAIN> 
    
  • Ho provato a chiamare

    codesign --sign <CODE SIGN IDENTITY> --force ... 
    

    prima che le compilazioni di progetto (più precisamente, questa soluzione https://stackoverflow.com/a/20208104), e anche se questo costruisce con successo il progetto non credo che codesigning prima della compilazione è corretto o affidabile. (Edit: questo non è riuscito quando viene eseguito da Jenkins)


Ecco i comandi sto eseguendo:

security unlock-keychain -p <PASSWORD> <KEYCHAIN> 
xcodebuild -scheme <SCHEME> -workspace <WORKSPACE> -derivedDataPath <BUILD DIRECTORY> -configuration <CONFIGURATION> "CONFIGURATION_BUILD_DIR=<BUILD DIRECTORY>" "CODE_SIGN_IDENTITY=<CODE SIGN ID>" "PROVISIONING_PROFILE=<PROVISIONING PROFILE>" clean build 

Qualcosa di interessante da notare è che la costruzione del progetto sulla macchina funziona con i comandi precedenti, ma provare a eseguire esattamente gli stessi comandi su ssh (e jenkins) causa l'errore.


Grazie in anticipo per il vostro aiuto!

+0

Jenkins ha accesso a '/ usr/bin/codesign'? – Opal

+0

sì, ha accesso – reyes20

+0

Nessuna altra idea:/Qualche tempo fa si stava sviluppando uno strumento CI per i progetti iOS e il codesigning era un incubo. – Opal

risposta

12

SSH non è supportata da Apple per l'esecuzione di generazione automatica come sono headless, così in esecuzione tramite SSH potrebbe essere il problema qui:

Il contesto fornito da LaunchDaemons non è supportato per l'esecuzione di GUI applicazioni . Il servizio SSH e l'impostazione predefinita per Jenkins sono entrambi implementati come LaunchDaemon. Nelle versioni precedenti di Xcode 5 xcodebuild potevano eseguire test sul simulatore iOS in questo contesto, ma non era mai una configurazione supportata, e come hai notato che non funziona più da Xcode 6.

A differenza di LaunchDaemon, LaunchAgents fornisce un contesto in cui è possibile eseguire le applicazioni GUI - se l'utente ha effettuato l'accesso in quel momento, con una finestra server /sessione Aqua. Convertire la configurazione Jenkins da essendo un LaunchDaemon come LaunchAgent eviterebbe il problema segnalato . È inoltre possibile utilizzare launchd per l'esecuzione di test sul simulatore di iOS da una sessione SSH, sia per lavorazione una LaunchAgent e manualmente carico/partenza che, o usando "launchctl submit”.

Hai provato a usare web agente, invece?

+0

Abbiamo passato quasi un'ora e mezza cercando di far funzionare il mio script di build da ssh'ing nel mio server di build. Ho controllato il mio codice e ho eseguito lo script attraverso l'interfaccia utente web e la compilazione di successo ... mi ha salvato Dio sa quanti tentativi più dolorosi. Grazie. – Taz

9

Solo nel caso qualcuno non è arrivato. la risposta alla questione legata risolve il problema. in sostanza è necessario eseguire security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN". corro questo prima che l'accumulo e il codesign riesce.

+0

Ha funzionato per me, questo era necessario solo se si esegue come servizio per me – Alon

+0

funziona per me. – keyOfVv

3

installare il plugin XCode qui: https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin

Scegliere l'opzione per sbloccare il portachiavi e fornire il percorso per il portachiavi. per esempio. $ {HOME} /Library/Keychains/login.keychain

Assicurati di impostare la variabile di ambiente $ HOME. Dall'esperienza è più semplice avere il login della macchina come utente, proprio come farebbe uno sviluppatore.

6

Inserire le chiavi nel portachiavi di sistema anziché Login/iCloud/Elementi locali.

+0

Questo è in realtà un ottimo consiglio, poiché non richiede l'esportazione di password per variabili, né la ricerca di dove risiede il portachiavi corretto. – igraczech

+0

Questo dovrebbe essere selezionato come risposta corretta –

1

Ho avuto questo problema con il plug-in Xcode di Jenkins.

Ho appena controllato Unlock Keychain?

in

Xcode - la firma del codice & OS X opzioni portachiavi

per fare la mia corsa costruzione.

enter image description here

0

La compilazione automatica (Jenkins w/SSH remoto), che utilizza productsign, ha funzionato bene fino a quando abbiamo aggiornato la casella costruzione da Yosemite alla Sierra.

prodottiign [4065: 51711] Errore durante la configurazione della firma RSA: l'interazione dell'utente non è consentita. (-25308)

Abbiamo provato diverse soluzioni trovate su SO, ma nessuna ha funzionato.

Alla fine, ho riparato facendo seguente:

  1. Aperto Keychain, andare in Preferenze
  2. Fare clic su 'Ripristina il mio predefinito portachiavi'
  3. Messaggio 'operazione non consentita' o spettacoli simili fino
    • L'errore non ha senso poiché l'utente è amministratore
    • il portachiavi di accesso viene rimosso, ma non ricreato.
  4. Logout e login di nuovo
    • nuovo portachiavi di login appare
    • productsign funziona di nuovo (tramite compilazione automatica)

Si prega di notare il nostro 'Developer ID Installer: ACME, Inc (12345ABCDE) 'il certificato è nel portachiavi del sistema.