Skip to content
221 changes: 221 additions & 0 deletions JenkinsFile
Original file line number Diff line number Diff line change
@@ -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!'
}

}
}
52 changes: 52 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -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
7 changes: 7 additions & 0 deletions worker/Dockerfile
Original file line number Diff line number Diff line change
@@ -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
73 changes: 73 additions & 0 deletions worker/jenkinsfile
Original file line number Diff line number Diff line change
@@ -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'
}
}
}