Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

LinuxFr.org : les journaux  -  Mettre en place des build automatiques avec jenkins et docker

 -  Février 2019 - 

Sommaire

Mettre en place des build automatiques avec jenkins et docker

L'intégration continue, c'est vachement bien, mais parfois, c'est un peu compliqué à mettre en place.

Ce journal explique comment mettre en place un serveur de build automatiques maison.

L'intérêt est d'avoir une solution locale qui permet de compiler sur un réseau local (en entreprise par exemple où l'accès à Internet est parfois compliqué et où on a rarement envie d'utiliser des services externes)

Ici je vais détailler commente compiler régulièrement des projets utilisant gcc et automake.

Outils

Pour réaliser tout ça, on a utilisé :

  • Ubuntu 14.04
  • docker 1.6.2
  • jenkins 2.150.2
  • alpine 3.7

installation de docker

On commence par installer docker, pour ça pas de mystère, on tape :

$sudo apt-get install docker.io 

Une fois docker installé, on permet à l'utilisateur lambda de l'utiliser :

$sudo addgroup docker
$sudo usermod -aG docker $USER

On se déconnecte/reconnecte et on peut tester que tout fonctionne :

docker run hello-world

installation de jenkins

On lance une image jenkins :

$docker run --name jenkins-master -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins/jenkins:lts

Explication de la commande :

  • docker run : on lance une image
  • --name jenkins-master : on lui donne un nom
  • -d : en arrière plan
  • -p x:y : le port y de la machine virtuelle est mappée sur le port x de l'hote
  • -v chemin : on crée un volume pour garder les données de jenkins
  • jenkins/jenkins:lts : nom de l'image à utiliser (prise depuis hub.docker.com)

Une fois la machine lancée, on peut lancer un navigateur web et se connecter sur 127.0.0.1:8080.

Après quelque temps, jenkins est prêt à être configuré. La première chose qu'il demande, est le mot de passe initial, pour cela, on demande à docker de nous récupérer un fichier dans la machine jenkins :

$docker cp jenkins-master:/var/jenkins_home/secrets/initialAdminPassword .
Il faut alors copier le contenu du fichier initialAdminPassword dans la page web qui la demandait.

Il est alors demandé de sélectionner les plugins à installer, on peut garder les réglages par défaut.


On entre les informations de l'administrateur, et surtout, on clique sur "save & continue".

On définit enfin à quelle adresse sera accessible le serveur.

Jenkins est prêt à être utilisé.

Création d'un agent SSH

Maintenant, on va créer une seconde machine docker qui sera en charge de compiler notre projet.

création d'un esclave ssh

Identification des besoins

Dans un projet, on identifie ce dont on a besoin, ici je prends un vieux projet perso : txt2snd

Pour la construction, on aura besoin de :

  • gcc et une lib-c
  • make, automake et autoconf
  • libsndfile

Fort de ces informations, on peut créer un fichier Dockerfile qui pourra compiler le projet et interagir avec le maitre jenkins

    # on part d'une image alpine 
    FROM alpine:3.7

    # on ajoute openssh pour la connexion ssh
    # et openjdk qui est requis par jenkins
    RUN apk add openssh openjdk8-jre-base

    # on ajoute git pour accéder au repo
    RUN apk add git

    # gcc et make 
    RUN apk add gcc make

    # et enfin les bibliothèques dont le projet a besoin
    RUN apk add libc-dev libsndfile-dev

    # un peu de configuration
    # un script pour générer des clefs ssh 
    COPY ssh-slave-entrypoint.sh /usr/bin/

    # en le rendant executable (est-ce bien nécessaire ?)
    RUN chmod +x /usr/bin/ssh-slave-entrypoint.sh

    # on efface d'éventuels anciennes clefs (même remarque)
    RUN rm -rf /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key

    # on crée un utilisateur
    RUN adduser -D jenkins

    # auquel on ajoute un mot de passe
    RUN echo "jenkins:jenkins" | chpasswd

    # et on crée un répertoire pour ranger le bazard jenkins
    RUN mkdir /home/jenkins/jenkins_slave

    # que l'on donne à l'utilisateur
    RUN chown jenkins /home/jenkins/jenkins_slave

    # on ouvre le port 22 pour ssh
    EXPOSE 22

    # on définit le script copié plutôt comme le point d'entrée
    ENTRYPOINT ["ssh-slave-entrypoint.sh"]

    # et on lance le serveur ssh au démarrage de la machine
    CMD ["/usr/sbin/sshd", "-D"]

Le fichier ssh-slave-entrypoint.sh contient lui

    #!/bin/sh

    if [ ! -f "/etc/ssh/ssh_host_rsa_key" ] ; then
        ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
    fi


    if [ ! -f "/etc/ssh/ssh_host_dsa_key" ] ; then
        ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
    fi 

    if [ ! -d "/var/run/sshd" ]; then
        mkdir -p /var/run/sshd
    fi

    exec "$@"

Ce script là, je l'ai pris du dépot alpine-sshd.

On construit l'image :

$docker build -t gcc.slave .
Avec :

  • docker build : on crée une nouvelle image
  • -t gcc.slave : qu'on appelle 'gcc.slave'
  • . : on prend de Dockerfile du dossier courant

Et on lance cette image, en redirigeant le port 22 sur le 2222 :

$docker run -d --name gcc.slave -p 2222:22 gcc.slave
On peut maintenant dire à jenkins d'utiliser cette image.

ajout de l'esclave à jenkins

On se rend à la page 127.0.0.1:8080/computer/new pour créer un nouveau noeud.

Une fois dans la page http://127.0.0.1:8080/computer/createItem, on configure :

  • le nom de l'agent, ici gcc.slave
  • le nom du répertoire de travail (Remote root directory), ici /home/jenkins/jenkins_slave
  • l'adresse de l'agent (qu'on récupère avec ifconfig)
  • les droits d'accès (ici jenkins/jenkins)
  • la stratégie de vérification, ici on vérifie rien
  • le port ssh (dans le menu avancé), ici 2222




On enregistre le tout et sur la page 127.0.0.1:8080/computer/gcc.slave/, on lance l'agent.

L'agent est lancé ? Alors on peut configurer le projet.

configuration du projet à construire

Sur la page 127.0.0.1:8080/newJob, on créé le projet txt2snd de type Freestyle project

Puis on le configure :

  • Dans "General"
    • On sélectionne "Restrict where this project can be run" et indiquer le nom de l'agent ssh à utiliser si on a plusieurs projets et plusieurs agents
  • Dans "Source Code Management", on sélectionne "Git"
    • On indique l'URL du dépot : https://framagit.org/mabu/txt2snd.git
  • Dans "Build Triggers"
    • Des build périodique
    • Qu'on programme tous les jours à midi : H 12 * * *
  • Dans "Build"
    • On ajoute "execute shell", avec pour code : #!/bin/sh autoreconf --install ./configure make


On enregistre.

Et on tente de lancer le build: 127.0.0.1:8080/job/txt2snd/build?delay=0sec (il y a un bouton pour ça).

Et finalement, le programme est compilé. On peut aller chercher les fichiers construits dans 127.0.0.1:8080/job/txt2snd/ws/

Et après

Dans cet article, je suis passé un peu vite sur la sécurisation des agents, dans le cadre d'un réseau isolé, c'est pas bien grave, mais il faut garder à l'esprit que j'ai un peu bâclé cette partie.

Après, on peut aller plus loin, on peut imaginer avoir un agent sur une machine réelle qui puisse exécuter d'autres outils de compilation ou même des systèmes de tests maisons.

On peut aussi changer de SCM, envoyer des mails en cas d'échec, déployer…

Les possibilités semblent illimitées.

Commentaires : voir le flux atom ouvrir dans le navigateur

par purplepsycho

LinuxFr.org : les journaux

LinuxFr.org : Journaux

Pretendo tente de déprogrammer l'obsolescence des consoles Nintendo

 -  9 avril - 

Ah Nal,Gros N vient de faire un gros doigt aux utilisateurs de ses consoles 3DS et Wii U en annonçant la fermeture des services en ligne pour (...)


[Trolldi] Vulgarisation sur l'IA pour décideur pressé

 -  5 avril - 

Cher 'Nal,Je fais un article-marque-page sur un post tout frais de Ploum où il est question d'un fantasme vieux comme le Talmud avec le Golem. (...)


Super Marian and Robin: les roms en collant

 -  3 avril - 

Bonjour Nal,Je t'écris pour te proposer de tester mon nouveau jeu: Super Marian and Robin.Il s'agit d'un jeu de plateformes pour un ou deux (...)


Le roi est mort, vive le roi ! Les alternatives de Redis sont là

 -  3 avril - 

Bonjour Nal !Après le changement de licence de Redis, ce qui devait arriver arriva, et des alternatives libres apparaissent.Tout d'abord, on a (...)


Xz (liblzma) compromis

 -  29 mars - 

Sommaire La faille Le camouflage La compromission Et maintenantBonjour à tous,La nouvelle que le projet xz (et en particulier liblzma) a été (...)