Sarò molto sorpreso se qualcuno ha la risposta a questo. Ho cercato su Google per un lungo periodo di tempo, ma senza fortuna.
Come sviluppatore iOS che a breve accoglierà un nuovo membro del team, voglio configurare un server di integrazione continua in modo che chiunque effettui il check in del codice darà il via a una build, che a sua volta stabilirà lo stato di una build light un'indicazione visiva dello stato del codice. Se la build si rompe non rimarrà così a lungo perché vedremo una grande luce rossa.
Gli ingredienti che ho scelto per fare questo lavoro sono Jenkins , Git e un Mac mini. Giorno dopo giorno non avrò accesso fisico al mini ma costruisci luce è controllato da Ethernet - nessun problema.
Il primo passo per convincere Jenkins a gestire una build è quello di clonare il repository git. Per ovvi motivi, scarta qualsiasi vecchio codice e prende una copia dell'intero repository. Sto usando un git "URL del repository" di [email protected]:repo/ProjectName.git
. Naturalmente ho fatto 'su - jenkins'
e sono diventato utente jenkins, passando quindi attraverso il processo di scp id_rsa.pub [email protected]
. Come gitfella ho aggiunto quella chiave pubblica a authorized_hosts
.
La sorpresa è arrivata quando sono tornato a essere jenkins utente e ho provato ssh [email protected]
- mi è stato chiesto il passphrase per jenkins. In questa fase mi sono reso conto che il clone del repository stava fallendo perché la passphrase non poteva essere inserita mentre Jenkins era in esecuzione senza una shell interattiva.
Il modo per ottenere la passphrase nel portachiavi è ssh-add -K
(e prima di Lion I non ricordo di doverlo fare mai) ma questo non funziona in una shell ssh, fallisce con il messaggio Could not open a connection to your authentication agent.
L'esecuzione di ssh-agent
mostra le variabili di ambiente che devono essere impostate per consentire che ciò accada e, una volta fatto, ssh-add -K
funziona. Quindi il clone git è OK. Poi ho pensato che il problema fosse risolto ma al prossimo login ssh mi è stato chiesto di nuovo la passphrase.
Ora ho la fase di clone git della build funzionante, ma preferirei non dover rimuovere completamente la passphrase per Jenkins ...
Come possono essere impostati i valori di ssh-agent in ogni richiamo di questo processo di generazione di Jenkins? Jenkins viene avviato eseguendo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
- sarebbe possibile impostare l'ambiente ssh-agent
qui in qualche modo? Queste impostazioni permarrebbero fino a quando Jenkins (per avvio)? Sono riluttante a scherzare ora ho questo piccolo problema in gran parte ordinato, ma forse qualche esperto conosce la soluzione giusta.