Plateforme Git et CICD auto-hébergée avec Gitea et Drone sur Docker

Plateforme Git et CICD auto-hébergée avec Gitea et Drone sur Docker 2

Tous les deux gitea et drone est construit sur Golang fonctionne sur plusieurs plates-formes, y compris une framboise pi et son super léger. Oh oui, et sa impressionnant!

Dans ce didacticiel, nous verrons comment implémenter nos propres services git et plate-forme cicd en configurant gitea et drone sur docker et en validant une application de flacon en python pour gitea et la construction d’un pipeline sur drone.

Une définition

Gitea: sera votre serveur git auto-hébergé

Drone Server: le serveur sera responsable du service Web, des référentiels, des secrets, des utilisateurs, etc.

Drone Agent: ce seront les travailleurs qui gèreront vos constructions, emplois, etc.

Configuration du serveur

Nous allons changer le port ssh de notre hôte en autre chose, car la méthode ssh de notre serveur git écoute sur le port 22 et nous aimerions ajouter notre clé ssh à gitea afin que nous puissions nous engager sur notre serveur git via ssh.

Changez le port ssh de votre serveur en 2222 en ouvrant /etc/ssh/sshd_config et éditez le port pour 2222 puis redémarrez sshd avec:

$ /etc/init.d/sshd restart

Votre connexion SSH sera toujours établie, mais vous pouvez quitter et SSH sur votre serveur en spécifiant le nouveau port:

$ ssh -p 2222 (email protected)

Pré-requis

Assurez-vous que docker et docker-compose sont installés

Déployer Gitea et Drone

Vous trouverez ci-dessous le fichier docker-compose de notre déploiement. Notez que nous utilisons une base de données postgres sur laquelle gitea sera configuré. Vous pouvez également utiliser d’autres bases de données telles que mysql, sqlite, etc. Visitez leur documentation pour plus d’informations.

version: "2"

services:
  gitea-app:
    image: gitea/gitea:latest
    container_name: gitea-app
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - ROOT_URL=http://gitea:3000
      - SSH_DOMAIN=mydomain.com
    restart: always
    volumes:
      - ./volumes/gitea_app:/data
    ports:
      - "3000:3000"
      - "22:22"
    networks:
      - appnet

  gitea-db:
    image: postgres:alpine
    container_name: gitea-db
    ports:
      - 5440:5432
    restart: always
    volumes:
      - ./volumes/gitea_db:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=gitea
    networks:
      - appnet

  drone-server:
    image: drone/drone:0.8
    container_name: drone-server
    ports:
      - 80:8000
      - 9000
    volumes:
      - ./volumes/drone:/var/lib/drone/
    restart: always
    depends_on:
      - gitea
    environment:
      - DRONE_OPEN=true
      - DRONE_HOST=http://drone-server:8000
      - DRONE_GITEA=true
      - DRONE_GITEA_URL=http://gitea:3000
      - DRONE_SECRET=secret
      - DRONE_NETWORK=appnet
    networks:
      - appnet

  drone-agent:
    image: drone/agent:0.8
    container_name: drone-agent
    command: agent
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=secret
    networks:
      - appnet

volumes:
  gitea-app:
  gitea-db:

networks:
  appnet:
    external: true

Créez le chemin des volumes:

$ mkdir volumes

Créez le réseau externe:

$ docker network create appnet

Une configuration de clé,

Notre SSH_DOMAIN sera le domaine utilisé pour des opérations telles que le clonage d'un référentiel. Lorsque vous enregistrez votre compte gitea, vous utiliserez les mêmes informations d'identification pour vous connecter à drone.

Déployez votre pile:

$ docker-compose up -d

Inscrivez-vous sur Gitea

Lorsque votre déploiement est terminé, accédez à votre serveur gitea qui devrait être disponible sur http://your-docker-ip:3000/ complétez l'enregistrement, si vous décidez d'aller avec postgres votre nom d'utilisateur / mot de passe sera postgres et votre hôte sera gitea-db:5432.

Assurez-vous de compléter le compte administrateur pour obtenir vos informations d'identification d'administrateur.

Configuration de la clé SSH et du dépôt

Générez une clé ssh que vous utiliserez pour communiquer avec git over ssh. Si vous avez déjà une clé ssh, vous pouvez ignorer cette étape.

$ ssh-keygen -t rsa
# use the defaults

Connectez-vous sur gitea, une fois connecté, accédez au profil / paramètres / clés ssh: http://your-docker-ip:3000/user/settings/keys.

Ajoutez une nouvelle clé ssh, retournez à votre terminal et copiez la clé publique que nous fournirons à gitea:

$ cat ~/.ssh/id_rsa.pub

Collez votre clé publique et fournissez un titre descriptif.

Retournez à votre tableau de bord et créez votre premier référentiel:

image

Cela devrait ressembler plus ou moins à ceci:

image

Activer le repo sur le drone

Rendez-vous sur drone et sélectionnez les dépôts sur le côté droit http: //: 80 / account / repos et activez votre référentiel en basculant le sélecteur, il devrait ressembler plus ou moins à ceci:

image

Une fois ses capacités activées, retournez à gite.

Cloner le référentiel

Sur votre référentiel, sélectionnez ssh et copiez le lien ssh pour votre référentiel:

image

Ensuite, depuis votre terminal, ajoutez votre clé ssh privée à votre agent ssh et clonez le référentiel:

$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa
$ git clone (email protected):your-user/your-repo.git

Ajouter un exemple d'application Python Flask à git

Je vais utiliser une application de base flacon Python avec certains tests.

Ajoutons d'abord notre définition de pipeline pour drone, afin que le drone comprenne comment le pipeline doit être exécuté lorsque gitea reçoit un commit:

$ touch .drone.yml

Notre pipeline:

pipeline:
  build:
    image: python:3.5.1-alpine
    commands:
      - pip install --upgrade pip setuptools wheel
      - pip wheel -r requirements.txt --wheel-dir=wheeldir --find-links=wheeldir
      - pip install --no-index --find-links=wheeldir -r requirements.txt
      - flake8 app
      - mkdir -p coverage
      - nosetests -v tests/

Ajoutons cela à git:

$ git add .drone.yml
$ git commit -m "initial add of our pipeline"
$ git push origin master

Notre fichier drone devrait être dans git, à présent notre fichier de dépendance des exigences pour python:

flask
nose
flake8

Notre fichier vierge pour faire de notre application un module:

$ mkdir app
$ touch app/__init__.py

Et notre application de flacon:

from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello():
    return "Hello, World!"

Notre répertoire de tests et notre fichier d'initialisation python:

$ mkdir tests
$ touch tests/__init__.py

Maintenant que tous nos fichiers sont prêts, validez et envoyez à git:

$ git add .
$ git commit -m "add python app"
$ git push origin master

Regarde Drone Courir

Dirigez-vous vers le drone et regardez les builds, vous devriez voir votre build courir à http://:80//:

image

Si tout s'est déroulé comme prévu, vous devriez voir qu'il a été adopté.

Créer des badges d'état

Vous pouvez également inclure les badges d'état de construction de drone qui ressembleront à ceci:

image

Vous pouvez utiliser l’API de drone: http://drone-ip:80/api/badges///status.svg

(!(Build Status)(http://your-ip/api/badges/your-user/your-repo/status.svg)
(!()(https://images.microbadger.com/badges/image/gitea/gitea.svg))(https://microbadger.com/images/gitea/gitea "Get your own image badge on microbadger.com")
(!(GitHub release)(https://img.shields.io/github/release/go-gitea/gitea.svg))(https://github.com/go-gitea/gitea/releases/latest)
(!(Help Contribute to Open Source)(https://www.codetriage.com/go-gitea/gitea/badges/users.svg))(https://www.codetriage.com/go-gitea/gitea)
(!(Become a backer/sponsor of gitea)(https://opencollective.com/gitea/tiers/backer/badge.svg?label=backer&color=brightgreen))(https://opencollective.com/gitea)

Globalement, Gitea et drone sont vraiment impressionnants et très impressionnés, en particulier par leur faible empreinte mémoire et leur facilité de travail.

Ressources

Jetez un coup d'oeil à ceci pour plus de ressources:

Docs:

Exemples:

Nous serions ravis de connaître votre avis

      Laisser un commentaire