Cómo instalar Buildbot en Ubuntu 16.04

hace 2 semanas

Introducción

Buildbot es un sistema de integración continua basado en Python para automatizar los procesos de compilación, prueba y lanzamiento de software. Utiliza la biblioteca Twisted de Python para gestionar la comunicación asincrónica entre un buildmaster y uno o más trabajadores para facilitar la prueba de compilaciones en múltiples plataformas. Buildbot es altamente configurable y hace pocas suposiciones sobre cómo debería funcionar el proceso de compilación, lo que lo hace adecuado para procesos de compilación complejos o proyectos que requieren que sus herramientas crezcan con las necesidades únicas del proyecto.

En este tutorial, instalaremos y configuraremos un buildmaster y un worker de Buildbot en la misma máquina.

Prerrequisitos

Para seguir este tutorial, necesitarás:

  • Un servidor Ubuntu 16.04 con al menos 1 GB de RAM , configurado con un usuario no root sudoy un firewall como se describe en la guía de configuración inicial del servidor Ubuntu 16.04.

Cuando el servidor esté configurado, estará listo para seguir.

Paso 1: Instalación de Buildbot

El proyecto Buildbot recomienda utilizar el índice de paquetes de Python, pip, para instalar Buildbot a fin de obtener la versión más reciente, que suele ser varias versiones anterior a la que está disponible en los paquetes de Ubuntu.

Comenzaremos como nuestro sudousuario y utilizaremos apt-get updatepara asegurarnos de tener la lista de paquetes más reciente:

  1. sudo apt-get update

Luego instalaremos el propio pip:

  1. sudo apt-get install python-pip

Una vez que pip esté disponible, lo usaremos para instalar el paquete Buildbot, que incluye el master y el worker, así como otras dependencias, incluidas las requeridas por la interfaz web. Pip crea .cachearchivos en el directorio de inicio del usuario que lo ejecuta. Usaremos sudoel -Hindicador para colocar estos archivos en la ubicación correcta:

  1. sudo -H pip install 'buildbot[bundle]'

Dependiendo de la velocidad de su servidor, esto puede tardar un poco en completarse. El resultado final de una instalación exitosa debería ser similar al siguiente:

Output. . . Successfully installed Automat-0.6.0 Jinja2-2.10 MarkupSafe-1.0 PyJWT-1.6.0 Tempita-0.5.2 Twisted-17.9.0 attrs-17.4.0 autobahn-18.3.1 buildbot-1.0.0 buildbot-console-view-1.0.0 buildbot-grid-view-1.0.0 buildbot-waterfall-view-1.0.0 buildbot-worker-1.0.0 buildbot-www-1.0.0 constantly-15.1.0 decorator-4.2.1 future-0.16.0 hyperlink-18.0.0 idna-2.6 incremental-17.5.0 pbr-3.1.1 python-dateutil-2.6.1 six-1.11.0 sqlalchemy-1.2.5 sqlalchemy-migrate-0.11.0 sqlparse-0.2.4 txaio-2.9.0 zope.interface-4.4.3

También puede mostrar una recomendación para actualizar el propio pip:

Output. . .You are using pip version 8.1.1, however version 9.0.1 is available.You should consider upgrading via the 'pip install --upgrade pip' command.

Si bien esto no afectará nuestra instalación de Buildbot, nos tomaremos un momento para actualizar a la última versión de pip:

  1. sudo -H pip install --upgrade pip
OutputCollecting pip Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)   100% |████████████████████████████████| 1.3MB 768kB/sInstalling collected packages: pip Found existing installation: pip 8.1.1   Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usrSuccessfully installed pip-9.0.1

Por último, verificaremos la instalación de Buildbot comprobando la versión:

  1. buildbot --version
OutputBuildbot version: 1.0.0Twisted version: 17.9.0

En el requisito previo del tutorial, configuramos un firewall UFW para permitir únicamente el tráfico SSH. Verificaremos el estado:

  1. sudo ufw status
OutputStatus: activeTo                         Action      From--                         ------      ----OpenSSH                    ALLOW       AnywhereOpenSSH (v6)               ALLOW       Anywhere (v6)

Buildbot usa el puerto 8010 para la interfaz web, lo cual no está permitido, así que lo abriremos ahora.

  1. sudo ufw allow 8010

Luego, agregaremos un usuario y un grupo del sistema dedicados para ejecutar los servicios de Buildbot:

  1. sudo addgroup --system buildbot
  2. sudo adduser buildbot --system --ingroup buildbot --shell /bin/bash

Finalmente, iniciaremos sesión como nuestro nuevo usuario para instalar Buildbot:

  1. sudo --login --user buildbot

Esto nos iniciará sesión como buildbotusuario y nos ubicará en el /home/buildbotdirectorio, donde configuraremos nuestro maestro y trabajador:

Paso 2: Configuración del maestro

Usaremos el comando buildbot create-masterseguido del valor del directorio base:

  1. buildbot create-master ~/master
Outputmkdir /home/buildbot/mastercreating /home/buildbot/master/master.cfg.samplecreating database (sqlite:///state.sqlite)buildmaster configured in /home/buildbot/master

A continuación copiaremos y master.cfg.sampledejaremos master.cfgel original en su lugar como referencia:

  1. cp ~/master/master.cfg.sample ~/master/master.cfg

Luego, editaremos el archivo para permitirnos acceder a la interfaz web desde una máquina local.

  1. nano ~/master/master.cfg

Para acceder a la interfaz web desde un escritorio u otro dispositivo, cambiaremos el buildbotURLde localhosta la dirección IP o el nombre de dominio del servidor. También configuraremos la política de informes de uso. Otros valores de configuración importantes se configuran en master.cfg, pero por ahora mantendremos el resto de los valores predeterminados.

Cerca de la parte inferior del archivo, ubique la buildbotURLlínea y reemplácela localhostcon la dirección IP o el nombre de dominio de su sitio:

~/maestro/maestro.cfg

c['buildbotURL'] = "http://IP_or_site_domain:8010/"

Nota: También master.cfgpredefine un trabajador en la sección “Trabajadores”.

~/maestro/maestro.cfg

. . .####### WORKERS# The 'workers' list defines the set of recognized workers. Each element is# a Worker object, specifying a unique worker name and password.  The same# worker name and password must be configured on the worker.c['workers'] = [worker.Worker("example-worker", "pass")]. . .

Más adelante en el tutorial, crearemos un trabajador con estas credenciales.

A continuación, en la parte inferior del archivo, establezca el valor de la buildbotNetUsageDatadirectiva. Esto define si Buildbot informará las estadísticas de uso a los desarrolladores para ayudar a mejorar la aplicación. Puede configurarlo para Noneque no lo haga. Si no le importa enviar información básica sobre su uso, utilice la cadena "basic"en su lugar. Puede encontrar más información sobre esta configuración en la documentación de configuración global de Buildbot:

~/maestro/maestro.cfg

c['buildbotNetUsageData'] = None# To send back basic information, use this instead:#c['buildbotNetUsageData'] = 'basic'

Cuando haya modificado 'buildbotURL'y agregado la buildbotNetUsageDatalínea, guarde y salga del archivo.

Verifique la configuración del maestro escribiendo:

  1. buildbot checkconfig ~/master

Recibirá un resultado que termina con el siguiente mensaje si la sintaxis es correcta:

Output. . . Config file is good!

Si el resultado indica que hubo errores de sintaxis, vuelva atrás y verifique el archivo nuevamente. Una vez que el checkconfigcomando indique que se realizó correctamente, inicie el master:

  1. buildbot start ~/master

Cuando el reinicio sea exitoso, debería recibir la siguiente confirmación:

OutputFollowing twistd.log until startup finished..The buildmaster appears to have (re)started correctly.

Finalmente, visitemos el sitio en un navegador web en el puerto 8010 que buildbotURLconfiguramos:

http://IP_or_site_domain:8010/

Ahora que tenemos el maestro ejecutándose y hemos verificado que podemos acceder a la interfaz web, crearemos el trabajador de ejemplo.

Paso 3: Configuración de un trabajador

La relación entre un maestro y un trabajador se establece cuando el nombre y la contraseña de un trabajador en el master.cfgarchivo coinciden con el nombre y la contraseña de un trabajador configurado para usar el maestro.

En este paso, crearemos y configuraremos un trabajador llamando buildbot-workeral create-workercomando y pasando cuatro configuraciones:

  • workeres el nombre del directorio donde se almacenarán las configuraciones del trabajador
  • localhostes la dirección donde se ejecuta el master del trabajador
  • example-workeres el nombre del trabajador y debe identificar de forma única al trabajador en el ~/master/master.cfgarchivo.
  • passes la contraseña del trabajador y esta contraseña debe coincidir con el valor en ~master/master.cfg.
  1. buildbot-worker create-worker ~/worker localhost example-worker pass
Outputmkdir /home/buildbot/workermkdir /home/buildbot/worker/infoCreating info/admin, you need to edit it appropriately.Creating info/host, you need to edit it appropriately.Not creating info/access_uri - add it if you wishPlease edit the files in /home/buildbot/worker/info appropriately.worker configured in /home/buildbot/worker

Cuando el trabajador se conecta por primera vez, enviará archivos del infodirectorio al buildmaster donde se ejecuta. Se mostrarán en la interfaz web para brindarles a los desarrolladores más información sobre las fallas de las pruebas.

Ahora vamos a configurarlos. Primero, abra el archivo que contiene el correo electrónico del administrador, elimine la línea de ejemplo Your Name Here admin@youraddress.invalidy reemplácela con su nombre y dirección de correo electrónico.

  1. nano ~/worker/info/admin

~/trabajador/info/admin

Sammy Shark sammy@digitalocean.com

Cuando haya terminado, guarde y salga del archivo.

El info/hostarchivo, por convención, proporciona el sistema operativo, la versión, el tamaño de la memoria, la velocidad de la CPU, las versiones de las bibliotecas relevantes instaladas y, finalmente, la versión de Buildbot que se ejecuta en el trabajador.

Abra el archivo y pegue la información relevante, actualizando el contenido de muestra según sea necesario para su sistema:

  1. nano ~/worker/info/host

Actualice la información que utiliza para reflejar las características específicas de su sistema:

~/trabajador/información/host

Ubuntu 16.04.2 2GB Droplet - Buildbot version: 1.0.0 - Twisted version: 17.1.0

Cuando hayas terminado, guarda y sal. Por último, inicia el trabajador:

  1. buildbot-worker start ~/worker
OutputFollowing twistd.log until startup finished..The buildbot-worker appears to have (re)started correctly.

Ahora que tanto el maestro como el trabajador están configurados y en ejecución, ejecutaremos una compilación de prueba.

Paso 4: Ejecutar una compilación de prueba

Para ejecutar una compilación de prueba, abriremos el menú “Compilaciones” en la interfaz web y luego seleccionaremos “Trabajadores”. Se mostrarán el trabajador de ejemplo y la información que configuramos info/admin. info/hostDesde aquí, podemos hacer clic en el compilador predeterminado, “runtests”, para forzar una compilación.

La pantalla de “pruebas de ejecución” tendrá poca información hasta que se realice la primera solicitud de compilación. Ahora forzaremos una haciendo clic en el botón “forzar” en la parte superior derecha de la pantalla:

Aparecerá un cuadro de diálogo que le permitirá ingresar información sobre la compilación forzada.

Para esta compilación de prueba, dejaremos los campos en blanco y haremos clic en el botón «Iniciar compilación» en la ventana emergente. Ten en cuenta que si ingresas un valor en el campo «Tu nombre», debe contener una dirección de correo electrónico válida.

En unos segundos, la compilación debería completarse correctamente:

Puede explorar los detalles de cada paso de la compilación haciendo clic en el número o la flecha junto a su nombre:

Es posible que hayas notado que no se nos pidió que iniciara sesión para ejecutar esta compilación. De manera predeterminada, cualquiera puede acceder a las funciones administrativas, por lo que antes de terminar, nos tomaremos un momento para bloquear eso y crear una cuenta de usuario. Puedes obtener más información sobre las opciones disponibles en la [Documentación de autorización de Buildbot] (http://docs.buildbot.net/current/developer/authz.html).

Abra el master.cfgarchivo nuevamente:

  1. nano ~/master/master.cfg

Al final del archivo, agregue las siguientes líneas, cambiando el nombre de usuario y la contraseña.

Archivo: ~/master/master.cfg

. . .c['www']['authz'] = util.Authz(       allowRules = [           util.AnyEndpointMatcher(role="admins")       ],       roleMatchers = [           util.RolesFromUsername(roles=['admins'], usernames=['Sammy'])       ])c['www']['auth'] = util.UserPasswordAuth({'Sammy': 'Password'})

Cuando haya terminado, ejecute otra comprobación de sintaxis en el archivo:

  1. buildbot checkconfig ~/master
OutputConfig file is good!

Si no se muestran errores, reinicie el servicio maestro:

  1. buildbot restart ~/master

Cuando recargamos la interfaz web, debería aparecer un enlace en la parte superior derecha que dice Anónimo y el acceso a las funciones administrativas ya no está disponible.

Probaremos las credenciales que acabamos de agregar haciendo clic en “Anónimo”, lo que hará que aparezca un cuadro de inicio de sesión donde podemos ingresar el nombre de usuario y la contraseña que configuramos. Cuando iniciemos sesión, deberíamos ver que, si bien “Anónimo” ya no tiene acceso para iniciar una compilación, nuestro usuario “Sammy” sí lo tiene.

En este punto, nuestra instalación de Buildbot está completa y hemos tomado una medida mínima para proteger la interfaz. Sin embargo, el nombre de usuario y la contraseña se transmiten en texto sin formato. Recomendamos, como siguiente paso y antes de utilizar Buildbot en serio, que protejas la interfaz web con un proxy inverso.

Conclusión

En este tutorial, instalamos y configuramos el Buildbot maestro y un Buildbot trabajador local en la misma máquina. Si estás evaluando Buildbot, es posible que quieras realizar el recorrido rápido del proyecto.

De lo contrario, continúe con el siguiente tutorial, Cómo crear archivos de unidad Systemd para Buildbot, para permitir que el sistema de inicio del servidor administre los procesos de Buildbot.

Reúnete conmigo
Te invito a una reunión sin compromiso para explorar juntos las oportunidades de crecimiento de tu negocio. Aprovecha esta oportunidad para conocerme y descubrir cómo mi experiencia y habilidades pueden marcar la diferencia en tu éxito empresarial. ¡No pierdas la ocasión de darle a tu empresa el impulso que merece!
× ¿Cómo puedo ayudarte?