You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/02/14 06:53:56 UTC

[james-project] 06/18: JAMES-3500 Reuse Cassandra image accross maven projects

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

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

commit f3eb2cf71dd1ebe7c02cf4269c11ca60b86ff262
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sat Feb 13 09:14:26 2021 +0700

    JAMES-3500 Reuse Cassandra image accross maven projects
    
     - Set up a unique BUILD_ID env variable in Jenkinsfile
     - Append it to the Cassandra image
---
 Jenkinsfile                                        |  1 +
 .../james/backends/cassandra/DockerCassandra.java  | 31 +++++++++++++++-------
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 05f6645..b027b18 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -32,6 +32,7 @@ pipeline {
 
     environment {
         // ... setup any environment variables ...
+        BUILD_ID = UUID.randomUUID().toString()
         MVN_LOCAL_REPO_OPT = '-Dmaven.repo.local=.repository'
         MVN_TEST_FAIL_IGNORE = '-Dmaven.test.failure.ignore=true'
         MVN_SHOW_TIMESTAMPS="-Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS"
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java
index 3d18326..b5be0eb 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java
@@ -19,10 +19,11 @@
 
 package org.apache.james.backends.cassandra;
 
-import com.github.dockerjava.api.async.ResultCallback;
-import com.github.dockerjava.api.command.EventsCmd;
-import com.github.dockerjava.api.model.Event;
-import com.github.dockerjava.api.model.EventType;
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.Optional;
+import java.util.UUID;
+
 import org.apache.james.backends.cassandra.init.ClusterFactory;
 import org.apache.james.backends.cassandra.init.KeyspaceFactory;
 import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration;
@@ -40,12 +41,12 @@ import org.testcontainers.images.builder.dockerfile.DockerfileBuilder;
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.async.ResultCallback;
+import com.github.dockerjava.api.command.EventsCmd;
+import com.github.dockerjava.api.model.Event;
+import com.github.dockerjava.api.model.EventType;
 import com.google.common.collect.ImmutableMap;
 
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.UUID;
-
 public class DockerCassandra {
 
     /**
@@ -115,6 +116,18 @@ public class DockerCassandra {
         DockerfileBuilder applyStep(DockerfileBuilder builder);
     }
 
+    /**
+     * @return a string to append to image names in order to avoid conflict with concurrent builds
+     */
+    private static String buildSpecificImageDiscriminator() {
+        // If available try to access the image shared by all maven projects
+        // This avoids rebuilding one for each maven surefire fork.
+        // BUILD_ID should be set by the execution context, here JenkinsFile
+        return Optional.ofNullable(System.getenv("BUILD_ID"))
+            // Default to an image discriminator specific to this JVM
+            .orElse(UUID.randomUUID().toString());
+    }
+
     private static final int CASSANDRA_PORT = 9042;
     private static final int CASSANDRA_MEMORY = 650;
 
@@ -126,7 +139,7 @@ public class DockerCassandra {
 
     @SuppressWarnings("resource")
     public DockerCassandra() {
-        this("cassandra_3_11_3-"+ UUID.randomUUID().toString(), AdditionalDockerFileStep.IDENTITY);
+        this("cassandra_3_11_3-" + buildSpecificImageDiscriminator(), AdditionalDockerFileStep.IDENTITY);
     }
 
     private DockerCassandra(String imageName, AdditionalDockerFileStep additionalSteps) {


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org