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 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..360251eef3 --- /dev/null +++ b/worker/jenkinsfile @@ -0,0 +1,73 @@ +pipeline { + agent any + + tools { + maven 'Maven 3.8.5' + } + + stages { + stage('build') { + + when{ + changeset '**/worker/**' + } + 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') { + when{ + changeset '**/worker/**' + } + steps { + echo 'testing...' + dir('worker'){ + sh 'mvn clean test' + } + } + } + stage('package') { + when{ + branch 'master' + changeset '**/worker/**' + } + steps { + echo 'package' + dir('worker'){ + sh 'mvn package -DskipTests' + } + } + } + } + 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") + } + } + } + } + + post{ + always{ + echo 'post always' + } + } +}