Me sorprendería mucho si alguien tiene la respuesta a esto. He buscado en Google durante mucho tiempo pero sin suerte.
Como desarrollador de iOS que pronto dará la bienvenida a un nuevo miembro del equipo, quiero configurar un servidor de integración continua para que cualquier persona que ingrese el código inicie una compilación, que a su vez establecerá el estado de una luz de compilación proporcionando Una indicación visual del estado del código. Si la compilación se rompe, no se mantendrá así por mucho tiempo porque veremos una gran luz roja.
Los ingredientes que escogí para hacer este trabajo son Jenkins , Git y un Mac mini. Día a día no tendré acceso físico al mini, pero la light < está controlado por Ethernet, no hay problema.
El primer paso para que Jenkins administre una compilación es clonar el repositorio git. Por razones obvias, descarta cualquier código antiguo y toma una copia de todo el repositorio. Estoy usando un git "URL del repositorio" de [email protected]:repo/ProjectName.git
. Naturalmente hice 'su - jenkins'
y me convertí en usuario jenkins, luego pasé por el proceso de scp id_rsa.pub [email protected]
. Como gitfella adjunté esa clave pública a authorized_hosts
.
La sorpresa llegó cuando volví a ser el usuario jenkins y probé ssh [email protected]
. Me pidieron la frase de contraseña para jenkins. En esta etapa, me di cuenta de que el clon del repositorio estaba fallando porque no se podía ingresar la frase de contraseña mientras Jenkins se estaba ejecutando sin un shell interactivo.
La forma de obtener la contraseña en el llavero es ssh-add -K
(y antes de Lion no recuerdo haber tenido que hacer esto nunca), pero esto no funciona en un shell ssh, falla con el mensaje Could not open a connection to your authentication agent.
La ejecución de ssh-agent
muestra las variables de entorno que deben configurarse para permitir que esto suceda, y una vez que se hace ssh-add -K
funciona. Entonces el clon git está bien. Luego pensé que el problema se había resuelto, pero al siguiente inicio de sesión en ssh me piden la frase de contraseña nuevamente.
Ahora tengo la fase de clonación de git de la compilación en funcionamiento, pero preferiría no eliminar la frase de contraseña de Jenkins por completo ...
¿Cómo pueden establecerse los valores de ssh-agent en cada invocación de este proceso de construcción de Jenkins? Jenkins se inicia ejecutando launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
. ¿Sería posible configurar el entorno ssh-agent
aquí de alguna manera? ¿Permanecerían estas configuraciones mientras Jenkins lo haga (por arranque)? Estoy reacio a meterme con esto ahora que tengo este pequeño problema mayormente resuelto, pero tal vez algún experto sepa la solución correcta.