Guide du développeur de l’usine logicielle
L’usine logicielle est accéssible à l’adresse suivante
Outil | URL |
---|---|
SonarQube | http://10.2.3.58:9000/ |
Nexus Repository | http://10.2.3.58:8081/ |
Nexus IQ | http://10.2.3.58:8070/ |
Jenkins | http://10.2.3.58:8080/ |
Clone des projets du lab
Cloner les projest de test depuis l’adresse suivante
git clone https://github.com/kamel2k/usinelogicielle-lab-dsid.git
Paramétrage Sonar
Installation
Télécharger et Installer sonar-scanner selon le système d’exploitation de votre machine
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
Voici la commande pour MacOS
brew install sonar-scanner
Intégration avec IDE
Pour ceux qui utilisent IntelliJ, voici les étapes pour installer le plugin
Intellij -> preferences > plugins > SonarLint > restart ide
SonarLint propose une instance locale de Sonar sur votre machine. Il est tout a fait possible de paramétrer le plugin intellij avec le serveur distant de SonarQube.
Ceux qui utilisent Eclipse, utiliser la méthode classique d’installation de plugin.
Génération token d’API
Suive ces étapes pour générer un token
Aller dans SonarQube ensuite
Profil > My Account > Security > Generate Token > Saisir le nom du token : exemple my-token > Generate > Copier
Voici un exemple de Token
a65f9a466e32d17855da4b40a4b1dbb2ff28b355
Paramétrage au niveau projet Java
Projet Backend Java
Ajouter un fichier sonar-project.properties à la racine du projet avec le contenu suivant :
sonar.projectKey=gainde-backend:developer1
sonar.host.url=http://10.2.3.58:9000/
sonar.java.binaries=./target
sonar.sourceEncoding=UTF-8
Remplacer developer1 par votre nom d’utilisateur.
Génération du scan en ligne de commande
Taper la commande sonar-scanner au niveau racine du projet Backend
sonar-scanner -Dsonar.login=a65f9a466e32d17855da4b40a4b1dbb2ff28b355
A noter que -Dsonar.login représente le token généré dans l’étape précedante
Paramétrage au niveau projet Angular
Projet Frontend Angular
Créer le fichier sonar-project.properties à la racine du projet Frontend avec le contenu suivant
sonar.projectKey=angular-app:developer1
sonar.host.url=http://10.2.3.58:9000/
sonar.sourceEncoding=UTF-8
sonar.sources=src
sonar.exclusions=**/node_modules/**
sonar.tests=src
sonar.test.inclusions=**/*.spec.ts
sonar.typescript.lcov.reportPaths=coverage/lcov.info
Remplacer developer1 par votre nom d’utilisateur.
Génération d’un scan en ligne de commande
Taper la commande sonar-scanner au niveau racine du projet Frontend
sonar-scanner -Dsonar.login=a65f9a466e32d17855da4b40a4b1dbb2ff28b355
A noter que -Dsonar.login représente le token généré dans l’étape précedante
Scan avec l’IDE
Avec IntelliJ
L’analyse du projet se fait en local
selectionner le projet > click droit > SonarLint > Analyze with SonarLint
Avec Eclipse
Click droit au niveau projet ensuite “Sonar”
Paramétrage Nexus Repository
Configuration du projet maven
Créer un fichier settings.xml dans le dossier ~/.m2 et voici le contenu
<settings>
<servers>
<server>
<id>nexus</id>
<username>developer1</username>
<password>mot_passe</password>
</server>
</servers>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://10.2.3.58:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
Remplacer developer1 au niveau de username et password par vos paramètres d’accès.
Rebuilder le projet maven et analyser les logs de sortir pour voir le repository de téléchargement de dépendances.
Configuration du projet angular
Pour npm, on configure le repository par projet (Contrairement à maven qui propose une configuration globale pour tous les projets)
Commencer par créer le fichier .npmrc à la racine du projet Angular avec le contenu
registry=http://10.2.3.58:8081/repository/npm-all/
_auth=ZGV2ZWxvcGVyMTpkZXZlbG9wZXIx
_auth=ZGV2ZWxvcGVyMTpkZXZlbG9wZXIx est le hashage en base64 des identifiants (developer1/mot_passe).
Metter à jour _auth avec votre propre hash en le calculant grace a cette methode
echo -n 'developer1:mot_passe' | openssl base64
Créer le fichier .npmrc dans le dossier home de l’utilisateur avec votre adresse email JC
email=developer1@gmail.com
Ceux qui n’ont pas openssl peuvent utiliser le lien suivant
https://www.tutorialspoint.com/execute_bash_online.php
Configuration d’IntelliJ
Preferences > Build, Execution, Deployment > Build Tools > Maven
s’assurer que le “User settings file” pointe vers le fichier settings.xml
Configuration de Visual Code
Aucune configuration nécessaire
Paramétrage Nexus IQ
Installation de Nexus IQ Cli
Telecharger et installer nexus-iq-cli selon le systeme d’exploitation de votre machine
Voici les commandes pour MacOS
brew tap sonatype/nexus-iq-cli
brew install --cask nexus-iq-cli
Creation d’une application dans Nexus IQ
Se connecter à Nexus IQ avec vos identifiants et au niveau de l’organisation DSID, appuyer sur Add new App
Saisir le nom du application et ajouter -username au niveau du nom de l’application et de l’id de l’application. username etant votre login
Scan en ligne de commande
Localiser votre ID d’application : Cliquer sur App ID to clipboard
Taper la commande suivante
nexus-iq-cli -i mon-application-developer1 -a developer1:mot_passe -s http://10.2.3.58:8070/ -t build .
Pour ceux qui utilisent nexus-iq-cli, la commande est la suivante
java -jar nexus-iq-cli.jar les_memes_paramètres
Utiliser l’url généré pour voir le résultat du rapport
Exercice : Lancer un scan sur le projet frontend. Ne pas oublier de créer une nouvelle application dans Nexus IQ
Configuration d’IntelliJ
Installer le plugin Sonatype Nexus IQ au niveau d’IntelliJ
Intellij -> preferences > plugins > Sonatype Nexus IQ > restart ide
Après redemarrage
IntelliJ -> Preferences -> Nexus IQ
Saisir les informations relatives au serveur Nexus IQ
Configuration de Visual Code
A vous de jouer
Jenkins
Clone du projet Backend de bitbucket
http://agile.douanes.sn:7990/scm/test/backend.git
Créer une branche avec votre nom d’utilisateur
git checkout -b developer1
Jenkinsfile initial
pipeline {
agent any
tools {
maven 'maven3'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
}
}
Lancer la commande
git add -A
git commit -m "add pipeline"
git push origin developer1
Création d’un pipeline Jenkins
Remplacer Branch Specifier par developer1
Executer le pipeline dans Jenkins
Phase build du projet
Editer le Jenkinsfile du projet et mettre le contenu suivant
pipeline {
agent any
tools {
maven 'maven3'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('build') {
steps {
withMaven(globalMavenSettingsConfig: '343ec145-a931-4854-af96-fd98c6c15b21', jdk: 'jdk11', maven: 'maven3', traceability: false) {
sh "mvn clean install"
}
}
}
}
}
Relancer le build Jenkins
Phase Qualité projet
Editer le Jenkinsfile du projet et mettre le contenu suivant
pipeline {
agent any
tools {
maven 'maven3'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('build') {
steps {
withMaven(globalMavenSettingsConfig: '343ec145-a931-4854-af96-fd98c6c15b21', jdk: 'jdk11', maven: 'maven3', traceability: false) {
sh "mvn clean install"
}
}
}
stage('Quality') {
environment {
SCANNER_HOME = tool 'sonar-scanner'
}
steps {
withSonarQubeEnv('sonarqube') {
sh "${SCANNER_HOME}/bin/sonar-scanner -Dsonar.projectKey=backend:developer1"
}
}
}
}
}
Remplacer developer1 par votre nom d’utilisateur Relancer le build Jenkins et voir le rapport Sonar
Phase Sécurité du projet
Créer le projet backend-developer1 dans Nexus IQ et remplacer developer1 par votre nom utilisateur
pipeline {
agent any
tools {
maven 'maven3'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('build') {
steps {
withMaven(globalMavenSettingsConfig: '343ec145-a931-4854-af96-fd98c6c15b21', jdk: 'jdk11', maven: 'maven3', traceability: false) {
sh "mvn clean install"
}
}
}
stage('Quality') {
environment {
SCANNER_HOME = tool 'sonar-scanner'
}
steps {
withSonarQubeEnv('sonarqube') {
sh "${SCANNER_HOME}/bin/sonar-scanner -Dsonar.projectKey=backend:developer1"
}
}
}
stage('Vulnerability analyze') {
steps {
nexusPolicyEvaluation enableDebugLogging: false, failBuildOnNetworkError: false, iqApplication: selectedApplication('backend-developer1'), iqInstanceId: 'nexusiq', iqStage: 'build'
}
}
}
}
Remplacer developer1 par votre nom d’utilisateur
Jenkinsfile final
pipeline {
agent any
tools {
maven 'maven3'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('build') {
steps {
withMaven(globalMavenSettingsConfig: '343ec145-a931-4854-af96-fd98c6c15b21', jdk: 'jdk11', maven: 'maven3', traceability: false) {
sh "mvn clean install"
}
}
}
stage('Quality') {
environment {
SCANNER_HOME = tool 'sonar-scanner'
}
steps {
withSonarQubeEnv('sonarqube') {
sh "${SCANNER_HOME}/bin/sonar-scanner -Dsonar.projectKey=backend:developer1"
}
}
}
stage('Vulnerability analyze') {
steps {
nexusPolicyEvaluation enableDebugLogging: false, failBuildOnNetworkError: false, iqApplication: selectedApplication('backend-developer1'), iqInstanceId: 'nexusiq', iqStage: 'build'
}
}
}
}