diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000000..3bfffa3d7e --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,257 @@ +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('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('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 "Packaging woker app" + dir('worker'){ + sh 'mvn package -DskipTests' + archiveArtifacts artifacts: '**/target/*.jar', fingerprint:true + + } + } + } + + + stage('worker-docker-package') { + agent any + when{ + changeset "**/worker/**" + } + steps{ + echo "Packaging worker app with docker" + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerlogin'){ + def workerImage = docker.build("cziaul/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('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('result'){ + sh 'npm install' + sh 'npm test' + } + + } + } + stage('result-docker-package') { + agent any + when{ + changeset "**/result/**" + branch 'master' + } + steps{ + echo "Packaging worker result app with docker" + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerlogin'){ + def workerImage = docker.build("cziaul/result:v${env.BUILD_ID}", "./result") + workerImage.push() + workerImage.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('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 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('vote-docker-package') { + agent any + when{ + changeset "**/vote/**" + branch 'master' + } + steps{ + echo "Packaging worker vote app with docker" + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerlogin'){ + def workerImage = docker.build("cziaul/vote:v${env.BUILD_ID}", "./vote") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + } + } + + + stage('Sonarqube') { + agent any + environment{ + sonarpath = tool 'SonarScanner' + } + steps { + echo 'Running Sonarqube Analysis..' + withSonarQubeEnv('sonar') { + sh "${sonarpath}/bin/sonar-scanner -Dproject.settings=sonar-project.properties" + } + } + } + + stage('deploy to dev') { + + agent any + + when{ + branch 'master' + } + steps{ + echo "Deploy instavote app with docker compose" + sh 'docker-compose up -d' + } + } + + + } + post{ + always{ + echo "Pipeline for instavote is completed.." + } + failure{ + slackSend(channel: "#jenkinswithslack", message: "Build Failed - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + success{ + slackSend(channel: "#jenkinswithslack", message: "Build Succeeded - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + + } +} diff --git a/README.md b/README.md index b8ad8a94af..3e8302df6b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ Example Voting App ========= +This is a sample testing webhook testy + +This is a test for mono pipline + Getting started --------------- diff --git a/README1.md b/README1.md new file mode 100644 index 0000000000..b6116239d3 --- /dev/null +++ b/README1.md @@ -0,0 +1 @@ +This is a test Readme2 diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000000..9de271e143 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,45 @@ +version: "3.7" + +volumes: + db-data: + +networks: + instavote: + driver: bridge + + +services: + vote: + image: cziaul/vote:master + 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 + result: + image: cziaul/result:master + ports: + - 5001:4000 + depends_on: + - db + networks: + - instavote + worker: + image: cziaul/worker:master + depends_on: + - redis + - db + networks: + - instavote diff --git a/e2e/.env b/e2e/.env index ba78b2ea4c..c45a7cb0b4 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=cziaul/vote:master +WORKER_IMAGE=cziaul/worker:master +RESULT_IMAGE=cziaul/result:master diff --git a/result/README.md b/result/README.md new file mode 100644 index 0000000000..3c4470fb7a --- /dev/null +++ b/result/README.md @@ -0,0 +1 @@ +This is to test Mono Pipeline diff --git a/result/jenkinsfile b/result/jenkinsfile new file mode 100644 index 0000000000..b17c01de73 --- /dev/null +++ b/result/jenkinsfile @@ -0,0 +1,72 @@ +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{ + changeset "**/result/**" + branch 'master' + } + steps{ + echo "Packaging worker result app with docker" + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerlogin'){ + def workerImage = docker.build("cziaul/result:v${env.BUILD_ID}", "./result") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + } + } + + } + post{ + always{ + echo "Pipeline for result is completed.." + } + failure{ + slackSend(channel: "jenkinswithslackfornodejs", message: "Build Failed - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + success{ + slackSend(channel: "jenkinswithslackfornodejs", message: "Build Succeeded - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + + } +} diff --git a/result/test/mock.test.js b/result/test/mock.test.js index f99dfdae97..0e924e180c 100644 --- a/result/test/mock.test.js +++ b/result/test/mock.test.js @@ -4,7 +4,7 @@ describe('mock test 1', () => { it('unit test 1', () => { expect(true).to.be.true; }); -}); +}); describe('mock test 2', () => { @@ -27,3 +27,8 @@ describe('mock test 4', () => { }); +describe('mock test 5', () => { + it('unit test 5', () => { + expect(true).to.be.true; + }); +}); diff --git a/vote/README.md b/vote/README.md new file mode 100644 index 0000000000..22879b3098 --- /dev/null +++ b/vote/README.md @@ -0,0 +1 @@ +This is to Test vote for Mono Pipeline diff --git a/vote/app.py b/vote/app.py index db5ff2e4d8..a4a8b6515c 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,10 +5,10 @@ import random import json -option_a = os.getenv('OPTION_A', "Emacs") -option_b = os.getenv('OPTION_B', "Vi") +option_a = os.getenv('OPTION_A', "Travis") +option_b = os.getenv('OPTION_B', "CircleCI") hostname = socket.gethostname() -version = 'v1' +version = 'v2' app = Flask(__name__) diff --git a/vote/jenkinsfile b/vote/jenkinsfile new file mode 100644 index 0000000000..0b6c7a3bdd --- /dev/null +++ b/vote/jenkinsfile @@ -0,0 +1,78 @@ +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('docker-package') { + agent any + when{ + changeset "**/vote/**" + branch 'master' + } + steps{ + echo "Packaging worker vote app with docker" + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerlogin'){ + def workerImage = docker.build("cziaul/vote:v${env.BUILD_ID}", "./vote") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + } + } + + } + post{ + always{ + echo "Pipeline for vote is completed.." + } + failure{ + slackSend(channel: "jenkinswithslackforvote", message: "Build Failed - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + success{ + slackSend(channel: "jenkinswithslackforvote", message: "Build Succeeded - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + + } +} diff --git a/vote/tests/test_frontend.py b/vote/tests/test_frontend.py index 5e3d37a3d1..4eaf5fe8b9 100644 --- a/vote/tests/test_frontend.py +++ b/vote/tests/test_frontend.py @@ -22,7 +22,7 @@ def test_version_is_set(self): assert 'Version' in str(result.data) def test_processed_by_is_set(self): - """Assert that processed by string is set""" + """Assert that processed by string is set little change here""" result = self.app.get('/') assert 'Processed by' in str(result.data) diff --git a/worker/Dockerfile b/worker/Dockerfile new file mode 100644 index 0000000000..5c76cf5e26 --- /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 * + +CMD ["java", "-jar", "/run/worker.jar"] diff --git a/worker/DockerfileTest b/worker/DockerfileTest new file mode 100644 index 0000000000..5c76cf5e26 --- /dev/null +++ b/worker/DockerfileTest @@ -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 * + +CMD ["java", "-jar", "/run/worker.jar"] diff --git a/worker/Jenkinsfile b/worker/Jenkinsfile new file mode 100644 index 0000000000..4cabd08b48 --- /dev/null +++ b/worker/Jenkinsfile @@ -0,0 +1,104 @@ +pipeline { + + 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 "Packaging worker app" + dir('worker'){ + sh 'mvn package -DskipTests' + archiveArtifacts artifacts: '**/target/*.jar', fingerprint:true + + } + } + } + + stage('docker-package') { + agent any + when{ + changeset "**/worker/**" + branch 'master' + + } + steps{ + echo "Packaging worker app with docker" + script{ + docker.withRegistry('https://index.docker.io/v1/', 'dockerlogin'){ + def workerImage = docker.build("cziaul/worker:v${env.BUILD_ID}", "./worker") + workerImage.push() + workerImage.push("${env.BRANCH_NAME}") + } + } + } + } + + } + post{ + always{ + echo "Pipeline for worker is completed.." + } + failure{ + slackSend(channel: "#jenkinswithslack", message: "Build Failed - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + success{ + slackSend(channel: "#jenkinswithslack", message: "Build Succeeded - ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)") + } + + } +} diff --git a/worker/README.md b/worker/README.md new file mode 100644 index 0000000000..3cb975c1a6 --- /dev/null +++ b/worker/README.md @@ -0,0 +1,8 @@ +## Wroker Java App Test2 +*Build Status +[![Build Status](http://10.0.0.144:8080/buildStatus/icon?job=instavote%2Fworker-build)](http://10.0.0.144:8080/job/instavote/job/worker-build/) + +*Build Status by smee +[![Build Status](https://smee.io/mM7UhZMm1usCWU/buildStatus/icon?job=instavote%2Fworker-build)](https://smee.io/mM7UhZMm1usCWU/job/instavote/job/worker-build/) + + diff --git a/worker/src/test/java/worker/UnitWorker.java b/worker/src/test/java/worker/UnitWorker.java index cb5d513961..9dbb7b1d0a 100644 --- a/worker/src/test/java/worker/UnitWorker.java +++ b/worker/src/test/java/worker/UnitWorker.java @@ -1,10 +1,10 @@ import org.junit.jupiter.api.Test; - + class UnitWorker { - + @Test void sample1() { - + } @@ -22,4 +22,10 @@ void sample3() { void sample4() { } + + @Test + void sample4() { + + } + }