¿Qué es y para que se usa la integración continua?
Es una práctica de ingeniería de software que consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes. Entendemos por integración la compilación y ejecución de pruebas de todo un proyecto.
Gitea + Drone + SonarQube
Se utiliza el software libre de Gitea para almacenar los repositorios de código y que conectaremos a Drone para realizar la IC
Drone permite ejecutar las pipelines que tiene configuradas el repositorio, cuenta con mucha variedad de plugins dando posibilidad de despliegues o comunicaciones
SonarQube provee de métricas y analiza la calidad y seguridad del código
Con este stack podremos montar un ciclo de IC que cubre las necesidades básicas, también destaca los pocos recursos que necesita esta configuración pudiendo desplegarse en máquinas pequeñas como una Raspberry
Docker
Usamos Docker para desplegar las aplicaciones en distintos contenedores
docker-compose.ymlversion: '2' services: gitea: image: gitea/gitea restart: always container_name: gitea hostname: gitea volumes: - ./data:/data expose: - 3000 depends_on: - db networks: mynet: db: image: mariadb:10 container_name: gitea-db hostname: gitea-db restart: always environment: - MYSQL_ROOT_PASSWORD=secretdb - MYSQL_DATABASE=gitea - MYSQL_USER=gitea - MYSQL_PASSWORD=secretpass volumes: - ./db/:/var/lib/mysql networks: mynet: drone: image: drone/drone restart: always container_name: drone hostname: drone environment: - DRONE_GITEA_SERVER=https://gitea.domain.com - DRONE_GITEA_CLIENT_ID=secretid - DRONE_GITEA_CLIENT_SECRET=secret - DRONE_RPC_SECRET=secret-rpc - DRONE_SERVER_HOST=drone.domain.com - DRONE_SERVER_PROTO=https volumes: - ./drone:/data expose: - 80 networks: mynet: runner: image: drone/drone-runner-docker restart: always container_name: runner hostname: runner environment: - DRONE_RPC_PROTO=http - DRONE_RPC_HOST=drone - DRONE_RPC_SECRET=secret-rpc - DRONE_RUNNER_CAPACITY=2 - DRONE_RUNNER_NAME=runner volumes: - /var/run/docker.sock:/var/run/docker.sock expose: - 3000 networks: mynet: sonarqube: image: sonarqube container_name: sonarqube hostname: sonarqube expose: - 9000 volumes: - ./sonar/conf:/opt/sonarqube/conf - ./sonar/data:/opt/sonarqube/data - ./sonar/logs:/opt/sonarqube/logs - ./sonar/extensions:/opt/sonarqube/extensions networks: mynet: networks: mynet:
Solo hay que crear la app en Gitea para conectarla a Drone y generar las claves de la configuración del runner de Drone. También habría que generar la token del plugin de sonar para cada proyecto de Drone que configuremos
Con esta receta de docker-compose se puede poner un proxy que ataque los distintos contenedores bajo el mismo dominio.com
Eso es todo, nos vemos en la próxima