This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new d16a0e1  JAMES-2724 Introduce Jenkinsfile for stress tests
d16a0e1 is described below

commit d16a0e14443fec1c7d6d65134aaa9c016f81bca7
Author: Antoine Duprat <adup...@linagora.com>
AuthorDate: Thu Mar 28 13:10:35 2019 +0100

    JAMES-2724 Introduce Jenkinsfile for stress tests
---
 JenkinsfileStressTests | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/JenkinsfileStressTests b/JenkinsfileStressTests
new file mode 100644
index 0000000..27f3786
--- /dev/null
+++ b/JenkinsfileStressTests
@@ -0,0 +1,88 @@
+// This file should respect the Jenkinsfile format describe here: 
+// https://jenkins.io/doc/book/pipeline/jenkinsfile/
+// 
+// It may be used by any Jenkins instance you own.
+//
+// In order to work properly, it requires the following parameters:
+// - SENARIO: the Gatling scenrio you want to play (ex. 
com.linagora.gatling.imap.scenario.ImapSimpleScenario)
+
+// Method in order to retry a command.
+// It may be used to wait for a service to be available.
+def maxRetries = 120
+def waitForCommandSuccess(command, maxRetries) {
+    def tries = 0;
+    while (tries++ < maxRetries) {
+        try {
+            sh command
+            return true
+        } catch (Exception e) {
+            if (tries >= maxRetries) {
+                throw new Exception("${maxRetries} tries exceeded. ${command} 
failed.", e)
+            }
+            sleep 1 SECONDS
+        }
+    }
+}
+
+pipeline {
+    agent { label 'my-slave' }
+
+    tools {
+        maven 'maven'
+    }
+
+    stages {
+        stage('Compile') {
+            steps {
+                sh "mvn clean install -T1C -DskipTests"
+            }
+        }
+        stage('Build image') {
+            steps {
+                script {
+                    docker.withTool('docker') {
+                        sh "cp 
server/container/guice/cassandra-rabbitmq-guice/target/james-server-cassandra-rabbitmq-guice.jar
 dockerfiles/run/guice/cassandra-rabbitmq/destination"
+                        sh "cp -r 
server/container/guice/cassandra-rabbitmq-guice/target/james-server-cassandra-rabbitmq-guice.lib
 dockerfiles/run/guice/cassandra-rabbitmq/destination"
+                        sh "cp 
server/container/cli/target/james-server-cli.jar 
dockerfiles/run/guice/cassandra-rabbitmq/destination"
+                        sh "cp -r 
server/container/cli/target/james-server-cli.lib 
dockerfiles/run/guice/cassandra-rabbitmq/destination"
+                        sh "docker build -t james_run 
dockerfiles/run/guice/cassandra-rabbitmq"
+                    }
+                }
+            }
+        }
+        stage('Start James') {
+            steps {
+                script {
+                    docker.withTool('docker') {
+                        sh "docker run -d --name=cassandra cassandra:3.11.3"
+                        sh "docker run -d --name=rabbitmq 
rabbitmq:3.7.7-management"
+                        sh "docker run -d --name=elasticsearch 
elasticsearch:2.4.6"
+
+                        sh "docker run -d --hostname HOSTNAME -p 25:25 -p 
8081:80 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 --link 
cassandra:cassandra --link rabbitmq:rabbitmq --link elasticsearch:elasticsearch 
--name james_run -t james_run"
+                        try {
+                            def jamesCliWithOptions = 'java -jar 
/root/james-cli.jar -h 127.0.0.1'
+                            waitForCommandSuccess("docker exec james_run 
${jamesCliWithOptions} listusers", maxRetries)
+                        } catch (Exception e) {
+                            sh "docker logs james_run"
+                        }
+                    }
+                }
+            }
+        }
+        stage('Run Gatling test') {
+            steps {
+                build job: 'Gatling job', parameters: [[$class: 
'StringParameterValue', name: 'SBT_ACTION', value: "gatling:testOnly  
${params.SCENARIO}"]]
+            }
+        }
+    }
+
+    post {
+        always {
+            script {
+                docker.withTool('docker') {
+                    sh "docker rm -f cassandra rabbitmq elasticsearch 
james_run"
+                }
+            }
+        }
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to