P

Docker documentation for deploying tools for continuous integration.

README.md

Solution pour le Projet de Recherche et Innovation

Fait suite au rapport du projet.

Licence

Ce document est publié sous licence Creative Commons CC-BY.

Vous êtes autorisé à :

  • Partager : copier, distribuer et communiquer le matériel par tous moyens et sous tous formats
  • Adapter : remixer, transformer et créer à partir du matériel

Cela pour toute utilisation, y compris commerciale.

L'offrant ne peut retirer les autorisations concédées par la licence tant que vous appliquez les termes de cette licence.

Selon les conditions suivantes:

  • Attribution : vous devez indiquer la paternité de ce matériel de manière appropriée, fournir un lien vers la licence appliquée et indiquer si des changements ont été fait sur l'oeuvre. Vous devez le faire de manière suffisamment explicite et cela sans suggérer que l'auteur soutient les changements apportés.

Aucune restriction supplémentaire : Vous n'êtes pas autorisé à appliquer des conditions légales ou des mesures techniques qui restreindraient légalement autrui à utiliser l'Oeuvre dans les conditions décrites par la licence.

Résumé

Ce dépôt constitue la partie pratique du Projet de Recherche et d'Innovation que je réalise au cours de mes quatrième et cinquième années à l'Exia.CESI. Il concerne l'utilisation des processus d'intégration continue en entreprise. La partie théorique est présentée dans ce rapport. Ce document est constitué d'un état de l'art présentant les processus, leur fonctionnement et leurs objectifs et d'une étude de l'utilisation de ces processus en entreprise. Sur ce dépôt, je propose une solution simple et répondant aux problématiques exprimées par les sociétés afin qu'elles puissent mettre en place les processus d'intégration continue.

Documentation

Je vais présenter ici comment utiliser la solution que je propose afin de construire son environnement d'intégration continue.

Pré-requis

Veuillez vous assurer de posséder un environnement compatible avec Docker et Docker-compose. Installation de Docker et Docker-compose.

Téléchargement de la solution

Télécharger la solution en utilisant l'interface graphique Gitlab du projet à cette adresse.

Extraire le document et se déplacer dans le dossier obtenu.

Quick Start

Pour démarrer l'ensemble des services, exécuter la commande suivante :

docker-compose up

Cette commande va télécharger les images nécessaires au lancement des conteneurs et va démarrer ces derniers avec la configuration présente dans le fichier docker-compose.yml.

Accès

Jenkins : http://IP_ADDRESS:8080 SonarQube : http://IP_ADDRESS:9000 GitLab : http://IP_ADDRESS:10080

Si les services sont déployés localement, il est possible de remplacer IP_ADDRESS par localhost

Un compte est déjà présent dans GitLab, changer le mot de passe comme demandé après la connection:

  • username: root
  • password: 5iveL!fe

Le compte d'administration par défaut de SonarQube est admin:admin.

Attention aux instances Jenkins et SonarQube. Celles-ci sont accessibles sans identifiant, Pour une utilisation en production, elles devront être protégées par leur configurations respectives. Il est conseillé de ne pas utiliser les comptes déjà présents mais plutôt de créer des comptes supplémentaires et sécurisés pour une utilisation en production.

Le lien de SonarQube présent sur l'interface de Jenkins n'est pas utilisable sans nom de domaine.

Configuration initiale

Il est nécessaire d'installer Git sur le poste client.

Sur l'interface Web de Jenkins, aller dans Manage Jenkins > Configure System Cliquer sur Add Maven, décocher l'installation automatique, nommer l'instance maven et indiquer le chemin /usr/share/maven. Dans la partie SonarQube Installations, ajouter une instance. Appuyer sur le bouton Advanced et compléter avec les paramètres suivants.

Ne pas oublier de sauvegarder.

Utilisation

Pour cet exemple, nous allons créer un projet sur l'interface de GitLab et y déposer notre code avec le client Git. Le code que nous allons utiliser est celui présent dans ce dépôt. C'est une petite application Java avec une classe principale de Hello World et une classe de test géré par Maven et le pom.xml.

Dans GitLab

  • Créer un nouveau projet helloWorld. La configuration reste aux valeurs par défaut.

Avec le client Git

  • Se placer dans le dossier helloWorld
  • Initialiser le dépôt local git init
  • Connecter le dépôt local et le dépôt distant git remote add origin http://localhost:10080/root/helloWorld.git
  • Ajouter l'ensemble du projet au prochain partage git add .
  • Commiter le contenu git commit -m "Commit Initial"
  • Pousser le code sur le dépôt distant git push -u origin master
  • Utiliser le compte utilisateur root et le mot de passe défini

Dans Jenkins, créer un nouvel projet (New item) de type Maven. Nommer le projet HelloWorld.

Configurer le projet avec Git et l'URL http://gitlab/root/helloWorld.git et ajouter les Credentials avec l'utilisateur root et le mot de passe que nous changé plus tôt. Dans la partie Build Triggers, cocher la construction périodique et indiquer le paramétrage suivant : H H * * 2-6. Ceci va exécuter une construction tous les soirs du lundi au vendredi à minuit. Ajouter SonarQube en tant que Post-build Actions. Ajouter Record Jacoco coverage report en tant que Post-build Actions.

Sauvegarder la configuration

Lancer trois build via l'interface de Jenkins et attendre le résultat.

  • Récupération des sources du projet sur le dépôt Git
  • Construction du projet avec Maven
  • Exécution des tests
  • Rapport de couverture des tests
  • Analyse de la qualité par SonarQube

Le premier build va être affiché en rouge : la cause est la connection à SonarQube qui est initialisé juste après cet appel. Le code lui est valide comme indiqué dans le log de la console du build #1, seul un test est en échec. Le second build est instable (orange) car un test est en échec. Sur la page de présentation du projet de Jenkins, les résultats des tests et de la couverture des tests sont affichés sous forme de graphiques. Sur l'interface graphique de SonarQube, le rapport de qualité indique plusieurs défauts.

Configuration Avancée

Docker-compose

Si vous souhaitez modifier le nom du dossier dans lequel est exécuté la commande docker-compose. Il faut également changer le paramétrage du conteneur ambassadeur dans le fichier docker-compose.yml.

ambassador:
  image: cpuguy83/docker-grand-ambassador
  volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
  command: 
    -name <NOM_DOSSIER>_gitlab_1 
    -name <NOM_DOSSIER>_jenkins_1

Documentation Officiel Docker-Compose Ambassador Pattern Linking

GitLab

GitLab est utilisable en l'état mais il est possible de le configurer plus précisément. Pour la configuration des mails les options suivantes sont disponibles et éditables dans le fichier docker-compose.yml. Pour activer les mails, mettre le paramètre SMTP_ENABLED à true et définir le compte à utiliser.

  • SMTP_ENABLED: Active l'utilisation des mails via SMTP. Par défaut, true si le paramètre SMTP_USER est défini.
  • SMTP_DOMAIN: SMTP domain. Defaut www.gmail.com
  • SMTP_HOST: adresse SMTP du serveur. Defaut smtp.gmail.com.
  • SMTP_PORT: port SMTP du serveur. Defaut 587.
  • SMTP_USER: nom d'utilisateur SMTP.
  • SMTP_PASS: mot de passe SMTP.
  • SMTP_STARTTLS: Active STARTTLS. Defaut true.
  • SMTP_OPENSSL_VERIFY_MODE: Mode de vérification OpenSSL. Valeur acceptées : none, peer, client_once et fail_if_no_peer_cert. Defaut none
  • SMTP_AUTHENTICATION: Spécifie la ùéthode d'authentification SMTP : Defaut login si la paramètre SMTP_USER est défini.

Le reste des options est disponible sur la documentation du conteneur.

Documentation Officiel GitLab Documentation Officiel Git

ID Container App Version
gitlab Badge v7.11.2
postgresql Badge v9.4
redis Badge latest

Jenkins

Documentation Officiel Jenkins

ID Container App Version
jenkinsLTS Badge LTS latest

Les plugins préinstallés dans Jenkins sont définis dans le fichier jenkinsDocker/plugins.txt.

git:2.3.5
git-client:1.17.1
mailer:1.15
scm-api:0.2
matrix-project:1.4
ssh-credentials:1.11
credentials:1.22
promoted-builds:2.21
maven-plugin:2.9
token-macro:1.10
parameterized-trigger:2.26
gitlab-hook:1.4.0
ruby-runtime:0.12
jacoco:1.0.19
dashboard-view:2.9.4
sonar:2.2.1

En cas de modification des plugins dans ce fichier, il faut forcer le build du conteneur avec la commande suivante.

docker-compose build

SonarQube

Documentation Officiel SonarQube

ID Container App Version
sonarqube Badge latest
postgresql Badge latest

Erreurs

java.io.FileNotFoundException

Au lancement de Jenkins, cette erreur peut survenir. Elle est du au fait que Jenkins n'a pas les droits sur le volume dans lequel est située sa configuration. Il faut s'assurer que l'utilisateur jenkins (1000) du conteneur possède bien les droits d'écriture en les donnant à l'utilisateur 1000 de l'hôte.

sudo chown -R 1000:1000 ./jenkins/

Solution for the Research and Innovation Project

Follows the report of the project (FR)

Licensing

This document is published under the terms of Creative Commons CC-BY.

You are free to :

  • Share : copy and redistribute the material in any medium or format
  • Adapt : remix, transform, and build upon the material for any purpose, even commercially.

The licensor cannot revoke these freedoms as long as you follow the license terms.

Under the following terms:

  • Attribution : You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.

No additional restrictions : You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.

Abstract

This document is the technical part of the research and innovation project that is realized in fourth and fifth year in Exia.CESI. It deals with the use of continuous integration in companies. The theorical part of the project is presented in this document (FR). The first part of this document is composed by a presentation of the project, how I've chosen my subject and which technology will be studied, a presentation of continuous integration, how it works and what its goals are. Then, it will present the result of the survey, the tools that will be used in the final solution and the solution itself which is in this repository.

Documentation

I'm going to present how to use this solution in order to build your own continuous integration environnement.

Pre-requisites

Be sure to possess an environnement ready for Docker and Docker-compose. Install Docker and Docker-compose.

Download the solution

Download the solution with the Graphical Interface at this address.

Extract the file and go to the directory.

Quick Start

In order to start all the services, execute the command :

docker-compose up

This command is going to download all the needed images and will start the container with the configuration provided in the docker-compose.yml file.

Access

Jenkins : http://localhost:8080 SonarQube : http://localhost:9000 GitLab : http://localhost:10080

Erros

java.io.FileNotFoundException

When launching Jenkins container, this error can be thrown. It comes from Jenkins not having the writing rights on the volume. It is compulsory to assure that jenkins user (1000) has these rights by giving them to the host 1000 user.

sudo chown -R 1000:1000 ./jenkins/