|
|
@@ -1,50 +1,170 @@
|
|
|
-
|
|
|
-node {
|
|
|
- env.NODEJS_HOME = "${tool 'NodeJS'}"
|
|
|
- // on linux / mac
|
|
|
- env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"
|
|
|
- // on windows
|
|
|
- //env.PATH="${env.NODEJS_HOME};${env.PATH}"
|
|
|
- sh 'npm --version'
|
|
|
-
|
|
|
- stage('checkout') {
|
|
|
- deleteDir()
|
|
|
- checkout scm
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- stage('Stop Containers') {
|
|
|
- sh 'docker ps | grep "workflow_" -v | awk -F " " \'{ if(NR>1) print $1}\' |xargs docker kill |xargs docker rm || true'
|
|
|
- sh 'docker system prune -f'
|
|
|
+pipeline {
|
|
|
+ agent any
|
|
|
+ environment {
|
|
|
+ NODEJS_HOME = "${tool 'NodeJS'}"
|
|
|
+ PATH = "${env.NODEJS_HOME}/bin:${env.PATH}"
|
|
|
+ DEV_URL = "dev.foodgame.fr"
|
|
|
+ PREPROD_URL = "preprod.foodgame.fr"
|
|
|
+ PROD_URL = "prod.foodgame.fr"
|
|
|
}
|
|
|
+ stages {
|
|
|
+ stage('Setup Environment') {
|
|
|
+ steps {
|
|
|
+ script {
|
|
|
+ echo "Environnement détecté : ${env.BRANCH_NAME}"
|
|
|
+ if (env.BRANCH_NAME == 'dev') {
|
|
|
+ echo "Déploiement sur DEV (${DEV_URL})"
|
|
|
+ } else if (env.BRANCH_NAME == 'preprod') {
|
|
|
+ echo "Déploiement sur PREPROD (${PREPROD_URL})"
|
|
|
+ } else if (env.BRANCH_NAME == 'prod') {
|
|
|
+ echo "Déploiement sur PROD (${PROD_URL})"
|
|
|
+ } else {
|
|
|
+ error "Branche non prise en charge : ${env.BRANCH_NAME}"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sh 'npm --version'
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ stage('Checkout Code') {
|
|
|
+ steps {
|
|
|
+ deleteDir()
|
|
|
+ checkout scm
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // stage('Push Docker image to Nexus') {
|
|
|
- // withDockerRegistry([credentialsId: 'nexus', url: 'https://nexus.foodgame.fr']) {
|
|
|
- // // Définition des variables
|
|
|
- // def dockerImageName = 'workflow_jenkins_1'
|
|
|
- // def dockerImageTag = 'latest'
|
|
|
- // def nexusRepository = 'fatboar_repo'
|
|
|
+ stage('SonarQube Analysis') {
|
|
|
+ steps {
|
|
|
+ script {
|
|
|
+ def scannerHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation';
|
|
|
+ withSonarQubeEnv('SonarQube') { // Nom du serveur SonarQube configuré dans Jenkins
|
|
|
+ sh """
|
|
|
+ ${scannerHome}/bin/sonar-scanner \
|
|
|
+ -Dsonar.projectKey=FatboarProject-${env.BRANCH_NAME} \
|
|
|
+ -Dsonar.sources=. \
|
|
|
+ -Dsonar.host.url=https://sonarqube.foodgame.fr \
|
|
|
+ -Dsonar.login=sqp_09ee9072c917af8212864baf0f75c950afc14c64
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // // Étape de balisage de l'image Docker pour le registre Nexus
|
|
|
- // sh "docker tag ${dockerImageName}:${dockerImageTag} ${nexusRepository}/${dockerImageName}:${dockerImageTag}"
|
|
|
+ stage('Stop Containers') {
|
|
|
+ steps {
|
|
|
+ sh '''
|
|
|
+ docker ps | grep "workflow_" -v | awk -F " " '{ if(NR>1) print $1}' | xargs docker kill || true
|
|
|
+ docker system prune -f
|
|
|
+ '''
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // // Étape de poussée de l'image Docker vers le registre Nexus
|
|
|
- // sh "docker push ${nexusRepository}/${dockerImageName}:${dockerImageTag}"
|
|
|
- // }
|
|
|
- // }
|
|
|
+ stage('Build & Deploy') {
|
|
|
+ steps {
|
|
|
+ sh '''
|
|
|
+ docker-compose stop
|
|
|
+ docker-compose build
|
|
|
+ docker-compose up -d
|
|
|
+ '''
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
+ stage('Push Docker Image (Nexus)') {
|
|
|
+ when {
|
|
|
+ branch 'prod'
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ withDockerRegistry([credentialsId: 'nexus', url: 'https://nexus.foodgame.fr']) {
|
|
|
+ script {
|
|
|
+ def dockerImageName = 'workflow_jenkins_1'
|
|
|
+ def dockerImageTag = 'latest'
|
|
|
+ def nexusRepository = 'fatboar_repo'
|
|
|
|
|
|
- stage('Build Docker MEAN Stack(PreProduction Deployment)') {
|
|
|
- sh 'docker-compose -v'
|
|
|
- sh 'docker-compose stop'
|
|
|
- sh 'docker-compose build'
|
|
|
- sh 'docker-compose up -d'
|
|
|
- }
|
|
|
+ sh """
|
|
|
+ docker tag ${dockerImageName}:${dockerImageTag} ${nexusRepository}/${dockerImageName}:${dockerImageTag}
|
|
|
+ docker push ${nexusRepository}/${dockerImageName}:${dockerImageTag}
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- stage('Fin du Pipeline') {
|
|
|
- sh 'echo "Félicitation tout s\'est bien déroulé!"'
|
|
|
- }
|
|
|
+ stage('Cleanup') {
|
|
|
+ steps {
|
|
|
+ echo "Nettoyage terminé pour la branche ${env.BRANCH_NAME}"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Fin du Pipeline') {
|
|
|
+ steps {
|
|
|
+ sh 'echo "Félicitations, le pipeline s\'est terminé avec succès !"'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ post {
|
|
|
+ success {
|
|
|
+ echo "Pipeline exécuté avec succès pour la branche ${env.BRANCH_NAME}."
|
|
|
+ }
|
|
|
+ failure {
|
|
|
+ echo "Échec du pipeline pour la branche ${env.BRANCH_NAME}."
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+// node{
|
|
|
+
|
|
|
+// env.NODEJS_HOME = "${tool 'NodeJS'}"
|
|
|
+// // on linux / mac
|
|
|
+// env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"
|
|
|
+// // on windows
|
|
|
+// //env.PATH="${env.NODEJS_HOME};${env.PATH}"
|
|
|
+// sh 'npm --version'
|
|
|
+
|
|
|
+// stage('checkout')
|
|
|
+// {
|
|
|
+// deleteDir()
|
|
|
+// checkout scm
|
|
|
+// }
|
|
|
+
|
|
|
+// stage('Stop Containers')
|
|
|
+// {
|
|
|
+// sh 'docker ps | grep "workflow_" -v | awk -F " " \'{ if(NR>1) print $1}\' |xargs docker kill |xargs docker rm || true'
|
|
|
+// sh 'docker system prune -f'
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+// // stage("Push preprod images to nexus")
|
|
|
+// // {
|
|
|
+// // docker.withRegistry('http://localhost:8083','885ef60c-9352-489a-bd1c-e4b695747c21')
|
|
|
+// // {
|
|
|
+// // imageApache.push('latest')
|
|
|
+// // imageExpress.push('latest')
|
|
|
+// // }*/
|
|
|
+// // }
|
|
|
+// // stage('SonarQube analysis')
|
|
|
+// // {
|
|
|
+// // def scannerHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation';
|
|
|
+// // withSonarQubeEnv('SonarQube')
|
|
|
+// // {
|
|
|
+// // // If you have configured more than one global server connection, you can specify its name
|
|
|
+// // sh "${scannerHome}/bin/sonar-scanner \
|
|
|
+// // -Dsonar.projectKey=FatboarProject \
|
|
|
+// // -Dsonar.sources=. \
|
|
|
+// // -Dsonar.host.url=https://sonarqube.foodgame.fr \
|
|
|
+// // -Dsonar.login=sqp_09ee9072c917af8212864baf0f75c950afc14c64"
|
|
|
+// // }
|
|
|
+// // }
|
|
|
+
|
|
|
+
|
|
|
+// stage('Build Docker MEAN Stack(Test Deployment)')
|
|
|
+// {
|
|
|
+// sh 'docker-compose -v'
|
|
|
+// sh 'docker-compose build'
|
|
|
+// sh 'docker-compose up -d'
|
|
|
+// }
|
|
|
+
|
|
|
+// stage('Fin du Pipeline')
|
|
|
+// {
|
|
|
+// sh 'echo "Félicitation tout c\'est bien déroulé!"'
|
|
|
+// }
|
|
|
+// }
|