plugin - jenkins github
Autenticar Jenkins CI para el repositorio privado de Github (6)
Me gustaría que Jenkins obtenga automágicamente datos de mi repositorio privado alojado en Github. Pero no tengo idea de cómo llevar a cabo 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". Revisé las URL, son válidas
¿Alguna pista, tal vez conoces algunos documentos / blogs / lo que está describiendo este tipo de cosas?
¿Quizás el soporte de GitHub para implementar claves es lo que estás buscando? Para citar esa página:
¿Cuándo debería usar una tecla de implementación?
Simple, cuando tienes un servidor que necesita acceso de extracción a un único repositorio privado. Esta clave se adjunta directamente al repositorio en lugar de a una cuenta de usuario personal.
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 tu clave SSH con Jenkins?
Si tiene, por ejemplo, un usuario de jenkins
Unix, puede almacenar su clave de implementación en ~/.ssh/id_rsa
. Cuando Jenkins intente 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 pueda usar la ubicación predeterminada de la tecla ssh ~/.ssh/id_rsa
. En tales casos, puede crear una clave en una ubicación diferente, por ejemplo ~/.ssh/deploy_key
, y configurar ssh
para usarlo con una entrada en ~/.ssh/config
:
Host github-deploy-myproject
HostName github.com
User git
IdentityFile ~/.ssh/deploy_key
IdentitiesOnly yes
Debido a que todos se autentican 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 clon URL ahora se convierte en
git clone github-deploy-myproject:myuser/myproject
y eso es también lo que pones como URL del repositorio en Jenkins.
(Tenga en cuenta que no debe poner ssh: // al frente para que esto funcione).
Jenkins crea un usuario Jenkins en el sistema. La clave ssh debe generarse para el usuario de Jenkins. Estos son los pasos:
sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen
Ahora puede crear una credencial de Jenkins con la tecla SSH En el panel de Jenkins Agregar credenciales
selecciona esta opción
Clave privada: del maestro de Jenkins ~ / .ssh
Si necesita que Jenkins tenga acceso a más de un proyecto, deberá:
1. agregar una clave pública a una cuenta de usuario de github
2. agregue 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"
Tuve un problema similar con gitlab. Resultó que había restringido 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 la gente termine aquí por problemas con gitlab (y similares), asegúrese de agregar git
a la configuración de AllowUsers
en /etc/ssh/sshd_config
:
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
Una alternativa a la respuesta de sergey_mo es crear varias 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).
Una cosa que hizo que esto funcionara para mí es asegurarme de que github.com
esté en ~jenkins/.ssh/known_hosts
.