Project

General

Profile

Development #21758

Intégration continue

Added by Emmanuel Cazenave about 2 years ago. Updated 5 months ago.

Status:
Solution proposée
Priority:
Normal
Target version:
-
Start date:
09 Feb 2018
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

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

0001-add-test_devinst_in_cowbuilder.patch View (1.69 KB) Christophe Siraut, 03 Oct 2019 01:45 PM

0001-add-test_devinst_in_cowbuilder.patch View (1.69 KB) Christophe Siraut, 03 Oct 2019 05:36 PM

0001-add-test-nspawn-and-Jenkinsfile-21758.patch View (1.97 KB) Christophe Siraut, 18 Nov 2019 06:50 PM

0003-reload-services-using-init-scripts.patch View (1.38 KB) Christophe Siraut, 25 Nov 2019 06:26 PM

0004-add-test-nspawn-and-Jenkinsfile-21758.patch View (2.12 KB) Christophe Siraut, 25 Nov 2019 06:26 PM

0002-misc-parametrize-postgresql-port.patch View (2.36 KB) Christophe Siraut, 25 Nov 2019 06:26 PM

0001-ansible.cfg-set-remote_tmp.patch View (522 Bytes) Christophe Siraut, 25 Nov 2019 06:26 PM

History

#1 Updated by Christophe Siraut 6 months ago

  • Assignee set to Christophe Siraut
  • Status changed from Nouveau to En cours

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 Updated by Christophe Siraut 6 months ago

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 Updated by Christophe Siraut 6 months ago

  • File deleted (test_devinst_in_cowbuilder.sh)

#4 Updated by Christophe Siraut 6 months ago

Le précédent patch était incomplet.

#5 Updated by Benjamin Dauvergne 6 months ago

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

#6 Updated by Christophe Siraut 6 months ago

  • Status changed from Solution proposée to 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 Updated by Christophe Siraut 6 months ago

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

#8 Updated by Christophe Siraut 5 months ago

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 Updated by Christophe Siraut 5 months ago

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

#10 Updated by Emmanuel Cazenave 5 months ago

Cool cool.

Christophe Siraut a écrit :

ça plante actuellement sur :

[..]

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

#11 Updated by Christophe Siraut 5 months ago

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

Also available in: Atom PDF