[Docker] buildbot
mardi 6 novembre 2018BuildBot 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