karlmdavis.jenkins2
Rol de Ansible para Jenkins 2+
Este rol de Ansible se puede utilizar para instalar y gestionar Jenkins 2.
Requisitos
Este rol requiere Ansible 2.4 o superior, ya sea con canalización de Ansible disponible o setfacl
disponible en el sistema que se está gestionando (según Convertirse en un Usuario No Privilegiado).
El rol actualmente admite Ubuntu 14.04 (Trusty) y Ubuntu 16.04 (Xenial), ¡aunque se agradecen contribuciones para admitir plataformas adicionales!
Variables del Rol
Este rol admite las siguientes variables, listadas aquí con sus valores predeterminados de defaults/main.yml:
jenkins_release_line
:'weekly'
- Cuando se establece en
long_term_support
, el rol instalará las versiones LTS de Jenkins. - Cuando se establece en
weekly
, el rol instalará las versiones semanales de Jenkins.
- Cuando se establece en
jenkins_release_update
:true
- Si es
true
, el paquete de Jenkins (YUM, APT, etc.) se actualizará a la última versión cuando se ejecute este rol.
- Si es
jenkins_home
:/var/lib/jenkins
- El directorio donde se almacenarán (la mayoría de) los datos de Jenkins.
- Debido a las limitaciones del instalador de Jenkins, la cuenta de servicio
jenkins
seguirá utilizando la configuración predeterminada como su directorio de inicio. Esto solo debería influir en las claves SSH.
jenkins_port
:8080
- El puerto en el que se ejecutará Jenkins para solicitudes HTTP.
- En la mayoría de los sistemas, este valor deberá ser mayor a 1024, ya que Jenkins no se ejecuta como
root
.
jenkins_context_path
:''
- La ruta de contexto donde se alojará Jenkins, por ejemplo,
/foo
enhttp://localhost:8080/foo
. Dejar como''
para alojar en la ruta raíz.
- La ruta de contexto donde se alojará Jenkins, por ejemplo,
jenkins_url_external
:''
- La URL externa que los usuarios utilizarán para acceder a Jenkins. Se establece en la configuración de Jenkins y se utiliza en correos electrónicos, webhooks, etc.
- Si se deja vacío/o Ninguno, la configuración no se establecerá y Jenkins intentará descubrir esto automáticamente (lo cual no funcionará correctamente si está detrás de un proxy).
jenkins_admin_username
: (indefinido)- Si se define uno de
jenkins_admin_username
yjenkins_admin_password
, ambos deben ser definidos. - Sobrescribir esta variable para especificar las credenciales del administrador de Jenkins que se utilizarán para cada posible ámbito de seguridad.
- Si se deja indefinido, el rol intentará usar autenticación anónima.
- Nota que el rol detectará automáticamente si Jenkins está configurado para permitir autenticación anónima (como es el caso justo después de la instalación) y lo gestionará correctamente.
- Si se define uno de
jenkins_admin_password
: (indefinido)- Si se define uno de
jenkins_admin_username
yjenkins_admin_password
, ambos deben ser definidos. - Sobrescribir esta variable para especificar las credenciales del administrador de Jenkins que se utilizarán para cada posible ámbito de seguridad.
- Si se define uno de
jenkins_session_timeout
:30
- El número de minutos antes de que las sesiones de Jenkins caduquen, es decir, cuánto tiempo son válidas las inicios de sesión.
- Por defecto, 30 minutos.
- Puede establecerse en
0
para nunca caducar.
jenkins_plugins_extra
:[]
- Sobrescribir esta variable para instalar complementos adicionales de Jenkins.
- Estos se suman a los complementos recomendados por el nuevo asistente de configuración de Jenkins 2, que son instalados automáticamente por este rol (ver
jenkins_plugins_recommended
en defaults/main.yml).
jenkins_plugins_timeout
:60
- El tiempo (en segundos) antes de que la instalación/actualización de un complemento falle. Este valor se pasa al parámetro de tiempo de espera en el módulo
jenkins_plugin
. (Ver aquí para más detalles: http://docs.ansible.com/ansible/latest/jenkins_plugin_module.html#options.)
- El tiempo (en segundos) antes de que la instalación/actualización de un complemento falle. Este valor se pasa al parámetro de tiempo de espera en el módulo
jenkins_plugins_update
:true
- Si es
true
, los complementos de Jenkins se actualizarán cuando se ejecute este rol. (Nota que los complementos faltantes siempre se instalarán).
- Si es
jenkins_java_args_extra
:''
- Opciones adicionales que se agregarán a
JAVA_ARGS
para el proceso de Jenkins, como la configuración de memoria de la JVM, por ejemplo,-Xmx4g
.
- Opciones adicionales que se agregarán a
jenkins_http_proxy_server
,jenkins_http_proxy_port
,jenkins_http_proxy_no_proxy_hosts
: (todos indefinidos)- Estas cumplen la misma función que las propiedades del sistema
http.proxyHost
,http.proxyPort
, yhttp.nonProxyHosts
de la JVM, excepto que las configuraciones se utilizarán tanto para solicitudes HTTP como HTTPS. - Específicamente, estas configuraciones se utilizarán para configurar:
- Las propiedades del sistema de la JVM de Jenkins
http.proxyHost
,http.proxyPort
,https.proxyHost
,https.proxyPort
, yhttp.nonProxyHosts
, como se documenta en Java Networking y Proxies. - La configuración del proxy específica de Jenkins (que requieren algunos complementos, como el complemento de GitHub), como se documenta en JenkinsBehindProxy.
- El valor de
jenkins_http_proxy_no_proxy_hosts
debe ser una lista, por ejemplo,['localhost', 'example.com']
.
- Las propiedades del sistema de la JVM de Jenkins
- Estas cumplen la misma función que las propiedades del sistema
Dependencias
Este rol no tiene dependencias directas de otros roles de Ansible. Sin embargo, requiere que haya un JRE de Java disponible en la ruta del sistema.
Ejemplo de Playbook
Este rol se puede instalar de la siguiente manera:
$ ansible-galaxy install karlmdavis.jenkins2
Este rol se puede aplicar de la siguiente manera:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
jenkins_plugins_extra:
- github-oauth
Ejecutando Scripts Groovy para Configurar Jenkins
Después de instalar Jenkins, se pueden ejecutar scripts Groovy a través de Ansible para personalizar aún más Jenkins.
Por ejemplo, aquí se muestra cómo instalar Jenkins y luego configurarlo para usar su HudsonPrivateSecurityRealm
, para cuentas locales de Jenkins:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# No será necesario en la primera ejecución, pero sí en ejecuciones posteriores (después de
# que se haya habilitado la seguridad, como se indica a continuación).
jenkins_admin_username: prueba
jenkins_admin_password: supersecreto
# Asegurarse de que Jenkins se haya reiniciado, si es necesario.
- meta: flush_handlers
# Configurar la seguridad para usar cuentas locales de Jenkins.
- name: Configurar Seguridad
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: |
// Estas son las importaciones básicas que la consola de scripts interactiva de Jenkin's
// incluye automáticamente.
import jenkins.*;
import jenkins.model.*;
import hudson.*;
import hudson.model.*;
// Configurar el ámbito de seguridad, que maneja la autenticación.
def securityRealm = new hudson.security.HudsonPrivateSecurityRealm(false)
if(!securityRealm.equals(Jenkins.instance.getSecurityRealm())) {
Jenkins.instance.setSecurityRealm(securityRealm)
// Crear un usuario para iniciar sesión. Asegurarse de que el usuario esté atado a la
// clave SSH del usuario local `jenkins`, para garantizar que esta
// cuenta pueda usarse con la CLI de Jenkins.
def testUser = securityRealm.createAccount("prueba", "supersecreto")
testUser.addProperty(new hudson.tasks.Mailer.UserProperty("[email protected]"));
testUser.save()
Jenkins.instance.save()
println "Cambio en la autenticación."
}
// Configurar la estrategia de autorización, que especifica quién puede hacer
// qué.
def authorizationStrategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
if(!authorizationStrategy.equals(Jenkins.instance.getAuthorizationStrategy())) {
authorizationStrategy.setAllowAnonymousRead(false)
Jenkins.instance.setAuthorizationStrategy(authorizationStrategy)
Jenkins.instance.save()
println "Cambio en la autorización."
}
register: shell_jenkins_security
changed_when: "(shell_jenkins_security | success) and 'Changed' not in shell_jenkins_security.stdout"
Alternativamente, los scripts Groovy se pueden almacenar como archivos separados y se pueden importar utilizando un lookup(...)
, como a continuación:
- hosts: some_box
tasks:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# No será necesario en la primera ejecución, pero sí en ejecuciones posteriores (después de
# que se haya habilitado la seguridad, como se indica a continuación).
jenkins_admin_username: prueba
jenkins_admin_password: supersecreto
# Asegurarse de que Jenkins se haya reiniciado, si es necesario.
- meta: flush_handlers
# Configurar la seguridad para usar cuentas locales de Jenkins.
- name: Configurar Seguridad
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: "{{ lookup('template', 'templates/jenkins_security.groovy.j2') }}"
Licencia
Este proyecto está en el dominio público mundial LICENCIA.md. Como se indica en CONTRIBUCIÓN:
Este proyecto se encuentra en el dominio público dentro de los Estados Unidos, y los derechos de autor y derechos relacionados en la obra en todo el mundo han sido renunciados a través de la dedicación al dominio público universal CC0 1.0.
Todas las contribuciones a este proyecto se publicarán bajo la dedicación CC0. Al enviar una solicitud de extracción, aceptas cumplir con esta renuncia de interés de copyright.
Información sobre el Autor
Este complemento fue creado por Karl M. Davis (https://justdavis.com/karl/).
ansible-galaxy install karlmdavis.jenkins2