From cc043a4f27b2f330956903b8b1ab52c381b143f3 Mon Sep 17 00:00:00 2001 From: Mossab Alyousif Date: Wed, 27 Apr 2022 23:21:11 +0400 Subject: [PATCH 1/7] create jekins pipelinne with three stages only fisrt complete --- worker/jenkinsfile | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 worker/jenkinsfile diff --git a/worker/jenkinsfile b/worker/jenkinsfile new file mode 100644 index 0000000000..06c387545a --- /dev/null +++ b/worker/jenkinsfile @@ -0,0 +1,38 @@ +pipeline { + agent any + + tools { + maven 'Maven 3.8.5' + } + + stages { + stage('build') { + steps { + echo 'building...' + dir('worker'){ + sh 'mvn compile' + } + + } + + // post { + // // If Maven was able to run the tests, even if some of the test + // // failed, record the test results and archive the jar file. + // success { + // junit '**/target/surefire-reports/TEST-*.xml' + // archiveArtifacts 'target/*.jar' + // } + // } + } + stage('test') { + steps { + echo 'step 2' + } + } + stage('package') { + steps { + echo 'step 3' + } + } + } +} From 20d193252c904b9561ecfb6d12d11643be2e8a94 Mon Sep 17 00:00:00 2001 From: Mossab Alyousif Date: Wed, 27 Apr 2022 23:56:56 +0400 Subject: [PATCH 2/7] complete the 3 stages pipeline --- worker/jenkinsfile | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/worker/jenkinsfile b/worker/jenkinsfile index 06c387545a..8ab3c1df2d 100644 --- a/worker/jenkinsfile +++ b/worker/jenkinsfile @@ -26,13 +26,24 @@ pipeline { } stage('test') { steps { - echo 'step 2' + echo 'testing...' + dir('worker'){ + sh 'mvn clean test' + } } } stage('package') { steps { - echo 'step 3' + echo 'package' + dir('worker'){ + sh 'mvn package -DskipTests' + } } } } + post{ + always{ + echo 'post always' + } + } } From c04225921059462dba712a98b2b1514432391d45 Mon Sep 17 00:00:00 2001 From: Mossab Alyousif Date: Thu, 28 Apr 2022 20:26:42 +0400 Subject: [PATCH 3/7] edit pipeline --- worker/jenkinsfile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/worker/jenkinsfile b/worker/jenkinsfile index 8ab3c1df2d..1400bdd0d5 100644 --- a/worker/jenkinsfile +++ b/worker/jenkinsfile @@ -7,6 +7,9 @@ pipeline { stages { stage('build') { + when{ + changset '**/worker/**' + } steps { echo 'building...' dir('worker'){ @@ -25,6 +28,9 @@ pipeline { // } } stage('test') { + when{ + changset '**/worker/**' + } steps { echo 'testing...' dir('worker'){ @@ -33,6 +39,10 @@ pipeline { } } stage('package') { + when{ + branch 'master' + changset '**/worker/**' + } steps { echo 'package' dir('worker'){ From aceb54b8fe570d69510d9cef9ba3f34cd7532b6b Mon Sep 17 00:00:00 2001 From: Mossab Alyousif Date: Thu, 28 Apr 2022 20:29:25 +0400 Subject: [PATCH 4/7] edit pipeline --- worker/jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/worker/jenkinsfile b/worker/jenkinsfile index 1400bdd0d5..a91719bd06 100644 --- a/worker/jenkinsfile +++ b/worker/jenkinsfile @@ -8,7 +8,7 @@ pipeline { stages { stage('build') { when{ - changset '**/worker/**' + changeset '**/worker/**' } steps { echo 'building...' @@ -29,7 +29,7 @@ pipeline { } stage('test') { when{ - changset '**/worker/**' + changeset '**/worker/**' } steps { echo 'testing...' @@ -41,7 +41,7 @@ pipeline { stage('package') { when{ branch 'master' - changset '**/worker/**' + changeset '**/worker/**' } steps { echo 'package' From 9f543eacabfb77fa2d38ac870c0e21cdf39ba393 Mon Sep 17 00:00:00 2001 From: Mossab Alyousif Date: Thu, 12 May 2022 22:08:14 +0400 Subject: [PATCH 5/7] add docker package --- worker/Dockerfile | 7 +++++++ worker/jenkinsfile | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 worker/Dockerfile create mode 100644 worker/jenkinsfile diff --git a/worker/Dockerfile b/worker/Dockerfile new file mode 100644 index 0000000000..ac1f6c98fa --- /dev/null +++ b/worker/Dockerfile @@ -0,0 +1,7 @@ +FROM maven:3.6.1-jdk-8-slim + WORKDIR /app + COPY . . + RUN mvn package && \ + mv target/worker-jar-with-dependencies.jar /run/worker.jar && \ + rm -rf /app/* + CMD java -jar /run/worker.jar \ No newline at end of file diff --git a/worker/jenkinsfile b/worker/jenkinsfile new file mode 100644 index 0000000000..06c387545a --- /dev/null +++ b/worker/jenkinsfile @@ -0,0 +1,38 @@ +pipeline { + agent any + + tools { + maven 'Maven 3.8.5' + } + + stages { + stage('build') { + steps { + echo 'building...' + dir('worker'){ + sh 'mvn compile' + } + + } + + // post { + // // If Maven was able to run the tests, even if some of the test + // // failed, record the test results and archive the jar file. + // success { + // junit '**/target/surefire-reports/TEST-*.xml' + // archiveArtifacts 'target/*.jar' + // } + // } + } + stage('test') { + steps { + echo 'step 2' + } + } + stage('package') { + steps { + echo 'step 3' + } + } + } +} From df10c2cbd2c712c19c04199beb45dc544a52214a Mon Sep 17 00:00:00 2001 From: Mossab Alyousif Date: Mon, 16 May 2022 16:23:20 +0400 Subject: [PATCH 6/7] add jenkins file --- worker/jenkinsfile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/worker/jenkinsfile b/worker/jenkinsfile index 06c387545a..65f972962d 100644 --- a/worker/jenkinsfile +++ b/worker/jenkinsfile @@ -24,6 +24,7 @@ pipeline { // } // } } + stage('test') { steps { echo 'step 2' @@ -34,5 +35,19 @@ pipeline { echo 'step 3' } } + + stage('docker-package'){ + steps{ + echo 'Packaging worker app with docker' + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerlogin') { + def workerImage = docker.build("initcron/worker:v${env.BUILD_ID}", "./worker") + workerImage.push() + workerImage.push("latest") + } + } + } + } + } } From 34e443f68b92b6f768af7ad04a2f91de201b34a9 Mon Sep 17 00:00:00 2001 From: Mossab Alyousif Date: Mon, 16 May 2022 16:51:35 +0400 Subject: [PATCH 7/7] add jenkins file --- JenkinsFile | 221 ++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yaml | 52 +++++++++++ 2 files changed, 273 insertions(+) create mode 100644 JenkinsFile create mode 100644 docker-compose.yaml diff --git a/JenkinsFile b/JenkinsFile new file mode 100644 index 0000000000..78bb8ae0af --- /dev/null +++ b/JenkinsFile @@ -0,0 +1,221 @@ +pipeline { + agent none + stages { + stage('build-worker') { + agent { + docker { + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + + } + when { + changeset '**/worker/**' + } + steps { + echo 'Compiling worker file' + dir(path: 'worker') { + sh 'mvn compile' + } + + } + } + + stage('build-vote') { + agent { + docker { + image 'python:2.7.16-slim' + args '-u root' + } + + } + when { + changeset '**/vote/**' + } + steps { + echo 'Building vote App...' + dir(path: 'vote') { + sh 'pip install -r requirements.txt' + } + + } + } + + stage('build-result') { + agent { + docker { + image 'node:8.16-alpine' + } + + } + when { + changeset '**/result/**' + } + steps { + echo 'Compiling result App...' + dir(path: 'result') { + sh 'npm install' + } + + } + } + + stage('test-worker') { + agent { + docker { + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + + } + when { + changeset '**/worker/**' + } + steps { + echo 'Running Unit Tests on Worker App' + dir(path: 'worker') { + sh 'mvn clean test ' + } + + } + } + + stage('test-vote') { + agent { + docker { + image 'python:2.7.16-slim' + args '-u root' + } + + } + when { + changeset '**/vote/**' + } + steps { + echo 'Running Nose Tests on vote App...' + dir(path: 'vote') { + sh 'pip install -r requirements.txt' + sh 'nosetests -v' + } + + } + } + + stage('test-result') { + agent { + docker { + image 'node:8.16-alpine' + } + + } + when { + changeset '**/result/**' + } + steps { + echo 'Running Unit Tests on result App...' + dir(path: 'result') { + sh 'npm install' + sh 'npm test' + } + + } + } + + stage('package-worker') { + agent { + docker { + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + + } + when { + changeset '**/worker/**' + } + steps { + echo 'Packaging Worker App' + dir(path: 'worker') { + sh 'mvn package -DskipTests' + archiveArtifacts(artifacts: '**/target/*.jar', fingerprint: true) + } + + } + } + + stage('docker-image-worker') { + agent any + when { + changeset '**/worker/**' + branch 'feature/monopipe' + } + steps { + echo 'Packaging worker app with docker' + script { + docker.withRegistry('https://index.docker.io/v1/', 'dockerhublogin') { + // hago el Build con el Dockerfile + def workerImage = docker.build("lrbono/worker:v${env.BUILD_NUMBER}", "./worker") + workerImage.push() + // Publico en Dockerhub + workerImage.push("${env.BRANCH_NAME}") + } + } + + } + } + + stage('docker-image-vote') { + agent any + when { + changeset '**/vote/**' + branch 'feature/monopipe' + } + steps { + echo 'Packaging vote app with docker' + script { + docker.withRegistry('https://index.docker.io/v1/', 'dockerhublogin') { + def workerImage = docker.build("lrbono/vote:v${env.BUILD_ID}", "./vote") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + + } + } + + stage('docker-image-result') { + agent any + when { + changeset '**/result/**' + branch 'feature/monopipe' + } + steps { + echo 'Packaging result app with docker' + script { + docker.withRegistry('https://index.docker.io/v1/', 'dockerhublogin') { + def workerImage = docker.build("lrbono/result:v${env.BUILD_ID}", "./result") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + + } + } + + stage('deploy-to-dev-from-blueocean') { + agent any + when{ + branch 'master' + } + steps { + sh 'docker-compose up -d' + } + } + + } + post { + always { + echo 'Pipeline for Instavote App is complete!' + } + + } +} \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000000..37447b88af --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,52 @@ +version: "3.8" + +volumes: + db-data: + +networks: + instavote: + driver: bridge + +services: + vote: + image: mossabalhariri/vote:latest + build: ./vote + ports: + - 5000:80 + depends_on: + - redis + networks: + - instavote + + redis: + image: redis:alpine + networks: + - instavote + + db: + image: postgres:9.4 + volumes: + - "db-data:/var/lib/postgresql/data" + networks: + - instavote + environment: + - POSTGRES_HOST_AUTH_METHOD=trust + + result: + image: mossabalhariri/result:latest + build: ./vote + ports: + - 5001:4000 + depends_on: + - db + networks: + - instavote + + worker: + image: mossabalhariri/worker:latest + build: ./vote + depends_on: + - redis + - db + networks: + - instavote \ No newline at end of file