Drone CI

Una plataforma de autoservicio de entrega continua

Tue, 30 Jun 2020

iver.mx

¿Que es Drone?

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
Loading...
Iván Jaimes

Iván Jaimes Padre, esposo y desarrollador de software. Programa en go y elixir (por gusto), js (por necesidad) y shell (por diversión).