Me gustaría que Jenkins recupere automáticamente datos de mi repositorio privado alojado en Github. Pero no tengo idea de cómo realizar esa tarea. Probé la documentación, generando ssh-key para el usuario de jenkins y todo lo que puedo ver es: "no se puede clonar el repositorio". He comprobado las URL, son válidas.
¿Alguna pista, tal vez conoces algunos documentos / blogs / lo que sea que describa este tipo de cosas?
Respuestas:
¿Quizás el soporte de GitHub para implementar claves es lo que estás buscando? Para citar esa página:
Si eso es lo que ya está intentando y no funciona, es posible que desee actualizar su pregunta con más detalles de las URL que se utilizan, los nombres y la ubicación de los archivos clave, etc.
Ahora para la parte técnica: ¿Cómo usar su clave SSH con Jenkins?
Si tiene, por ejemplo, un
jenkins
usuario de Unix, puede almacenar su clave de implementación~/.ssh/id_rsa
. Cuando Jenkins intenta clonar el repositorio a través de ssh, intentará usar esa clave.En algunas configuraciones, no puede ejecutar Jenkins como una cuenta de usuario propia, y posiblemente tampoco puede usar la ubicación de clave ssh predeterminada
~/.ssh/id_rsa
. En tales casos, puede crear una clave en una ubicación diferente, por ejemplo~/.ssh/deploy_key
, y configurarlassh
para usarla con una entrada en~/.ssh/config
:Debido a que todo lo que se autentica en todos los repositorios de Github usando
[email protected]
y no desea que la clave anterior se use para todas sus conexiones a Github, creamos un alias de host github-deploy-myproject . Su URL de clonación ahora se convierte eny eso también es lo que pones como URL de repositorio en Jenkins.
(Tenga en cuenta que debe no poner ssh: // delante para que esto funcione.)
fuente
ssh-keygen
como el usuario Jenkins como ("jenkins" en mi servidor Ubuntu). Luego agregué~jenkins/.ssh/id_rsa.pub
a la sección de claves de implementación del repositorio en github.~
directorio. ¡Pero/var/lib/jenkins/.ssh/
si el usuario predeterminado de jenkins usa esas teclas!/var/lib/jenkins
es el directorio de inicio (~
) para eljenkins
usuario.Could not match github-deploy-myproject:myuser/myproject
en el registro de gancho. Ingresé eso como mi URL de repositorio y las compilaciones funcionan para que pueda acceder a GitHub. Es solo la publicación de GitHub que no puede activar la compilación.Una cosa que hizo que esto funcionara para mí es asegurarme de que
github.com
esté dentro~jenkins/.ssh/known_hosts
.fuente
Si necesita que Jenkins acceda a más de 1 proyecto, deberá:
1. agregar clave pública a una cuenta de usuario de github
2. agregar este usuario como Propietario (para acceder a todos los proyectos) o como Colaborador en cada proyecto.
Muchas claves públicas para un usuario del sistema no funcionarán porque GitHub encontrará la primera clave de implementación coincidente y enviará un error como "ERROR: Permiso al usuario / repo2 denegado al usuario / repo1"
http://help.github.com/ssh-issues/
fuente
Jenkins crea un usuario Jenkins en el sistema. La clave ssh debe generarse para el usuario de Jenkins. Aquí están los pasos:
Ahora puede crear una credencial de Jenkins utilizando la clave SSH En el panel de Jenkins Agregar credenciales
selecciona esta opción
fuente
Tuve un problema similar con gitlab. Resulta que restringí a los usuarios que pueden iniciar sesión a través de ssh. Esto no afectará a los usuarios de github, pero en caso de que las personas terminen aquí por problemas de gitlab (y similares), asegúrese de agregar
git
a laAllowUsers
configuración en/etc/ssh/sshd_config
:fuente
Otra opción es usar tokens de acceso personal de GitHub :
https://github.com/my-username/my-project.git
)github-token-for-my-username
Probé esto en Jenkins ver. 2.222.1 y Jenkins GitHub plugin 1.29.5 con un repositorio privado de GitHub.
fuente
Una alternativa a la respuesta de sergey_mo es crear múltiples claves ssh en el servidor jenkins.
(Aunque, como dijo el primer comentarista de la respuesta de sergey_mo, esto puede terminar siendo más doloroso que administrar un solo par de claves).
fuente