Primeros pasos con Drone CI, la solución open source

Si estás construyendo un proyecto personal o una startup y no quieres gastar demasiado en soluciones comerciales populares como Travis CI (que cuesta 69 $/mes), puedes montar tu propio Drone CI self-hosted en tu portátil, en la capa gratuita de AWS o en cualquier otro servidor.
Características de Drone CI:
- Soporte multiplataforma
- Configuración basada en YAML
- Soporte para varios pipelines y lógica compleja en los pasos de build
- Basado en Docker
- Gratuito
- Soporte para GitHub, GitLab y Bitbucket
Vamos a ejecutar Drone CI en un único host y con GitHub, pero también podrías usar una configuración con varias máquinas o Kubernetes, y otros proveedores de control de versiones. Encontrarás más información en la documentación oficial.
Consigue un host
Para esta prueba usamos una instancia EC2 de la capa gratuita de AWS, pero puedes usar lo que quieras. Si quieres seguir el mismo enfoque, sigue estos pasos:
- Entra en la web de AWS;
- Añade tu clave pública SSH en la sección Key Pairs de la página de EC2 (para acceder a tu instancia por SSH);
- Crea una nueva instancia Ubuntu 18.04 de la capa gratuita en AWS;
- Abre los puertos 80 y 443 en el Security Group de tu instancia; si la cuenta es nueva, usa launch-wizard-1, o búscalo en la descripción de tu instancia EC2.
Instala Docker
Para empezar a usar Drone solo necesitas Docker. Sigue las instrucciones de su documentación oficial. Comprueba que todo se ha instalado bien ejecutando "docker -v".
root@ip-172-31-23-205:~# docker -vDocker version 18.09.3, build 774a1f4
Crea una aplicación OAuth
En los ejemplos usamos GitHub, pero también puedes usar GitLab, Bitbucket, Gitea y Gogs. Tienes más información en la documentación de Drone.
- Entra en github.com/settings/developers e inicia sesión en tu cuenta personal, si ya tienes una, o créate una si no.
- Haz clic en "new oAuth app".
- Rellena el formulario como en el ejemplo de abajo.
Para rellenar bien este formulario, puedes usar la IP de tu servidor o asignarle un dominio. Hecho esto, podrás usar el Client ID y el Client Secret en los siguientes pasos.
Instala Drone
Es muy sencillo, basta con esto:
docker pull drone/drone:1
Y a continuación:
--volume=/var/run/docker.sock:/var/run/docker.sock \ --volume=/var/lib/drone:/data \ --env=DRONE_GITHUB_SERVER=https://github.com \ --env=DRONE_GITHUB_CLIENT_ID=652d1he1a62b6336bf0 \ --env=DRONE_GITHUB_CLIENT_SECRET=c8990176a4bfywe55ekj8c3cf6d0ffccb8e3a213e \ --env=DRONE_RUNNER_CAPACITY=2 \ --env=DRONE_SERVER_HOST=drone1.example.com \ --env=DRONE_SERVER_PROTO=https \ --env=DRONE_TLS_AUTOCERT=true \ --env=DRONE_USER_FILTER=tu-usuario \ --env=DRONE_USER_CREATE=username:tu-usuario,admin:true \ --publish=80:80 \ --publish=443:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:1
Con esta configuración, Drone genera certificados SSL con Let's Encrypt, lo que nos permite acceder a la interfaz de Drone por https. Tu cuenta de usuario tendrá privilegios de administrador (DRONE_USER_CREATE), y conviene bloquear el acceso al servidor a cualquier otra persona (DRONE_USER_FILTER). En la documentación de Drone encontrarás la explicación del resto de variables.
Tu instancia ya debería estar en marcha: ¡inicia sesión y empieza a usarla!
Define tu pipeline
Con tu instancia de Drone CI lista, es el momento de activar el repositorio y crear tu pipeline. Primero, busca el repositorio en la barra de búsqueda y actívalo.
En la página de ajustes puedes cambiar la visibilidad del proyecto, añadir secrets (información sensible que necesitan los pasos de build) o añadir un cron job.
Definir pasos de build y pipelines en Drone es muy sencillo. Solo tienes que añadir a tu repositorio un archivo .drone.yml y describir los pasos con sintaxis YAML. Aquí tienes un ejemplo sencillo:
kind: pipelinename: defaultsteps:- name: frontend image: node commands: - npm ci - npm run test:unit
Ahora, cada vez que hagas push al repositorio, se lanzará un nuevo build en Drone CI.
Pero puedes hacer mucho más, según la complejidad de tu proyecto. Estos son algunos usos típicos:
- Enviar notificaciones a Slack
- Desplegar en Kubernetes
- Subir imágenes a un registro de Docker
- Levantar bases de datos u otros servicios necesarios para los tests
- Ejecutar varios pipelines y trabajar con varias plataformas
Drone es un aliado del día a día que mejora mucho la estabilidad, la flexibilidad y la comodidad a la hora de ejecutar tests y desplegar código. Para saber más sobre Drone CI, visita drone.io/.