diff --git a/CHANGELOG.md b/CHANGELOG.md index b788aa32f7..6d32ae16db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ Usage: * Fix #205: JavaExecGenerator uses jkube/jkube-java-binary-s2i for Docker and S2I builds (#183) * Fix #206: WebAppGenerator with "/" path renames artifacts to ROOT.war * Fix #206: WebAppGenerator>TomcatAppSeverHandler uses quay.io/jkube/jkube-tomcat9-binary-s2i as base image +* Fix #210: WebAppGenerator>JettyAppSeverHandler uses quay.io/jkube/jkube-jetty9-binary-s2i as base image ### 1.0.0-alpha-3 (2020-05-06) * Fix #167: Add CMD for wildfly based applications diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java index 635133f9ba..79baf89bb2 100644 --- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java +++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/AppServerHandler.java @@ -63,14 +63,18 @@ public interface AppServerHandler { /** * Get the user to use. Return null if no specific user directive is required */ - String getUser(); + default String getUser() { + return null; + } /** * A list of ports which are exposed by the base image * * @return list of ports to expos */ - List exposedPorts(); + default List exposedPorts(){ + return Collections.singletonList("8080"); + } /** * A Map containing environment variables to add to the Image. @@ -88,7 +92,7 @@ default Map getEnv() { * @return the assembly name. */ default String getAssemblyName() { - return null; + return "deployments"; } /** diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/CustomAppServerHandler.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/CustomAppServerHandler.java index 765c37960e..c6d4821578 100644 --- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/CustomAppServerHandler.java +++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/CustomAppServerHandler.java @@ -57,6 +57,11 @@ public String getFrom() { return from; } + @Override + public String getAssemblyName() { + return null; + } + @Override public String getDeploymentDir() { return deploymentDir; diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/JettyAppSeverHandler.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/JettyAppSeverHandler.java index b0eb368d3a..8c0ee1fc5b 100644 --- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/JettyAppSeverHandler.java +++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/JettyAppSeverHandler.java @@ -14,8 +14,7 @@ package org.eclipse.jkube.generator.webapp.handler; import java.io.IOException; -import java.util.Arrays; -import java.util.List; +import java.util.stream.Stream; import org.eclipse.jkube.generator.api.GeneratorContext; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; @@ -27,45 +26,50 @@ */ public class JettyAppSeverHandler extends AbstractAppServerHandler { + private static final String JETTY_MAVEN_PLUGIN_ARTIFACT_ID = "jetty-maven-plugin"; - public JettyAppSeverHandler(GeneratorContext context) { - super("jetty", context); - } + public JettyAppSeverHandler(GeneratorContext context) { + super("jetty", context); + } - @Override - public boolean isApplicable() { - try { - return hasOneOf("glob:**/WEB-INF/jetty-web.xml", - "glob:**/META-INF/jetty-logging.properties") || - JKubeProjectUtil.hasPlugin(getProject(), "org.mortbay.jetty", "jetty-maven-plugin") || - JKubeProjectUtil.hasPlugin(getProject(), "org.eclipse.jetty", "jetty-maven-plugin"); - } catch (IOException exception) { - throw new IllegalStateException("Unable to scan output directory: ", exception); - } + @Override + public boolean isApplicable() { + try { + return isJettyWebApp() || hasJettyMavenPlugin(); + } catch (IOException exception) { + throw new IllegalStateException("Unable to scan output directory: ", exception); } + } - @Override - public String getFrom() { - return imageLookup.getImageName("jetty.upstream.docker"); - } + private boolean isJettyWebApp() throws IOException { + return hasOneOf( + "glob:**/WEB-INF/jetty-web.xml", + "glob:**/META-INF/jetty-logging.properties" + ); + } - @Override - public List exposedPorts() { - return Arrays.asList("8080","8778"); - } + private boolean hasJettyMavenPlugin() { + return Stream.of("org.mortbay.jetty", "org.eclipse.jetty") + .anyMatch(groupId -> JKubeProjectUtil.hasPlugin(getProject(), groupId, JETTY_MAVEN_PLUGIN_ARTIFACT_ID)); + } - @Override - public String getDeploymentDir() { - return "/deployments"; - } + @Override + public String getFrom() { + return imageLookup.getImageName("jetty.upstream.docker"); + } - @Override - public String getCommand() { - return "/opt/jetty/bin/deploy-and-run.sh"; - } + @Override + public String getDeploymentDir() { + return "/deployments"; + } - @Override - public String getUser() { - return "jboss:jboss:jboss"; - } + @Override + public String getCommand() { + return "/usr/local/s2i/run"; + } + + @Override + public boolean supportsS2iBuild() { + return true; + } } \ No newline at end of file diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/TomcatAppSeverHandler.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/TomcatAppSeverHandler.java index dde48c4681..254a5728f9 100644 --- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/TomcatAppSeverHandler.java +++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/TomcatAppSeverHandler.java @@ -14,8 +14,6 @@ package org.eclipse.jkube.generator.webapp.handler; import java.io.IOException; -import java.util.Collections; -import java.util.List; import java.util.stream.Stream; import org.eclipse.jkube.generator.api.GeneratorContext; @@ -53,31 +51,16 @@ public String getFrom() { return imageLookup.getImageName("tomcat.upstream.docker"); } - @Override - public List exposedPorts() { - return Collections.singletonList("8080"); - } - @Override public String getDeploymentDir() { return "/deployments"; } - @Override - public String getAssemblyName() { - return "deployments"; - } - @Override public String getCommand() { return "/usr/local/s2i/run"; } - @Override - public String getUser() { - return null; - } - @Override public boolean supportsS2iBuild() { return true; diff --git a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java index 1b6483dea6..f48ac636f7 100644 --- a/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java +++ b/jkube-kit/generator/webapp/src/main/java/org/eclipse/jkube/generator/webapp/handler/WildFlyAppSeverHandler.java @@ -84,11 +84,6 @@ public String getFrom() { return fromSelector.getFrom(); } - @Override - public List exposedPorts() { - return Collections.singletonList("8080"); - } - @Override public String getDeploymentDir() { // Applicable for Docker image - ignored for s2i @@ -107,10 +102,6 @@ public Map getEnv() { return Collections.singletonMap("GALLEON_PROVISION_LAYERS", "cloud-server,web-clustering"); } - @Override - public String getAssemblyName() { - return "deployments"; - } @Override public String getUser() { diff --git a/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/handler/JettyAppSeverHandlerTest.java b/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/handler/JettyAppSeverHandlerTest.java new file mode 100644 index 0000000000..d753aa6761 --- /dev/null +++ b/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/handler/JettyAppSeverHandlerTest.java @@ -0,0 +1,122 @@ +/** + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.jkube.generator.webapp.handler; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; + +import org.eclipse.jkube.generator.api.GeneratorContext; +import org.eclipse.jkube.kit.common.Plugin; + +import mockit.Expectations; +import mockit.Mocked; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.Matchers.startsWith; +import static org.junit.Assert.assertTrue; + +public class JettyAppSeverHandlerTest { + + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + + @Mocked + private GeneratorContext generatorContext; + + @Test + public void isApplicableHasJettyLoggingShouldReturnTrue() throws IOException { + // Given + // @formatter:off + new Expectations() {{ + generatorContext.getProject().getBuildDirectory(); result = temporaryFolder.getRoot(); + }}; + // @formatter:on + assertTrue(new File(temporaryFolder.newFolder("META-INF"), "jetty-logging.properties").createNewFile()); + assertTrue(new File(temporaryFolder.newFolder("META-INF-1337"), "context.xml").createNewFile()); + // When + final boolean result = new JettyAppSeverHandler(generatorContext).isApplicable(); + // Then + assertThat(result, equalTo(true)); + } + + @Test + public void isApplicableHasNotJettyLoggingShouldReturnFalse() throws IOException { + // Given + // @formatter:off + new Expectations() {{ + generatorContext.getProject().getBuildDirectory(); result = temporaryFolder.getRoot(); + }}; + // @formatter:on + assertTrue(new File(temporaryFolder.newFolder("META-INF-1337"), "context.xml").createNewFile()); + // When + final boolean result = new JettyAppSeverHandler(generatorContext).isApplicable(); + // Then + assertThat(result, equalTo(false)); + } + + @Test + public void isApplicableHasJettyMavenPluginShouldReturnTrue(@Mocked Plugin plugin) { + // Given + // @formatter:off + new Expectations() {{ + generatorContext.getProject().getBuildDirectory(); result = temporaryFolder.getRoot(); + plugin.getGroupId(); result = "org.eclipse.jetty"; + plugin.getArtifactId(); result = "jetty-maven-plugin"; + generatorContext.getProject().getPlugins(); result = Collections.singletonList(plugin); + }}; + // @formatter:on + // When + final boolean result = new JettyAppSeverHandler(generatorContext).isApplicable(); + // Then + assertThat(result, equalTo(true)); + } + + @Test + public void isApplicableHasJetty1337MavenPluginShouldReturnFalse(@Mocked Plugin plugin) { + // Given + // @formatter:off + new Expectations() {{ + generatorContext.getProject().getBuildDirectory(); result = temporaryFolder.getRoot(); + plugin.getGroupId(); result = "org.eclipse.jetty"; + plugin.getArtifactId(); result = "jetty1337-maven-plugin"; + generatorContext.getProject().getPlugins(); result = Collections.singletonList(plugin); + }}; + // @formatter:on + // When + final boolean result = new JettyAppSeverHandler(generatorContext).isApplicable(); + // Then + assertThat(result, equalTo(false)); + } + + @Test + public void handlerSettings() { + // When + final JettyAppSeverHandler handler = new JettyAppSeverHandler(generatorContext); + // Then + assertThat(handler.getFrom(), startsWith("quay.io/jkube/jkube-jetty9-binary-s2i:")); + assertThat(handler.exposedPorts(), contains("8080")); + assertThat(handler.getDeploymentDir(), equalTo("/deployments")); + assertThat(handler.getAssemblyName(), equalTo("deployments")); + assertThat(handler.getCommand(), equalTo("/usr/local/s2i/run")); + assertThat(handler.getUser(), nullValue()); + assertThat(handler.supportsS2iBuild(), equalTo(true)); + } +} \ No newline at end of file diff --git a/jkube-kit/parent/pom.xml b/jkube-kit/parent/pom.xml index 57587678b1..2ef1bb3f99 100644 --- a/jkube-kit/parent/pom.xml +++ b/jkube-kit/parent/pom.xml @@ -77,8 +77,8 @@ - 0.0.2 - 0.0.2 + 0.0.3 + 0.0.3 2.0 @@ -96,8 +96,8 @@ - 0.0.2 - 1.5.1 + 0.0.3 + 0.0.3 19.0.0.Final 19.0 @@ -125,7 +125,7 @@ quay.io/jkube/jkube-tomcat9-binary-s2i:${version.image.tomcat.upstream} - fabric8/jetty-9:${version.image.jetty.upstream} + quay.io/jkube/jkube-jetty9-binary-s2i:${version.image.jetty.upstream} jboss/wildfly:${version.image.wildfly.upstream.docker} quay.io/wildfly/wildfly-centos7:${version.image.wildfly.upstream.s2i} wildfly:${version.image.wildfly.upstream.s2i} diff --git a/quickstarts/maven/webapp-jetty/pom.xml b/quickstarts/maven/webapp-jetty/pom.xml index c64e7157a1..8f4a52ad01 100644 --- a/quickstarts/maven/webapp-jetty/pom.xml +++ b/quickstarts/maven/webapp-jetty/pom.xml @@ -20,7 +20,7 @@ org.eclipse.jkube.quickstarts.maven webapp-jetty - 1.0.0-alpha-3 + 1.0.0-SNAPSHOT Eclipse JKube :: Quickstarts :: Maven :: Webapp Jetty war @@ -38,16 +38,11 @@ org.eclipse.jkube kubernetes-maven-plugin ${project.version} - - - jkube - - resource - build - helm - - - + + + org.eclipse.jkube + openshift-maven-plugin + ${project.version} @@ -56,40 +51,4 @@ 1.8 UTF-8 - - - kit - - - - - maven-failsafe-plugin - 2.19 - - - **/*KT.* - - - - - - - - - - io.fabric8 - fabric8-arquillian - test - - - - - - io.fabric8 - fabric8-arquillian - 2.2.158 - test - - - diff --git a/quickstarts/maven/webapp-jetty/src/main/webapp/index.html b/quickstarts/maven/webapp-jetty/src/main/webapp/index.html index 5b7bb03232..66233a01e4 100644 --- a/quickstarts/maven/webapp-jetty/src/main/webapp/index.html +++ b/quickstarts/maven/webapp-jetty/src/main/webapp/index.html @@ -22,7 +22,7 @@ -

Eclipse JKube rocks!!

+

Eclipse JKube on Jetty rocks!!

diff --git a/quickstarts/maven/webapp-jetty/src/test/java/org/eclipse/jkube/itests/IntegrationTestKT.java b/quickstarts/maven/webapp-jetty/src/test/java/org/eclipse/jkube/itests/IntegrationTestKT.java deleted file mode 100644 index 0f9378a49f..0000000000 --- a/quickstarts/maven/webapp-jetty/src/test/java/org/eclipse/jkube/itests/IntegrationTestKT.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2019 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at: - * - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.jkube.itests; - -import io.fabric8.kubernetes.client.KubernetesClient; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.test.api.ArquillianResource; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static io.fabric8.kubernetes.assertions.Assertions.assertThat; - -/** - * Tests that the Kubernetes resources (Services, Replication Controllers and - * Pods) can be provisioned and start up correctly. - * - * This test creates a new Kubernetes Namespace for the duration of the test. - * For more information see: http://fabric8.io/guide/testing.html - */ -@RunWith(Arquillian.class) -public class IntegrationTestKT { - - @ArquillianResource - protected KubernetesClient kubernetes; - - @Test - public void testRunningPodStaysUp() throws Exception { - assertThat(kubernetes).deployments().pods().isPodReadyForPeriod(); - } -} \ No newline at end of file