Ejecución de un servidor Jenkins en Azure

Azure Active Directory
Blob Storage
Key Vault
Monitor
Virtual Machines

En este escenario se explica la arquitectura y las consideraciones que se deben tener en cuenta al instalar y configurar Jenkins.

Servidor Jenkins que se ejecuta en Azure

Descargue un archivo de Visio que contiene este diagrama de arquitectura.

Esta arquitectura admite la recuperación ante desastres con los servicios de Azure, pero no cubre escenarios de escalabilidad horizontal más avanzados que impliquen varios servidores principales o alta disponibilidad (HA) sin tiempo de inactividad. Para información general sobre los distintos componentes de Azure, incluido un tutorial paso a paso sobre cómo compilar una canalización de CI/CD en Azure, consulte Jenkins en Azure.

El enfoque de este documento se centra en las operaciones centrales de Azure necesarias para admitir Jenkins, como el uso de Azure Storage para mantener artefactos de compilación, los elementos de seguridad necesarios para el inicio de sesión único, otros servicios que se pueden integrar y la escalabilidad para la canalización. La arquitectura está diseñada para que funcione con un repositorio de control de código fuente existente. Por ejemplo, un escenario común consiste en iniciar trabajos de Jenkins basados en confirmaciones de GitHub.

Architecture

La arquitectura consta de los siguientes componentes:

  • Grupo de recursos. Un grupo de recursos se utiliza para agrupar recursos de Azure, para que puedan administrarse según la duración, el propietario y otros criterios. Los grupos de recursos permiten implementar y supervisar los recursos como un grupo, y realizar un seguimiento de los costos de facturación por grupo de recursos. También se pueden eliminar recursos en conjunto, lo que resulta útil cuando se realizan implementaciones de prueba.

  • Servidor Jenkins. Una máquina virtual se implementa para ejecutar Jenkins como servidor de automatización y que sirva como servidor principal de Jenkins. En la sección Instalación y configuración de Jenkins, verá cómo instalar Jenkins en una nueva máquina virtual.

    Nota

    Nginx se instala en la máquina virtual para actuar como un proxy inverso en Jenkins. Puede configurar Nginx para habilitar SSL para el servidor Jenkins.

  • Red virtual. Una red virtual conecta recursos de Azure entre sí y proporciona aislamiento lógico. En esta arquitectura, el servidor Jenkins se ejecuta en una red virtual.

  • Subredes. El servidor Jenkins está aislado en una subred para facilitar la administración y segregación del tráfico de la red sin afectar al rendimiento.

  • Grupos de seguridad de red. Use los grupos de seguridad de red para restringir el tráfico de red de Internet a la subred de una red virtual.

  • Discos administrados. Un disco administrado es un disco duro virtual (VHD) persistente utilizado para el almacenamiento de aplicaciones y también para mantener el estado del servidor Jenkins y proporcionar recuperación ante desastres. Los discos de datos se almacenan en Azure Storage. Para un alto rendimiento, se recomienda Premium Storage.

  • Azure Blob Storage. Consulte Tutorial: Uso de Azure Storage para artefactos de compilación para obtener información sobre cómo usar Azure Blob Storage para almacenar los artefactos de compilación que se crean y se comparten con otras compilaciones de Jenkins.

  • Azure Active Directory (Azure AD). Azure AD admite la autenticación de usuarios, lo que le permite configurar el inicio de sesión único. Las entidades de servicio de Azure AD definen la directiva y los permisos de cada autorización de rol en el flujo de trabajo mediante el control de acceso basado en roles de Azure (RBAC de Azure). Cada entidad de servicio está asociada a un trabajo Jenkins.

  • Azure Key Vault. Para administrar los secretos y las claves criptográficas utilizadas para aprovisionar recursos de Azure cuando se requieren secretos, esta arquitectura utiliza Azure Key Vault.

  • Servicios de supervisión de Azure. Este servicio supervisa la máquina virtual de Azure que hospeda Jenkins. Esta implementación supervisa el estado de la máquina virtual y el uso de CPU, y envía las alertas.

Recomendaciones

Las siguientes recomendaciones sirven para la mayoría de los escenarios. Sígalas a menos que tenga un requisito concreto que las invalide.

Consideraciones sobre escalabilidad

Jenkins se puede escalar dinámicamente para admitir las cargas de trabajo según sea necesario. En el caso de compilaciones elásticas, no ejecute las compilaciones en el servidor principal de Jenkins. En su lugar, descargue las tareas de compilación en los agentes de Jenkins, que se pueden reducir y escalar horizontalmente según sea necesario. Tenga en cuenta dos opciones para escalar agentes:

Las máquinas virtuales generalmente son más costosas de escalar que los contenedores. Sin embargo, para utilizar contenedores para el escalado, el proceso de compilación debe ejecutarse con contenedores.

Además, utilice Azure Storage para compartir artefactos de compilación que puedan utilizarse en la siguiente etapa de la canalización por otros agentes de compilación.

Escalado del servidor Jenkins

Al crear una máquina virtual e instalar Jenkins, puede especificar el tamaño de la máquina virtual. La selección del tamaño correcto del servidor de máquina virtual depende del tamaño de la carga de trabajo esperada. La comunidad de Jenkins mantiene una guía de selección para ayudar a identificar la configuración que mejor se adapte a sus requisitos. Azure ofrece muchos tamaños de máquinas virtuales Linux para cumplir cualquier requisito. Para más información sobre cómo escalar el servidor principal de Jenkins, consulte la comunidad de Jenkins para conocer los procedimientos recomendados, que también incluyen detalles sobre cómo escalar Jenkins.

Consideraciones sobre disponibilidad

Disponibilidad en el contexto de un servidor Jenkins significa poder recuperar cualquier información de estado asociada al flujo de trabajo como, por ejemplo, los resultados de las pruebas, las bibliotecas que haya creado u otros artefactos. El estado de flujo de trabajo o los artefactos más importantes se deben conservar para recuperar el flujo de trabajo en caso de error en el servidor Jenkins. Para evaluar los requisitos de disponibilidad, tenga en cuenta dos métricas comunes:

  • Objetivo de tiempo de recuperación (RTO) especifica cuánto tiempo se puede estar sin Jenkins.

  • Objetivo de punto de recuperación (RPO) indica la cantidad de datos que puede permitirse perder si una interrupción del servicio afecta a Jenkins.

En la práctica, las métricas RTO y el RPO implican redundancia y copia de seguridad. La disponibilidad no es una cuestión de recuperación de hardware, que forma parte de Azure, sino más bien de garantizar que se mantiene el estado del servidor de Jenkins. Microsoft ofrece un Acuerdo de Nivel de Servicio (SLA) para instancias únicas de máquina virtual. Si este SLA no cumple sus requisitos de tiempo de actividad, asegúrese de que dispone de un plan de recuperación ante desastres o considere el uso de una implementación de servidor Jenkins con varios servidores principales (no se tratan en este documento).

Considere el uso de los scripts de recuperación ante desastres del paso 7 de la implementación para crear una cuenta de Azure Storage con discos administrados para almacenar el estado del servidor Jenkins. Si Jenkins deja de funcionar, se puede restaurar al estado almacenado en esta cuenta de almacenamiento independiente.

Consideraciones sobre la seguridad

Utilice los métodos siguientes para poder bloquear la seguridad en un servidor Jenkins básico, ya que en su estado básico no es seguro.

  • Configure una forma segura para iniciar sesión en el servidor Jenkins. Esta arquitectura usa HTTP y tiene una dirección IP pública. No obstante, HTTP no es seguro de forma predeterminada. Considere la posibilidad de configurar HTTPS en el servidor Nginx que se utiliza para un inicio de sesión seguro.

    Nota

    Al agregar SSL al servidor, cree una regla de grupo de seguridad de red para que la subred de Jenkins abra el puerto 443. Para obtener más información, vea Apertura de puertos en una máquina virtual con Azure Portal.

  • Asegúrese de que la configuración de Jenkins evita cross la falsificación de solicitud de entre sitios (Manage Jenkins > Configure Global Security) [Administrar Jenkins > Configurar seguridad global]. Esta opción es el valor predeterminado del servidor de Microsoft Jenkins.

  • Configure el acceso de solo lectura al panel de Jenkins mediante del complemento Matrix Authorization Strategy.

  • Utilice RBAC de Azure para restringir el acceso de la entidad de servicio al mínimo requerido para ejecutar los trabajos. Este nivel de seguridad ayuda a limitar el alcance de los daños causados por un trabajo no autorizado.

Los trabajos de Jenkins a menudo requieren secretos para acceder a los servicios de Azure que requieren autorización, como Azure Container Service. Use Key Vault para administrar estos secretos de forma segura. Use Key Vault para almacenar las credenciales de la entidad de servicio, las contraseñas, los tokens y otros secretos.

Para obtener una visión central del estado de la seguridad de los recursos de Azure, utilice Azure Security Center. Security Center supervisa los posibles problemas de seguridad y proporciona una imagen completa del estado de seguridad de su implementación. El Centro de seguridad se configura por cada suscripción de Azure. Habilite la recopilación de datos de seguridad como se describe en la Guía de inicio rápido de Azure Security Center. Una vez que habilite la recolección, Security Center busca automáticamente las máquinas virtuales creadas en esa suscripción.

El servidor Jenkins tiene su propio sistema de administración de usuarios, y la comunidad Jenkins proporciona procedimientos recomendados para proteger las instancias de Jenkins en Azure.

Consideraciones sobre la manejabilidad

Utilice los grupos de recursos para organizar los recursos de Azure que se implementan. Implemente entornos de producción y entornos de desarrollo o prueba en grupos de recursos independientes, de modo que pueda supervisar los recursos de cada entorno y acumular los costos de facturación por grupo de recursos. También se pueden eliminar recursos en conjunto, lo que resulta útil cuando se realizan implementaciones de prueba.

Azure proporciona varias características para la supervisión y el diagnóstico de la infraestructura global. Para supervisar el uso de CPU, esta arquitectura implementa Azure Monitor. Por ejemplo, puede utilizar Azure Monitor para supervisar el uso de la CPU y enviar una notificación si dicho uso supera el 80 %. (Un uso elevado de CPU indica que es posible que quiera escalar verticalmente la máquina virtual del servidor Jenkins). También puede notificar a un usuario designado si se produce un error en la máquina virtual o deja de estar disponible.

Comunidades

Las siguientes comunidades en línea pueden responder preguntas y ayudarle a configurar una implementación correcta:

Instalar y configurar Jenkins

Para crear una máquina virtual e instalar Jenkins, siga las instrucciones del artículo Inicio rápido: Configuración de Jenkins mediante la CLI de Azure

Pasos siguientes