diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000000..05b469c74b --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,253 @@ +pipeline { + agent none + stages { + stage('worker Build') { + agent { + docker { + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + + } + when { + changeset '**/worker/**' + } + steps { + echo 'Compiling worker app' + dir(path: 'worker') { + sh 'mvn compile' + } + + } + } + + stage('worker Test') { + 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('worker Package') { + agent { + docker { + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + + } + when { + branch 'master' + changeset '**/worker/**' + } + steps { + echo 'package worker app' + dir(path: 'worker') { + sh 'mvn package -DskipTests' + } + + } + } + + stage('worker docker-package') { + agent any + when { + branch 'master' + changeset '**/worker/**' + } + steps { + echo 'Package worker app' + script { + docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') { + def workerImage = docker.build("donquijotedelasnubes/worker:v${env.BUILD_ID}", "./worker") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + + } + } + + stage('result build') { + agent { + docker { + image 'node:8.16.0-alpine' + } + + } + when { + changeset '**/result/**' + } + steps { + echo 'compiling result app' + dir(path: 'result') { + sh 'npm install' + } + + } + } + + stage('result test') { + agent { + docker { + image 'node:8.16.0-alpine' + } + + } + when { + changeset '**/result/**' + } + steps { + echo 'running unit tests on result app' + dir(path: 'result') { + sh 'npm install' + sh 'npm test' + } + + } + } + + stage('result docker-package') { + agent any + when { + branch 'master' + changeset '**/result/**' + } + steps { + echo 'Package result app' + script { + docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') { + def resultImage = docker.build("donquijotedelasnubes/result:v${env.BUILD_ID}", "./result") + resultImage.push() + resultImage.push("${env.BRANCH_NAME}") + } + } + + } + } + + stage('vote build') { + agent { + docker { + image 'python:2.7.16-slim' + args '--user root' + } + + } + when { + changeset '**/vote/**' + } + steps { + echo 'compiling vote app' + dir(path: 'vote') { + sh 'pip install -r requirements.txt' + } + + } + } + + stage('vote test') { + agent { + docker { + image 'python:2.7.16-slim' + args '--user root' + } + + } + when { + changeset '**/vote/**' + } + steps { + echo 'running unit tests on result app' + dir(path: 'vote') { + sh 'pip install -r requirements.txt' + sh 'nosetests -v' + } + + } + } + + stage('vote docker-package') { + agent any + when { + branch 'master' + changeset '**/vote/**' + } + steps { + echo 'Package vote app' + script { + docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') { + def voteImage = docker.build("donquijotedelasnubes/vote:v${env.BUILD_ID}", "./vote") + voteImage.push() + voteImage.push("${env.BRANCH_NAME}") + } + } + + } + } + + stage('Sonarqube') { + agent any +/* when{ + branch 'master' + } +*/ + tools { + jdk "JDK11" // the name you have given the JDK installation in Global Tool Configuration + } + + environment{ + sonarpath = tool 'SonarScanner' + } + + steps { + echo 'Running Sonarqube Analysis..' + withSonarQubeEnv('sonar-instavote') { + sh "${sonarpath}/bin/sonar-scanner -Dproject.settings=sonar-project.properties -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=86400" + } + } + } + + + stage("Quality Gate") { + agent any + steps { + timeout(time: 5, unit: 'MINUTES') { + // Parameter indicates whether to set pipeline to UNSTABLE if Quality Gate fails + // true = set pipeline to UNSTABLE, false = don't + waitForQualityGate abortPipeline: true + } + } + } + + stage('depoly to dev') { + agent any + when { + branch 'master' + } + steps { + sh 'docker-compose up -d' + } + } + + } + post { + always { + echo 'pipeline for end to end application complete' + } + + } +} diff --git a/README.md b/README.md index b8ad8a94af..a16cbf12f4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ Example Voting App ========= +this is a sample isntavote application + Getting started --------------- diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000000..0ed1300894 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,50 @@ +version: "3.7" + +volumes: + db-data: + +networks: + instavote: + driver: bridge + +services: + vote: + image: donquijotedelasnubes/vote:master + ports: + - 5045:80 + depends_on: + - redis + networks: + - instavote + + redis: + image: redis:alpine + networks: + - instavote + + db: + image: postgres:9.4 + volumes: + - "db-data:/var/lib/postgresql/data" + environment: + POSTGRES_HOST_AUTH_METHOD: trust + networks: + - instavote + + + result: + image: donquijotedelasnubes/result:master + ports: + - 5046:4000 + depends_on: + - db + networks: + - instavote + + worker: + image: donquijotedelasnubes/worker:master + depends_on: + - redis + - db + networks: + - instavote diff --git a/e2e/.env b/e2e/.env index ba78b2ea4c..99a4f7e2cf 100644 --- a/e2e/.env +++ b/e2e/.env @@ -1,3 +1,3 @@ -VOTE_IMAGE=lfs261/vote:master -WORKER_IMAGE=lfs261/worker:master -RESULT_IMAGE=lfs261/result:master +VOTE_IMAGE=donquijotedelasnubes/vote:master +WORKER_IMAGE=donquijotedelasnubes/worker:master +RESULT_IMAGE=donquijotedelasnubes/result:master diff --git a/result/Jenkinsfile b/result/Jenkinsfile new file mode 100644 index 0000000000..ef32fa4c9b --- /dev/null +++ b/result/Jenkinsfile @@ -0,0 +1,63 @@ +pipeline{ + agent none + + stages{ + stage('build'){ + agent{ + docker{ + image 'node:8.16.0-alpine' + } + } + when{ + changeset "**/result/**" + } + steps{ + echo "compiling result app" + dir('result'){ + sh 'npm install' + } + } + } + + stage('test'){ + agent{ + docker{ + image 'node:8.16.0-alpine' + } + } + when{ + changeset "**/result/**" + } + steps{ + echo 'running unit tests on result app' + dir('result'){ + sh 'npm install' + sh 'npm test' + } + } + } + stage('docker-package') { + agent any + when{ + branch 'master' + changeset "**/result/**" + } + steps { + echo 'Package result app' + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') { + def resultImage = docker.build("donquijotedelasnubes/result:v${env.BUILD_ID}", "./result") + resultImage.push() + resultImage.push("${env.BRANCH_NAME}") + } + } + } + } + } + post{ + always{ + echo 'pipeline for result complete' + } + } +} + diff --git a/result/README.md b/result/README.md new file mode 100644 index 0000000000..8fde400f42 --- /dev/null +++ b/result/README.md @@ -0,0 +1,7 @@ +## this is a readme file with the Jenkins badges + + +for Build +[![Build Status](http://157.230.222.153:8080/buildStatus/icon?job=result-build)](http://157.230.222.153:8080/job/result-build/) +and for Test +[![Build Status](http://157.230.222.153:8080/buildStatus/icon?job=result-test)](http://157.230.222.153:8080/job/result-test/) diff --git a/result/test/mock.test.js b/result/test/mock.test.js index f99dfdae97..793ee9f305 100644 --- a/result/test/mock.test.js +++ b/result/test/mock.test.js @@ -26,4 +26,9 @@ describe('mock test 4', () => { }); }); +describe('mock test 5', () => { + it('unit test 5', () => { + expect(true).to.be.true; + }); +}); diff --git a/sonar-project.properties b/sonar-project.properties index fa91ad96cc..c9b3ce533e 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,6 +1,6 @@ # Uncomment and update Org matching your configurations on Sonarcloud -#sonar.organization=your-org -sonar.projectKey=your-org_example-voting-app +sonar.organization=quieroser +sonar.projectKey=quieroSer_example-voting-app sonar.projectName=Instavote AIO sonar.projectVersion=1.0 # Comma-separated paths to directories with sources (required) diff --git a/vote/Jenkinsfile b/vote/Jenkinsfile new file mode 100644 index 0000000000..a3b046b84b --- /dev/null +++ b/vote/Jenkinsfile @@ -0,0 +1,77 @@ +pipeline{ + agent none + + stages{ + stage('build'){ + agent{ + docker{ + image 'python:2.7.16-slim' + args '--user root' + } + } + when{ + changeset "**/vote/**" + } + steps{ + echo "compiling vote app" + dir('vote'){ + sh 'pip install -r requirements.txt' + } + } + } + + stage('test'){ + agent{ + docker{ + image 'python:2.7.16-slim' + args '--user root' + } + } + when{ + changeset "**/vote/**" + } + steps{ + echo 'running unit tests on vote app' + dir('vote'){ + sh 'pip install -r requirements.txt' + sh 'nosetests -v' + } + } + } + stage('vote integration'){ + agent any + when{ + changeset "**/vote/**" + branch 'master' + } + steps{ + echo 'running integration tests on vote app' + dir('vote'){ + sh 'integration_test.sh' + } + } + stage('docker-package') { + agent any + when{ + branch 'master' + changeset "**/vote/**" + } + steps { + echo 'Package vote app' + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') { + def voteImage = docker.build("donquijotedelasnubes/vote:v${env.BUILD_ID}", "./vote") + voteImage.push() + voteImage.push("${env.BRANCH_NAME}") + } + } + } + } + } + post{ + always{ + echo 'pipeline for vote complete' + } + } +} + diff --git a/vote/README.md b/vote/README.md new file mode 100644 index 0000000000..253f60db67 --- /dev/null +++ b/vote/README.md @@ -0,0 +1,8 @@ +## this is a readme file with the Jenkins badges + + + +for Build +[![Build Status](http://157.230.222.153:8080/buildStatus/icon?job=result-build)](http://157.230.222.153:8080/job/result-build/) +and for Test +[![Build Status](http://157.230.222.153:8080/buildStatus/icon?job=result-test)](http://157.230.222.153:8080/job/result-test/) diff --git a/worker/Dockerfile b/worker/Dockerfile new file mode 100644 index 0000000000..4ae863ce66 --- /dev/null +++ b/worker/Dockerfile @@ -0,0 +1,11 @@ +FROM maven:3.6.1-jdk-8-alpine + +WORKDIR /app + +COPY . . + +RUN mvn package -DskipTests && \ + mv target/worker-jar-with-dependencies.jar /run/worker.jar && \ + rm -rf /app/* + +CMD java -jar /run/worker.jar diff --git a/worker/Jenkinsfile b/worker/Jenkinsfile new file mode 100644 index 0000000000..0612f4f17d --- /dev/null +++ b/worker/Jenkinsfile @@ -0,0 +1,92 @@ +pipeline { +/* agent { + docker{ + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + } +*/ + + agent none + stages { + stage('Build') { + agent { + docker{ + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + } + when{ + changeset "**/worker/**" + } + steps { + echo 'Compiling worker app' + dir('worker'){ + sh 'mvn compile' + } + } + } + stage('Test') { + 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('worker'){ + sh 'mvn clean test' + } + } + } + stage('Package'){ + agent { + docker{ + image 'maven:3.6.1-jdk-8-alpine' + args '-v $HOME/.m2:/root/.m2' + } + } + when{ + branch 'master' + changeset "**/worker/**" + } + steps{ + echo "package worker app" + dir('worker'){ + sh 'mvn package -DskipTests' + } + } + } + + stage('docker-package') { + agent any + when{ + branch 'master' + changeset "**/worker/**" + } + steps { + echo 'Package worker app' + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') { + def workerImage = docker.build("donquijotedelasnubes/worker:v${env.BUILD_ID}", "./worker") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + } + } + } + + post { + always{ + echo 'Build pipeline run is completed.' + } + } +} + + + diff --git a/worker/README.md b/worker/README.md new file mode 100644 index 0000000000..2ba4941630 --- /dev/null +++ b/worker/README.md @@ -0,0 +1,12 @@ +## worker java app + + + + +http://157.230.222.153:8080/buildStatus/icon?job=instavote%2Fworker-build + + +http://157.230.222.153:8080/buildStatus/icon?job=instavote%2Fwroker-test + + +http://157.230.222.153:8080/buildStatus/icon?job=instavote%2Fworker-package diff --git a/worker/src/test/java/worker/UnitWorker.java b/worker/src/test/java/worker/UnitWorker.java index cb5d513961..3806737025 100644 --- a/worker/src/test/java/worker/UnitWorker.java +++ b/worker/src/test/java/worker/UnitWorker.java @@ -21,5 +21,9 @@ void sample3() { @Test void sample4() { + } + @Test + void sample5() { + } }