# Jenkins

Jenkins es un servidor de automatización open source escrito en Java. Está basado en el proyecto Hudson y es, dependiendo de la visión, un fork del proyecto o simplemente un cambio de nombre.
Jenkins ayuda en la automatización de parte del proceso de desarrollo de software mediante integración continua y facilita ciertos aspectos de la entrega continua. Admite herramientas de control de versiones como CVS, Subversion, Git, Mercurial, Perforce y Clearcase y puede ejecutar proyectos basados en Apache Ant y Apache Maven, así como secuencias de comandos de consola y programas por lotes de Windows. El desarrollador principal es Kohsuke Kawaguchi. Publicado bajo licencia MIT, Jenkins es software libre.

## Historia

Jenkins fue originalmente desarrollado con el nombre Hudson. El desarrollo de Hudson empezó en el verano de 2004 en Sun Microsystems. Su primera versión fue publicada en febrero de 2005.
En noviembre de 2010 surgieron varios temas respecto a la administración y gestión del proyecto por parte de Oracle. Uno de los puntos claves fue la propiedad de la marca Hudson. Después Oracle reclamó el derecho al nombre y marca registrada Hudson en diciembre de 2010. Como resultado, el 11 de enero de 2011, se hizo una votación entre los miembros de la comunidad para cambiar el nombre del proyecto de “Hudson” a “Jenkins”. La propuesta fue aprobada por la comunidad el 29 de enero de 2011.
El 1 de febrero de 2011, Oracle dijo que continuarían con el desarrollo de Hudson y consideraron a Jenkins un fork en lugar de un cambio de nombre.
Jenkins y Hudson continúan como proyectos independientes y considerando al otro proyecto como fork.
El 7 de julio de 2016 se hizo pública la primera versión 2.x con soporte LTS.

## Plugins

Jenkins dispone de la funcionalidad de extenderse mediante plugins. Existen multitud de plugins que permiten cambiar el comportamiento de Jenkins o añadir nueva funcionalidad.

### Los más usados (mayo de 2017)
#### Mailer - 148.416 instalaciones

Permite configurar las notificaciones de correo electrónico con los resultados de los builds. Para ello se debe configurar el servidor de correo. Si se ha configurado, Jenkins enviará un correo electrónico a los destinatarios especificados cuando se produce un cierto acontecimiento importante:
* Todo build fallido.
* Un build exitoso después de uno fallido.
* Un build inestable después de uno exitoso.
* A menos que se configure, cada build inestable provoca un nuevo mail.

#### Credentials - 147.809 instalaciones

Este plugin le permite almacenar credenciales en Jenkins. Proporciona una API estándar para otros plugins para almacenar y recuperar diferentes tipos de credenciales.
Características visibles de usuario son:
* Una pantalla de "Administrar credenciales" en la pantalla "Administrar Jenkins" que le permite administrar el sistema y las credenciales globales.
* Si está utilizando la seguridad Jenkins, cuando se va a "Usuarios" / su nombre de usuario / "Configuración", verá la opción para administrar las credenciales personales.
* En cualquier lugar donde se necesitan esas credenciales, hay una lista desplegable de las credenciales apropiadas disponibles para seleccionar.
* Cuando llegue el momento de cambiar la contraseña, sólo la cambia una vez.

#### external-monitor-job - 142.113 instalaciones

Añade la posibilidad de controlar el resultado de los trabajos realizados externamente.

#### ssh-slaves - 136.672 instalaciones

Este plugin le permite administrar los esclavos que se ejecutan en máquinas *nix a través de SSH. Añade un nuevo tipo de método de lanzamiento de esclavos. Este método de lanzamiento:
* Abre una conexión SSH al host especificado como el nombre de usuario especificado.
* Comprueba la versión por defecto de Java para ese usuario.
* [No se ha implementado todavía] Si la versión por defecto no es compatible con slave.jar de Jenkins, trata de encontrar una versión de Java que lo sea.
* Una vez que se cuenta con una versión adecuada de Java, copia la última slave.jar a través de SFTP.
* Inicia el proceso de esclavo.

#### Javadoc - 130.975 instalaciones

Este plugin añade soporte Javadoc a Jenkins. Esta funcionalidad solía ser una parte del núcleo, pero a partir de Jenkins 1.431, se separó en diferentes plugins.
Este plugin permite la selección de la opción "Publicar a Javadoc" como una acción Post-build, especificando el directorio de donde debe ser extraído el Javadoc y si se espera una retención para cada build exitoso.

### Explicaciones de una línea

Jenkins puede ser utilizado para poner en la agenda y monitorizar la ejecución de una script de shell por una interfaz de usuario, en vez de una terminal de comandos.

## Seguridad

La seguridad en Jenkins depende de 2 factores: control de acceso y protección de amenazas externas. El control de acceso puede ser personalizado por 2 medios: autenticación y autorización de usuario. Protección de amenazas externas tales como ataques de CSRF y builds maliciosos, también son soportados.

## Premios y reconocimientos

* InfoWorld Bossie Award (Premio al mejor Software de Código Libre) en 2011.
* Recibió el Geek Choice Award en 2014.