Una plataforma de autoservicio de entrega continua

  • 523 - palabras
  • Publicado por Ivan Jaimes
  • 5 min

¿Que es Drone?

De acuerdo a su sitio web, Drone es una plataforma de integración continua de autoservicio.

Drone es un sistema de integración y entrega continua basado en tecnología de contenedores. Utiliza un simple archivo de configuración YAML, un superconjunto de docker-compose, para definir y ejecutar tuberías dentro de contenedores Docker.

Tal como se puede ver en el README.md en github, la sintaxis es simple y está hecho en golang 1.11. La primer versión con etiqueta (v0.2.0) fue liberada en marzo del 2014, lo cual nos habla sobre la estabilidad del software.

La característica más destacada de Drone es que utiliza contenedores para todo. Cada etapa en las tuberías (pipelines) más complejas en Drone se realiza a través de un contenedor Docker. Drone CI debe integrarse con un repositorio Git para obtener el código fuente del proyecto a liberar. Tiene una serie de complementos que se pueden implementar como contenedores Docker. Se pueden usar de la misma manera que se usan las herramientas UNIX (ls, cat, tee, etc.).

¿Para qué sirve?

Si se tiene experiencia en el desarrollo es posible que con lo descrito anteriormente se pueda inferir todo lo que se puede hacer y las ventajas que se tienen al usar los contenedores. Las siguientes son algunas consecuencias de usar los contenedores:

Configuración simple

Se evita perder el tiempo configurando servidores para compilar (una vieja práctica que ya no se usa mucho). Se puede elegir la imagen de Docker al gusto y Drone aprovisionará automáticamente el entorno.

Construcciones aisladas

Cada compilación se ejecuta en un contenedor Docker aislado, lo que le brinda control total. Se puede usar alguna configuración particular sin importar que sistema operativo se use. Se puede tomar como base alguna imagen construida previamente y añadir las herramientas necesarias en cada compilación o bien hacer una imagen en docker con todas las herramientas.

Diversidad

Existen infinidad de complementos (plugins) que se pueden usar con drone. No importa que tan complejo sea el proceso de construcción de un proyecto, se puede realizar un flujo que valide el desarrollo realizado.

Ejemplo:

Un ejemplo simple.

kind: pipeline name: default steps: - name: backend image: golang:1.11 commands: - go build - go test -v - name: frontend image: node commands: - npm install - npm run test - npm run lint services: - name: redis image: redis:latest ports: - 6379

Un ejemplo más completo

kind: pipeline name: build steps: - name: backend image: golang:1.11 commands: - go build - go test -v - name: frontend image: node commands: - npm install - npm run test - npm run lint services: - name: redis image: redis:latest ports: - 6379 volumes: - name: foo path: /bar volumes: - name: foo temp: {} --- kind: pipeline name: notify steps: - name: notify image: plugins/slack settings: room: general token: from_secret: token node: disk: ssd depends_on: - build

¿Te gustaría saber más sobre integración continua? Te recomiendo el siguiente libro: