[Docker] buildbot

mardi 6 novembre 2018

BuildBot container installation

Il faut savoir que je n’ai pas trouver d’images buildbot valable pour notre projet.

Le buildbot officiel créé pour docker utilise deux paramètres d’environnements qui exige d’informer une url accessible pour télécharger un fichier tar.gz comportant la configuration du buildbot nécessaire à son bon fonctionnement.
Le second paramètre est le nom d’un dossier qui contiendra cette configuration sur le serveur.

Pour ma part, je n’aime pas trop mettre ce fichier de configuration à disposition sur un serveur ou même sur github comme est proposé par cette solution.
En effet, github permet de créer automatiquement un tar.gz du fichier…

Du coup dans mon cas, j’ai du créer une image local ou ces deux paramètres ne sont pas utiliser.

Pour cela,

1. On créé un fichier docker-compose avec les paramètres nécessaire au fonctionnement de ce container officiel.

buildbot:
    image: buildbot/buildbot-master:master
    env_file:
      - db.env
    environment:
      - BUILDBOT_CONFIG_DIR=config
      - BUILDBOT_CONFIG_URL=https://github.com/buildbot/buildbot-docker-example-config/archive/master.tar.gz
      - BUILDBOT_WORKER_PORT=9989
      - BUILDBOT_WEB_URL=http://localhost:8010/
      - BUILDBOT_WEB_PORT=tcp:port=8010
    links:
      - db
    depends_on:
      - db
    ports:
- "8010:8010"

2. Une fois ce container créé on y accède en ssh

 docker exec -it buildbot /bin/sh

3. Une fois dans le container on se déplace dans le dossier de configuration du container qui a été defini dans le Dockerfile du docker.

 
cd /usr/src/buildbot/docker/

4. et on édite le fichier start_buildbot.sh qui est le fichier qui lance le processus du docker. Pour rappel un container représente toujours un processus!

 
# Fixed buildbot master not start error in docker
rm -f twistd.pid
# we use exec so that twistd use the pid 1 of the container, and so that signals are properly forwarded
exec twistd -ny buildbot.tac

On ne garde que ces deux instructions et on retire toutes les instruction qui on besoin des variables d’environnements.

5. On quitte le container et ensuite on va modifier nos changements en créant une image locale.

docker container ls
docker commit <container_id> buildbot_xxx

6. Maintenant on peut modifier notre docker-compose.yml en retirant les variables environnement plus nécessaire et on change l’image qu’on utilise.

  buildbot:
    image: buildbot_xxx
    container_name: buildbot
    hostname: buildbot
    ports:
      - "8010:8010"
      - "9989:9989"
    expose:
      - 8080
      - 9989

7. On relance le container

docker-compose up

Changement du type de base de donnée (sqlite to postgres)

Pour changer le type de base de donné, j’ai été confronté à un problème, buildbot exigeait l’utilisation d’une commande pour mettre à jour la base de donnée.

buildbot upgrade-master /var/lib/buildbot

Malheureusement, impossible de lancer cette instruction avec le server buildbot lancé, du coup quand on coupe le processus du serveur et bien le container docker est aussi coupé du coup pas accessible por exécuter cette instruction.
Alors,j’ai du créer aussi un autre container qui mettait à jour la db avant de lancer le serveur.

1. Lancer le serveur buildbot.

2. se connecter au container

 docker exec -it buildbot /bin/sh

3. Une fois dans le container, on se déplace dans le dossier de configuration du container qui a été définit dans le Dockerfile du docker.

 
cd /usr/src/buildbot/docker/

4. et on édite le fichier start_buildbot.sh qui est le fichier qui lance le processus du docker. Pour rappel un container représente un processus!

 
rm -f twistd.pid
buildbot upgrade-master /var/lib/buildbot
exec twistd -ny buildbot.tac

5. On quitte le container et ensuite on va modifier nos changements en créant une image locale.

docker container ls
docker commit <container_id> buildbot_db

6.On relance

7. Maintenant on peut modifier notre docker-compose.yml en retirant les variables environnement plus nécessaire et on change l’image qu’on utilise.

  buildbot:
	image: buildbot_db
    container_name: buildbot
    hostname: buildbot
    ports:
      - "8010:8010"
      - "9989:9989"
    expose:
      - 8080
      - 9989

8. on modifie le fichier master.cfg pour faire pointer vers le nouveau type de donnée:

'db_url': "postgresql://username:pwd@postgres/buildbot_state", 

9. On créé la db postgres sur le serveur postgres !

docker exec -it postgres /bin/bash
psql postgres -u username
CREATE DATABASE buildbot_state;
GRANT ALL PRIVILEGES ON DATABASE buildbot_state TO username;
\list

10. On relance le container

docker-compose up

11. On voit que la db se met à jour et on teste le serveur.

12. On remet le fichier docker-compose.yml comme avant avec notre container buildbot_xxx

13. On relance le container

docker-compose up

Tags: Buildbot , Docker , docker-compose