Cómo instalar Jenkins en CentOS y conectarlo a GitHub
Jenkins es una herramienta CI/CD de código abierto muy utilizada. En este artículo, aprenderemos a instalar Jenkins y a configurarlo con Github para enviar archivos al servidor mediante SSH.
Instalación de Jenkins:
Jenkins es una aplicación basada en JAVA, por lo que, en primer lugar, necesitamos instalar JAVA. El siguiente comando instalará JAVA en centos 7.
sudo yum install java-1.8.0-openjdk-devel
Verifica la versión de Java
[root@centos ~]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
Ahora configura el repositorio de Jenkins utilizando los siguientes comandos.
curl --silent --location http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo | sudo tee /etc/yum.repos.d/jenkins.repo
Esto mostrará las siguientes salidas.
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=1
A continuación, ejecuta el siguiente comando para añadir la clave de Jenkins.
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
Ahora hemos configurado el Repositorio de Jenkins y estamos listos para instalar Jenkins utilizando los siguientes comandos simples.
sudo yum install jenkins
Una vez completada la instalación comprueba el servicio Jenkins y habilítalo al reiniciar el sistema.
sudo systemctl start Jenkins
sudo systemctl enable jenkins
Ahora reinicia el sistema y asegúrate de que el servicio jenkins se está ejecutando utilizando el siguiente comando.
sudo systemctl enable jenkins
Ahora permite a Jenkins en el firewall.
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
Configura los ajustes:
No podemos utilizar Jenkins directamente, tenemos que escribir el nombre de dominio o la dirección IP en el navegador web seguido del número de puerto predeterminado de Jenkins, 8080.
En la captura de pantalla anterior, tenemos que escribir la contraseña autogenerada por Jenkins una vez. Ejecuta el siguiente comando para obtener la contraseña.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Esto dará una salida como 2179c452db3b45f98cf9e4c4961ab635
Después de la contraseña, tenemos que instalar plugins en el sistema Jenkins. Para ello, simplemente selecciona el plugin sugerido para instalar todos los plugins por defecto.
Rellena todos los detalles y haz clic en guardar y continuar.
Ahora nos pedirá la Configuración de la Instancia, donde también podemos cambiar el número de puerto por defecto.
Ahora nuestro Jenkins está guardado y listo para su uso.
Enhorabuena, la nueva configuración de Jenkins se ha completado con éxito y está lista para ser utilizada.
La siguiente captura de pantalla muestra el panel de control por defecto para Jenkins.
Configuración de Jenkins:
Instalar Plugins:
Antes de pasar a los siguientes pasos asegúrate de instalar los siguientes plugins.
Ve a Gestionar Jenkins -> Gestionar plugin -> Disponible -> filtro -> busca el siguiente plugin que es necesario para la integración con GitHub.
Publicar a través de SSH
Git
Plugin de GitHub
Plugin de cliente Git
Aquí, el plugin Publish Over SSH es necesario para enviar nuestros archivos al servidor a través de SSH.
Añadir credenciales:
Tenemos que añadir las credenciales del servidor en Jenkins.
Ve al panel de control de Jenkins→ credenciales → sistema → credenciales globales (sin restricciones) → añadir credenciales
Podemos seleccionar el tipo de credenciales quequeremos instalar. Aquí añadimos el nombre de usuario y la contraseña de las credenciales de GitHub para su uso posterior.
ssh en el servidor de Jenkins.
Jenkins puede conectarse a un servidor remoto utilizando ssh y puede ejecutar un script, un comando o copiar un archivo de un servidor a otro.
Para ello, necesitamos crear una conexión ssh entre el servidor Jenkins y el servidor remoto.
El siguiente paso es añadir las credenciales SSH en Jenkins que queremos conectar con el servidor de Jenkins.
Queremos conectarnos a un servidor web desde Jenkins con el usuario root, Por ejemplo, nuestro servidor web es el 138.197.151.144 y el usuario root, por lo que tenemos que iniciar sesión en ese servidor usando ssh.
ssh [email protected]
Ahora ve al directorio de inicio y cd a la carpeta .ssh.
cd ~/.ssh
El siguiente paso será generar una clave privada y una clave pública para el usuario root en nuestro servidor web.
ssh-keygen -t rsa -f private_key_for_jenkins
Después de ejecutar el comando anterior nos pedirá «Introducir la frase de contraseña», no necesitamos introducir la frase de contraseña. Así que haz clic en «Introducir» dos veces y se generarán dos claves en el servidor web private_key_for_jenkins y private_key_for_jenkins.pub.
Aquí private_key_for_jenkins es la clave privada de 138.197.151.144 y tenemos que utilizar el contenido de este archivo en nuestro servidor Jenkins.
Tenemos el segundo archivo llamado private_key_for_jenkins.pub que es la clave pública del servidor web. Tenemos que copiar sus datos en otro archivo llamado authorised_keys situado en el mismo directorio.
En la mayoría de los casos, los archivos authorised_keys están presentes en la carpeta ~/.ssh/, pero a veces faltan y tenemos que generar nuevos archivos authorised_keys. Simplemente ejecuta el siguiente comando para copiarlo en authorised_keys, este comando también genera nuevas authorised_keys si están disponibles.
cat private_key_for_jenkins.pub > authorized_keys
Ahora entra en el servidor Jenkins y ve a Gestionar Jenkins -> Configurar sistemas
Otra alternativa es escribir directamentehttp://ip_address:8080/configure en el navegador web, esto abrirá Configurar Sistemas para las configuraciones ssh.
Ahora, busca la sección Servidores SSH en «Configurar Jenkins». Ten en cuenta que esta sección sólo está disponible si tenemos instalado el «Plugin de credenciales SSH» en el servidor de Jenkins.
Ve a la sección Publicar sobre SSH ve a la clave y pega el contenido de private_key_for_jenkins
Ahora, en la opción Servidores SSH, haz clic en el botón Añadir e introduce los detalles del servidor SSH. Podemos cambiar el puerto ssh y otros ajustes desde la opción Avanzada.
Después de hacer los cambios, haz clic en «Probar la configuración» y deberíamos obtener un mensaje de éxito como el que se muestra en la captura de pantalla anterior si todos los ajustes son correctos.
Ten en cuenta que podemos añadir varios servidores según nuestras necesidades para publicar el mismo código en varios servidores utilizando ssh.
Para ello, tenemos que generar la clave privada para cada servidor como mencionamos anteriormente y tenemos que añadir su clave privada al servidor Jenkins.
Por último, haz clic en el botón «Guardar» y guarda nuestros cambios. Hemos creado con éxito una conexión ssh a un servidor remoto. Ahora podemos enviar el archivo al servidor remoto y también podemos ejecutar cualquier comando o script en ese servidor.
Configuración de Jenkins con Github
Para la automatización de las construcciones desencadenadas por la solicitud PUSH y PULL, es necesario añadir un WebHook de Jenkins a cada repositorio de GitHub o webhooks de la organización.
Pasos para configurar el webhook desde el repositorio de Github.
1. Accede a tus cuentas de GitHub
2. Haz clic en el repositorio en el que necesitamos configurar el webhook
3. Ve a la opción de configuración de ese repositorio
4. Haz clic en Webhooks y añade la URL de la carga útil, tiene el siguiente aspecto http://jenkins_ip:8080/github-webhook/
5. Selecciona «application/json» como tipo de codificación en Tipo de contenido
6. Deja «Secreto» en blanco (a menos que se haya creado y configurado un secreto en la sección «Configurar el sistema -> plugin de GitHub» de Jenkins)
7. Selecciona «Déjame seleccionar eventos individuales»
8. Activa los eventos PUSH y Pull Request
9. Asegúrate de que está marcada la opción «Activo».
10. Por último, haz clic en el botón «Añadir Webhook».
Comprueba la siguiente captura de pantalla para ver los detalles.
Jenkins recibirá ahora notificaciones push y pull request para ese repositorio y las construcciones relacionadas se activarán automáticamente.
Crear el primer trabajo en Jenkins
Ahora ve a nuestro panel de control de Jenkins y selecciona Nuevo elemento, luego introduce un nombre de elemento y selecciona Proyecto de estilo libre.
Después de hacer clic en Aceptar serás redirigido a la sección de configuración.
Ahora estamos en la pestaña general como se muestra en la siguiente captura de pantalla. En la pestaña general, da la descripción del proyecto y haz clic en Proyecto Github, aquí introduce nuestra URL de GitHub para el proyecto.
Ahora ve a la gestión del código fuente, luego haz clic en Git e introduce la URL de nuestro repositorio de donde queremos tomar los códigos.
Ya añadimos la credencial de GitHub, haz clic en el menú desplegable y selecciona el nombre de usuario y la contraseña de GitHub.
A continuación, ve a Ramas para construir y selecciona la rama */master, podemos añadir cualquier rama según los requisitos de nuestro proyecto.
Ahora ve a la pestaña de Activación de la Construcción y selecciona la opción de activación del gancho de Github para el sondeo de GITScm, esto hará que se construya automáticamente
cada vez que hagamos algún cambio en el repositorio de GitHub.
Ahora ve a Entorno de compilación y selecciona Enviar archivos o ejecutar comandos por SSH después de que se ejecute la compilación.
Esto enviará los archivos al servidor remoto después de que se ejecute la compilación.
Ve a Editores SSH –> Servidor SSH –> selecciona el nombre del servidor en el menú desplegable
Aquí también podemos establecer los parámetros avanzados, pero por el momento, vamos con la configuración básica.
Ahora tenemos que añadir qué tipo de archivos queremos copiar a través de ssh, aquí seleccionamos todas las carpetas y archivos de nuestro repositorio de GitHub. Para añadir la selección de archivos y carpetas sólo hay que añadir **/* en los archivos de origen.
De forma similar podemos dar cualquier comando en el cuadro de texto Ejecutar comando, que se ejecutará en nuestro servidor remoto.
A continuación, especifica el directorio remoto en el que necesitamos copiar nuestros archivos. Esta es una opción opcional.
Editores SSH –> Transferencias –> Conjunto de transferencias –> Archivos de origen –> añadir **/*
Editores SSH –> Transferencias –> Conjunto de transferencias –> Directorio remoto –> /jenkins-test
Editores SSH –> Transferencias –> Conjunto de transferencias –> Comando de ejecución –> Comando
Por defecto, Jenkins excluirá ciertos archivos como .git .svn .gitignore, etc. Aquí queremos copiar todos los archivos al servidor remoto. Para ello, haz clic en el botón Avanzado justo debajo de Ejecutar comando y marca la opción «No excluir por defecto».
Eso es todo, tenemos muchas opciones en Acciones Post-Construcción que podemos utilizar según las necesidades de nuestro proyecto.
Prueba de construcción
Es hora de probar nuestra configuración.
Ve al panel de control de Jenkins y luego haz clic en nuestro proyecto Jenkins-test.
A continuación, haz clic en la opción Construir ahora para la construcción, si el proceso de construcción falló se mostrará el número de la versión de construcción con un icono amarillo.
Vamos a verificar nuestro proceso de construcción, simplemente haz clic en el número de construcción como se muestra en la captura de pantalla.
Ahora haz clic en la salida de la consola. Aquí podemos ver todos los procesos en modo detallado.
Por último, veremos la línea«Finished: SUCCESS» al final de la salida de la consola.
Enhorabuena! nuestro Jenkins se ha integrado con éxito en GitHub y está listo para ser utilizado.