2014-09-03 15 views
5

Stiamo usando Jenkins come il nostro server CI per la nostra squadra iOS con la seguente configurazione:Jenkins iOS costruiscono utilizzando le credenziali e sviluppatore profilo

  • server master su OSX, non è in esecuzione qualsiasi lavoro
  • 2 slave su OSX in esecuzione il nostro lavoro di integrazione + UI test

Attualmente tutte la firma di identità e profili di provisioning per le applicazioni vengono caricate ogni slave che rende l'amministrazione un po 'noioso e l'aggiunta di un nuovo nodo al cluster ancora più doloroso.

Per ovviare a questo abbiamo guardato in utilizzando le credenziali plugin con profili di sviluppatori e importare il profilo come il primo passo di compilazione su tutti i lavori di iOS, ma si trovano di fronte a questioni principali:

  • Lo sviluppatori di importazione il profilo sembra funzionare la prima volta (almeno per la creazione delle voci del portachiavi) ma il lavoro non riesce con un errore "nessun profilo di provisioning corrispondente", anche se il profilo sviluppatore contiene tutti i profili di provisioning richiesti dalla destinazione.
  • Seconda manche sulla stessa di lavoro non riescono sempre con un errore "portachiavi già esiste"

Abbiamo provato alcuni arounds di lavoro per il secondo numero l'aggiunta di un passo guscio di accumulo di rimuovere il portachiavi particolare, ma ancora di fronte a il primo errore. Se installiamo manualmente il profilo sullo schiavo, la costruzione passa, ma questo vanifica lo scopo di utilizzare il plugin delle credenziali.

Cosa ne pensate?

risposta

6

Penso che la versione più recente del plug-in delle credenziali rimuova prima tutti i portachiavi esistenti con un nome corrispondente prima dell'importazione, come mostrato nell'output del registro sottostante.

$ security delete-keychain jenkins-MyAppsBuildName-iOS 
$ security create-keychain -p ******** jenkins-MyAppsBuildName-iOS 
$ security unlock-keychain -p ******** jenkins-MyAppsBuildName-iOS 

A causa di questo fatto, non credo che si avrà più un problema con gli errori portachiavi duplicati sul secondo run.

Per quanto riguarda il problema relativo al profilo di provisioning non trovato, aggiungere la riga seguente all'interno del comando execute shell ed eseguire una build su jenkins.

security list-keychains 

Date un'occhiata alla console per quella specifica costruzione e si dovrebbe vedere un elenco di tutti i portachiavi che sono attualmente nel campo di applicazione del guscio.

Se non viene visualizzato "jenkins-MyAppsBuildName-iOS" come portachiavi elencato, questo è il motivo per cui si verifica il problema di firma. Poiché il portachiavi non è elencato, non viene mai nemmeno cercato per trovare la corretta identità/profilo di firma.

Soluzione:Attenzione: E 'hacky

Sono sicuro al 100% perché questo sta accadendo, ma da altri thread sembra essere un problema di autorizzazioni.

Per fortuna c'è un modo semplice per aggirare questo.

Nel comando eseguire la shell aggiungere il seguente:

security list-keychain -s jenkins-${JOB_NAME} 

Questo reimpostare l'elenco portachiavi per includere il portachiavi necessaria per costruire con successo il progetto.

per verificare che questo ora elenca il portachiavi corretta, è possibile aggiungere le seguenti righe al comando shell:

security list-keychain 
security list-keychain -s jenkins-${JOB_NAME} 
security list-keychain 

Ora confrontare l'output del primo comando list-portachiavi con il secondo comando list-portachiavi nella console. Assicurati che il portachiavi di build di jenkin sia elencato dopo il secondo elenco di sicurezza - portachiavi in uscita.

Avviso: Questo modificherà in modo permanente l'elenco portachiavi sul sistema, quindi è probabilmente una buona idea reimpostare il portachiavi al termine della creazione. È possibile eseguire questa operazione impostando i valori predefiniti del portachiavi nella configurazione xcode all'interno della sezione Configurazione del sistema di Jenkin. Dopo aver fatto ciò, assicurati di spuntare la casella di controllo "Ripristina portachiavi OS X dopo il processo di creazione come definito nella configurazione globale" in ambiente di compilazione all'interno della pagina del lavoro di Jenkins.

Ulteriori informazioni: Nel mio esempio ho impostato il portachiavi-list per includere solo il portachiavi generato da Jenkins, ma si può decidere di includere anche il sistema standard e del portachiavi di login modificando la linea, come ad esempio:

security list-keychain -s jenkins-${JOB_NAME} login.keychain System.keychain 

chiave Jenkins, iOS, schiavo, nodo, Xcode, plug-in, le credenziali, .developerprofile

+0

Solo una cosa da aggiungere: se il nome del lavoro ha spazi come il mio ha fatto (che in genere è una cattiva idea) si vuole devi inserire il nome del portachiavi tra virgolette come "lista sicurezza-portachiavi -s" jenkins - $ {JOB_NAME} "' – zbu

Problemi correlati