Je serai très surpris si quelqu'un a la réponse à cela. J'ai cherché sur Google pendant longtemps mais sans succès.
En tant que développeur iOS qui accueillera bientôt un nouveau membre de l'équipe, je veux mettre en place un serveur d'intégration continue afin que toute personne qui valide du code lance une construction, qui déclenchera à son tour l'allumage d'un voyant de construction fournissant une indication visuelle de l'état du code. Si la construction échoue, cela ne restera pas ainsi longtemps car nous verrons une grosse lumière rouge.
Les ingrédients que j'ai choisis pour faire fonctionner cela sont Jenkins, Git et un Mac mini. Au quotidien, je n'aurai pas accès physique au mini mais le voyant de construction est contrôlé par Ethernet - aucun problème.
La première étape pour que Jenkins gère une construction est de cloner le dépôt git. Pour des raisons évidentes, il supprime tout code ancien et récupère une copie de l'ensemble du dépôt. J'utilise une "URL de dépôt" git de gitfella@boardroom.local:repo/ProjectName.git
. Naturellement, j'ai fait 'su - jenkins'
et suis devenu utilisateur jenkins, puis ai suivi le processus de scp id_rsa.pub gitfella@boardroom.local
. En tant que gitfella, j'ai ajouté cette clé publique à authorized_hosts
.
La surprise est venue lorsque je suis revenu à l'utilisateur jenkins et ai essayé ssh gitfella@boardroom.local
- on m'a demandé le mot de passe de jenkins. À ce stade, j'ai réalisé que le clonage du dépôt échouait car le mot de passe ne pouvait pas être saisi pendant que Jenkins fonctionnait sans un shell interactif.
La manière de mettre le mot de passe dans le trousseau est ssh-add -K
(et avant Lion je ne me souviens pas avoir jamais eu à le faire) mais cela ne fonctionne pas dans un shell ssh, cela échoue avec le message Could not open a connection to your authentication agent.
Exécuter ssh-agent
affiche les variables d'environnement qui doivent être définies pour permettre que cela se produise, et une fois que c'est fait ssh-add -K
fonctionne. Ensuite, le clone git fonctionne. Ensuite, j'ai pensé que le problème était résolu mais lors de la prochaine connexion ssh, on me demande à nouveau le mot de passe.
J'ai maintenant la phase de clonage git de la construction qui fonctionne mais je préférerais ne pas avoir à supprimer entièrement le mot de passe pour Jenkins...
Comment les valeurs de ssh-agent peuvent-elles être définies à chaque invocation de ce processus de construction Jenkins? Jenkins est démarré en exécutant launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
- serait-il possible de définir l'environnement de ssh-agent
ici d'une manière ou d'une autre? Ces réglages persisteraient-ils aussi longtemps que Jenkins le fera (à chaque démarrage)? J'hésite à toucher à cela maintenant que j'ai ce petit problème presque résolu, mais peut-être qu'un expert connaît la bonne solution.