Files
NexusV7/raws/blog/2021-01-15_drone.md
2021-03-29 16:59:17 +02:00

4.9 KiB

title, tags, date, yearonly, url
title tags date yearonly url
Setup Gitea / Drone / Docker gitea drone cicd docker 2021-01-15 false 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.

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 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.