Projet

Général

Profil

Development #21758

Intégration continue

Ajouté par Emmanuel Cazenave il y a environ 6 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
09 février 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Tester tout ça dans Jenkins, deboostrap peut-être ?


Fichiers

Révisions associées

Révision 9b2ca130 (diff)
Ajouté par Christophe Siraut il y a presque 4 ans

add test-nspawn and Jenkinsfile (#21758)

Historique

#1

Mis à jour par Christophe Siraut il y a plus de 4 ans

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Christophe Siraut

Le serveur jenkins tourne aussi eobuilder configuré avec cowbuilder. J'ai commencé le script suivant qui devrait pouvoir être appelé par jenkins :

#!/bin/sh
set -e

dist=buster
fork=/tmp/chroot-${dist}
(test -d $fork && rm -rf $fork) || true
cp -al /var/cache/pbuilder/stretch/base.cow $fork
alias shell="sudo chroot $fork cow-shell" 
shell adduser --disabled-password --gecos "" testuser
cp -r . $fork/home/testuser
shell apt install -y git ansible postgresql sudo
shell usermod -a -G sudo testuser
echo 'testuser ALL=(ALL) NOPASSWD:ALL' >> $fork/etc/sudoers
shell su testuser -l -c 'ansible-playbook -K -i inventory.yml install.yml'
rm -rf $fork

ça bloque sur "BECOME password:" malgré que l'utilisateur ait les permissions sudo sans mot-de-passe.

#2

Mis à jour par Christophe Siraut il y a plus de 4 ans

Script attaché qui chez moi exécute le playbook de façon autonome, actuellement jusqu'à "TASK [app-setup : fargo - migrate schemas]", voir #36662

J"ajoute le fichier tel quel, il suffira de l'appeler dans un jenkinsfile.

#3

Mis à jour par Christophe Siraut il y a plus de 4 ans

  • Fichier test_devinst_in_cowbuilder.sh supprimé
#4

Mis à jour par Christophe Siraut il y a plus de 4 ans

Le précédent patch était incomplet.

#5

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

Tu pourrais faire une branche avec ce script et un job jenkins pour voir ce que ça donne.

#6

Mis à jour par Christophe Siraut il y a plus de 4 ans

  • Statut changé de Solution proposée à En cours

J'ai fait un job jenkins et une branche wip. Pour le moment ça plante sur l'accès base-de-donnée : comme il y a déjà un postgresql sur jenkins.entrouvert.org, le postgresql installé dans le chroot écoute sur le port 5433 (au lieu de 5432).

Voir: https://jenkins.entrouvert.org/job/publik-devinst-wip/job/wip%252F21758-Integration-continue/9/console

#7

Mis à jour par Christophe Siraut il y a plus de 4 ans

une solution serait d'utiliser nspawn, on perdrait le copy-on-write (sauf si on avait une partition btrfs/xfs).

#8

Mis à jour par Christophe Siraut il y a plus de 4 ans

Test automatisé de publik-devinst sur buster concluant: https://jenkins.entrouvert.org/job/publik-devinst-wip/job/wip%252F21758-Integration-continue/17/console

ça utilise systemd-nspawn et l'option --ephemeral. (j'ai mis à jour systemd depuis stretch-backports sur jenkins.entrouvert.org pour avoir https://github.com/systemd/systemd/pull/8781)

ça plante actuellement sur :


TASK [base : Install system packages dependencies] *****************************

fatal: [localhost]: FAILED! => {"changed": false, "msg": "No package matching 'libjs-pdf' is available"}
    to retry, use: --limit @/opt/publik-devinst/install.retry
#9

Mis à jour par Christophe Siraut il y a plus de 4 ans

note c'est sensé supporter plusieurs builds parallèles.

#10

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

Cool cool.

Christophe Siraut a écrit :

ça plante actuellement sur :

[..]

J'ai poussé le patch dans #28185 pour corriger ça.

#11

Mis à jour par Christophe Siraut il y a plus de 4 ans

ça passe dans jenkins avec plusieurs petites modifications, dis-moi si je dois faire des tickets séparés.

Afin d'utiliser une virtualisation légère (chroot), j'ai ajouté la paramétrisation du port de connexion à postgresql (voir patch #2). J'ai gardé l'utilisation de systemd-nspawn parce que ça gère le nettoyage d'une session interrompue ou le fait d'avoir plusieurs session concurrentes (ça fonctionnerait aussi en utilisant cow-shell ou chroot) Autre petite modification: utilisation de script init (voir patch #3), parce que systemd n'est pas utilisé dans un chroot.

Le patch #4 ajoute le fichier jenkins et le script de test.

Le patch #1 ajoute une variable sans laquelle je reçois des "Authentication or permission failure":

TASK [base : create the postgresql user named testuser] ****************************************************************************************************************************
fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo /var/tmp/ansible-tmp-1574170004.8180623-134757228392641 `\" && echo ansible-tmp-1574170004.8180623-134757228392641=\"` echo /var/tmp/ansible-tmp-1574170004.8180623-134757228392641 `\" ), exited with result 1", "unreachable": true}
    to retry, use: --limit @/opt/publik-devinst/install.retry

Bug: nginx ne peut être testé davantage parce que le port 80 est déjà pris, ce n'est conséquent si le scope se limite à l'exécution initiale de publik-devinst.

#13

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

  • Statut changé de Solution proposée à Solution validée

J'ai rebasé sur master dans une branche à mon nom et ça m'a l'air ok, je valide en attendant le build et Christophe je te laisserai pousser.

#14

Mis à jour par Christophe Siraut il y a presque 4 ans

  • Statut changé de Solution validée à En cours

Il doit manquer python3-psycopg2, je regarde.

the python psycopg2 module is required
#15

Mis à jour par Christophe Siraut il y a presque 4 ans

ça "fonctionne" mais plante sur la migration d'a2, cfr autre ticket. ("NameError: name 'MIDDLEWARE_CLASSES' is not defined")

J'ai adapté le script de test en ajoutant python et python-psychopg2 comme dépendances.

Sur le site d'ansible ils annoncent fonctionner avec python3, mais j'imagine que tous les modules n'ont pas encore été migrés.

Sans l'installation de python ansible donne :

PLAY [publik multitenants installation] ****************************************

TASK [Gathering Facts] *********************************************************
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "/bin/sh: 1: /usr/bin/python: not found\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}
    to retry, use: --limit @/opt/publik-devinst/install.retry

PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1   

et sans python-psychopg2 je reçois :

TASK [base : create the postgresql user named testuser] ************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "the python psycopg2 module is required"}
    to retry, use: --limit @/opt/publik-devinst/install.retry

PLAY RECAP *********************************************************************
#16

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

C'est bon pour hobo, j'ai relancé un build sur ta branche.

PS: j'ai flingué ta branche par erreur sur gitolite mais je l'ai recréé depuis la référence git que j'ai vus dans les logs jenkins, check quand même au cas où.

#17

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Il manque juste un rebase maintenant je pense.

#18

Mis à jour par Christophe Siraut il y a presque 4 ans

  • Statut changé de En cours à Résolu (à déployer)
commit 9b2ca13078a1054de039d1b4b96de7f999ec14e0 (HEAD -> master, origin/wip/21758-Integration-continue, origin/master, origin/HEAD, wip/21758-Integration-continue)
Author: Christophe Siraut <csiraut@entrouvert.com>
Date:   Thu Oct 3 12:58:37 2019 +0200

    add test-nspawn and Jenkinsfile (#21758)
#19

Mis à jour par Emmanuel Cazenave il y a plus de 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF