karlmdavis.jenkins2

Estado de Construcción

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.
  • 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.
  • 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 en http://localhost:8080/foo. Dejar como '' para alojar en la ruta raíz.
  • 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 y jenkins_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.
  • jenkins_admin_password: (indefinido)
    • Si se define uno de jenkins_admin_username y jenkins_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.
  • 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
  • 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).
  • 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.
  • 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, y http.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, y http.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'].

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/).

Acerca del proyecto

This Ansible role can be used to install and manage Jenkins 2.

Instalar
ansible-galaxy install karlmdavis.jenkins2
Licencia
other
Descargas
888
Propietario