Tabla de contenidos
ToggleIntroducció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
sudo
y 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 sudo
usuario y utilizaremos apt-get update
para asegurarnos de tener la lista de paquetes más reciente:
- sudo apt-get update
Luego instalaremos el propio pip:
- 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 .cache
archivos en el directorio de inicio del usuario que lo ejecuta. Usaremos sudo
el -H
indicador para colocar estos archivos en la ubicación correcta:
- 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:
- 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:
- 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:
- 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.
- sudo ufw allow 8010
Luego, agregaremos un usuario y un grupo del sistema dedicados para ejecutar los servicios de Buildbot:
- sudo addgroup --system buildbot
- sudo adduser buildbot --system --ingroup buildbot --shell /bin/bash
Finalmente, iniciaremos sesión como nuestro nuevo usuario para instalar Buildbot:
- sudo --login --user buildbot
Esto nos iniciará sesión como buildbot
usuario y nos ubicará en el /home/buildbot
directorio, donde configuraremos nuestro maestro y trabajador:
Paso 2: Configuración del maestro
Usaremos el comando buildbot create-master
seguido del valor del directorio base:
- 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.sample
dejaremos master.cfg
el original en su lugar como referencia:
- cp ~/master/master.cfg.sample ~/master/master.cfg
Luego, editaremos el archivo para permitirnos acceder a la interfaz web desde una máquina local.
- nano ~/master/master.cfg
Para acceder a la interfaz web desde un escritorio u otro dispositivo, cambiaremos el buildbotURL
de localhost
a 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 buildbotURL
línea y reemplácela localhost
con 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.cfg
predefine 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 buildbotNetUsageData
directiva. Esto define si Buildbot informará las estadísticas de uso a los desarrolladores para ayudar a mejorar la aplicación. Puede configurarlo para None
que 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 buildbotNetUsageData
línea, guarde y salga del archivo.
Verifique la configuración del maestro escribiendo:
- 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 checkconfig
comando indique que se realizó correctamente, inicie el master:
- 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 buildbotURL
configuramos:
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.cfg
archivo 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-worker
al create-worker
comando y pasando cuatro configuraciones:
worker
es el nombre del directorio donde se almacenarán las configuraciones del trabajadorlocalhost
es la dirección donde se ejecuta el master del trabajadorexample-worker
es el nombre del trabajador y debe identificar de forma única al trabajador en el~/master/master.cfg
archivo.pass
es la contraseña del trabajador y esta contraseña debe coincidir con el valor en~master/master.cfg
.
- 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 info
directorio 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.invalid
y reemplácela con su nombre y dirección de correo electrónico.
- nano ~/worker/info/admin
~/trabajador/info/admin
Sammy Shark sammy@digitalocean.com
Cuando haya terminado, guarde y salga del archivo.
El info/host
archivo, 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:
- 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:
- 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/host
Desde 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.cfg
archivo nuevamente:
- 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:
- buildbot checkconfig ~/master
OutputConfig file is good!
Si no se muestran errores, reinicie el servicio maestro:
- 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.