Jenkinsfile 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. node
  2. {
  3. env.NODEJS_HOME = "${tool 'NodeJS'}"
  4. // on linux / mac
  5. env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"
  6. // on windows
  7. //env.PATH="${env.NODEJS_HOME};${env.PATH}"
  8. sh 'npm --version'
  9. stage('checkout')
  10. {
  11. deleteDir()
  12. checkout scm
  13. }
  14. stage('Stop Containers')
  15. {
  16. sh 'docker ps | grep "workflow_" -v | awk -F " " \'{ if(NR>1) print $1}\' |xargs docker kill |xargs docker rm || true'
  17. sh 'docker system prune -f'
  18. }
  19. stage('SonarQube analysis')
  20. {
  21. def scannerHome = tool 'SonarQube Scanner 2.8';
  22. withSonarQubeEnv('SonarQube')
  23. {
  24. // If you have configured more than one global server connection, you can specify its name
  25. sh "${scannerHome}/bin/sonar-scanner -Dsonar.login=admin -Dsonar.password=SonarQubeCodeFuriousDucks2020"
  26. }
  27. }
  28. stage('Test')
  29. {
  30. dir("${env.WORKSPACE}/angular-client")
  31. {
  32. sh 'npm i @angular-devkit/build-angular'
  33. try
  34. {
  35. sh 'npm run test-ci'
  36. }
  37. catch(err)
  38. {
  39. sh 'echo TEST FAILED'
  40. junit 'target/surefire-reports/TESTS-TestSuite.xml/*.xml'
  41. throw err
  42. }
  43. /*def karma = docker.image('trion/ng-cli-karma')
  44. karma.pull()
  45. try
  46. {
  47. karma.run(' -u $(id -u) -v ${WORKSPACE}:/app trion/ng-cli-karma ')
  48. karma.inside
  49. {
  50. sh 'npm install'
  51. try
  52. {
  53. sh ('./node_modules/karma/bin/karma start karma.conf.js')
  54. }
  55. catch(err)
  56. {
  57. sh 'echo TEST FAILED'
  58. step([$class: 'JUnitResultArchiver', testResults: 'target/surefire-reports/TESTS-TestSuite.xml/*.xml', healthScaleFactor: 1.0])
  59. throw err
  60. }
  61. sh 'echo DO SOMETHING ELSE AFTER TEST'
  62. }
  63. sh 'ls -al '
  64. }
  65. catch(err)
  66. {
  67. sh 'echo RUN DOCKER FAILED'
  68. throw err
  69. }*/
  70. }
  71. }
  72. stage('Build Angular PreProduction')
  73. {
  74. //sh 'docker build -f build/docker/apache/Dockerfile -t sample-app:0.1 angular-client/dist'
  75. //sh 'docker run -d -p 8080:80 --name sample-app sample-app:0.1'
  76. //imageApache=docker.build('server-apache-dev', '--no-cache -f build/docker/apache/Dockerfile .')
  77. //containerApache=imageApache.run('-p 8080:80')
  78. dir("${env.WORKSPACE}/angular-client")
  79. {
  80. //sh 'npm install'
  81. //sh 'npm run-script build'
  82. //sh 'npm install -g firebase-tools'
  83. //sh 'firebase deploy --token 1//034mfWw9ZUdOKCgYIARAAGAMSNwF-L9Ir-Ql0JG0M9RA3PJStufMSA-2gEVAiyiu6_plL9KQdHn3kuIiNGBVuDQpotPgjltv4nWc'
  84. }
  85. }
  86. def imageApache = stage("Build apache preprod")
  87. {
  88. docker.build("server-apache-preprod", "--no-cache --label traefik.enable=true --label traefik.http.routers.server-apache-preprod.rule='Host(`angular-preprod.foodgame.fr`)' --label traefik.http.routers.server-apache-preprod.entrypoints=websecure --label traefik.http.routers.server-apache-preprod.tls.certresolver=myresolver -f build/docker/httpd/Dockerfile .")
  89. }
  90. def imageExpress = stage("Build express preprod")
  91. {
  92. docker.build("server-express-preprod", "--no-cache -f express-server/Dockerfile express-server")
  93. }
  94. /*stage("Run Container express preprod")
  95. {
  96. containerSql=imageExpress.run("--name server-express-preprod -v /home/projet/fatboar/${e}/mysql:/var/lib/mysql --network=web")
  97. }
  98. stage("Run Container apache preprod")
  99. {
  100. containerApache=imageApache.run("--name server-apache-preprod --link server-mysql-preprod:mysql --network=web")
  101. }*/
  102. stage("Push preprod images to nexus")
  103. {
  104. /*docker.withRegistry('http://localhost:8083','885ef60c-9352-489a-bd1c-e4b695747c21')
  105. {
  106. imageApache.push('latest')
  107. imageExpress.push('latest')
  108. }*/
  109. }
  110. stage('Build Docker MEAN Stack(PreProduction Deployment)')
  111. {
  112. sh 'docker-compose -v'
  113. sh 'docker-compose build'
  114. sh 'docker-compose up -d'
  115. }
  116. stage('Fin du Pipeline')
  117. {
  118. sh 'echo "Félicitation tout c\'est bien déroulé!"'
  119. }
  120. /*stage('Waiting Container') {
  121. waitUntil {
  122. try {
  123. sh "docker exec ${containerApache.id} php -v"
  124. return true
  125. } catch (Exception $e) {
  126. return false
  127. }
  128. }
  129. waitUntil {
  130. try {
  131. sh "docker exec ${containerMySQL.id} mysql --version"
  132. return true
  133. } catch(Exception $e) {
  134. return false
  135. }
  136. }
  137. }*/
  138. }
  139. // node{
  140. // stage('checkout'){
  141. // deleteDir()
  142. // checkout scm
  143. // }
  144. // stage('Stop Container'){
  145. // //sh 'docker ps | grep "workflow_" -v | awk -F " " \'{if(NR>1)print $1}\' | xargs docker killdo | xargs docker rm || true'
  146. // //sh 'docker system prune -f'
  147. // sh 'docker ps | grep "workflow_" -v | awk -F " " \'{ if(NR>1) print $1}\' |xargs docker kill |xargs docker rm || true'
  148. // sh 'docker system prune -f'
  149. // }
  150. // /*stage('Build Container')
  151. // {
  152. // imageApache=docker.build('server-apache-dev', '--no-cache -f build/docker/apache/Dockerfile .')
  153. // imageSql=docker.build('server-mysql-dev', '--no-cache -f build/docker/mysql/Dockerfile .')
  154. // containerMysql=imageSql.run('--name server-mysql-dev')
  155. // containerApache=imageApache.run('-p 8080:80 --link server-mysql-dev:mysql')
  156. // }*/
  157. // def imageApache = stage("Build apache preprod")
  158. // {
  159. // docker.build("server-apache-preprod", "--no-cache --label traefik.enable=true --label traefik.http.routers.server-apache-preprod.rule='Host(`angular-preprod.foodgame.fr`)' --label traefik.http.routers.server-apache-preprod.entrypoints=websecure --label traefik.http.routers.server-apache-preprod.tls.certresolver=myresolver -f build/docker/httpd/Dockerfile .")
  160. // }
  161. // stage("Run Container apache preprod")
  162. // {
  163. // containerApache=imageApache.run("--name server-apache-preprod --link server-mysql-preprod:mysql --network=web")
  164. // }
  165. // /*stage('Waiting Container'){
  166. // waitUntil{
  167. // try{
  168. // sh "docker exec ${containerApache.id} php -v"
  169. // return true
  170. // } catch(Exception $e){
  171. // return false
  172. // }
  173. // }
  174. // }*/
  175. // stage('stage 1bis'){
  176. // sh 'docker -v'
  177. // sh 'docker ps'
  178. // }
  179. // stage('stage 2bis'){
  180. // sh 'ls -ls'
  181. // }
  182. // stage('SonarQube analysis') {
  183. // def scannerHome = tool 'sonar_scanner';
  184. // withSonarQubeEnv('FatboarSonar')
  185. // {
  186. // // If you have configured more than one global server connection, you can specify its name
  187. // //sh "${scannerHome}/bin/sonar-scanner -Dsonar.login=admin -Dsonar.password=admin" }
  188. // sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=Fatboar_project -Dsonar.sources=. -Dsonar.host.url=https://sonarqube.foodgame.fr -Dsonar.login=admin -Dsonar.password=admin"
  189. // }
  190. // }
  191. // }