--- title: Setup Gitea / Drone / Docker description: gitea drone cicd docker date: 2021-01-15 yearonly: false url: giteadronedocker.html --- Je suis un grand fan du selfhosted. J'essais d'avoir un maximum de services directement dans mon chez moi. Le but n'est pas de s'isoler d'internet mais de reprendre le contrôle sur ce qui peut l'être. # Gitea, Drone, Docker & You Le plan est simple: avoir tout le pipeline d'intégration en local. Exit les coûts du ci/cd et de l'hébergement. ## Docker Tout repose sur Docker pour simplifier un maximum la gestion / installation de l'ensemble de nos composants. Les commandes sont pour un système basé sur Debian, tout se base sur la [documentation officielle de Docker](https://docs.docker.com/engine/install/debian/). On commence par ajouter le repo de Docker avec ses dépendances: apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" On install Docker lui même: apt-get update apt-get install docker-ce docker-ce-cli containerd.io systemctl enable docker Puis Docker-compose: curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose Enfin, on créé un registre docker local qui nous servira de cible pour drone. Dans un fichier docker-compose.yml: --- version: "2" networks: gitea: external: false services: registry: image: registry:2 container_name: registry environment: - REGISTRY_HTTP_RELATIVEURLS=true volumes: - /docker_data/registry:/var/lib/registry ports: - 5000:5000 restart: unless-stopped ## Gitea C'est ici que le fun commence. On ajoute dans notre docker-compose sous services: services: ... gitea: image: gitea/gitea:latest container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - /docker_data/gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - 3000:3000 - 222:22 restart: unless-stopped Sous volumes, /docker_data/gitea, est une préférence personnel pour ranger les fichiers de config des conteneurs Docker. On lance le tout avec 'docker-compose up -d', et on va sur 'serveurIP:3000' pour configurer Gitea. ## Drone Même combat qu'avec Gitea, on ajoute Drone et un runner de base a notre docker-compose: services: ... drone: image: drone/drone container_name: drone depends_on: - gitea volumes: - /docker_data/drone:/var/lib/drone/ environment: - DRONE_GITEA_SERVER=git.monsite - DRONE_GITEA_CLIENT_ID=... - DRONE_GITEA_CLIENT_SECRET=... - DRONE_RPC_SECRET=... - DRONE_SERVER_HOST=... - DRONE_SERVER_PROTO=http ports: - 8383:80 - 8484:443 restart: unless-stopped drone-runner-docker: image: drone/drone-runner-docker container_name: drone-runner-docker depends_on: - drone volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_RPC_PROTO=http - DRONE_RPC_HOST=... - DRONE_RPC_SECRET=... - DRONE_RUNNER_CAPACITY=2 - DRONE_RUNNER_NAME=DefaultDockerRunner ports: - 8585:3000 restart: unless-stopped La on a plus de choses a configurer avant de lancer. Depuis Gitea, ajoutez une application et récupéré toutes les clé nécessaire a Drone. Avoir la [documentation de Drone](https://docs.drone.io/server/provider/gitea/#install-runners) avec soit ne fait pas de mal. ## Utilisation du tout Sur votre projet git favorit, par exemple superProjet, ajoutez un '.drone.yml': kind: pipeline type: docker name: default steps: - name: build image: plugins/docker settings: registry: dockerreg.monsite repo: dockerreg.monsite/superProjet - name: deploy image: appleboy/drone-ssh settings: host: from_secret: deploy_host username: from_secret: deploy_user password: from_secret: deploy_password port: 22 script: - docker-compose pull superProjet - docker-compose up -d superProjet Depuis l'interface de Drone, on active le repo de superProjet et on ajoute les secrets nécessaire. Et maintenant on profite et abuse de notre super pipeline qui nous fait gagner du temps.