diff --git a/pom.xml b/pom.xml index 395c6b85..0cd5478c 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,7 @@ 3.5 2.8.2 + 2.19.1 2.19.1 3.2.28 1.2 diff --git a/spring-cloud-kubernetes-dependencies/pom.xml b/spring-cloud-kubernetes-dependencies/pom.xml index 88ab38dd..ab44c3f1 100644 --- a/spring-cloud-kubernetes-dependencies/pom.xml +++ b/spring-cloud-kubernetes-dependencies/pom.xml @@ -14,6 +14,8 @@ Spring Cloud Kubernetes :: Dependencies Spring Cloud Kubernetes Dependencies + 1.1.12.Final + 1.0.0.Alpha20 2.2.0 0.0.12 1.0-groovy-2.3 @@ -104,6 +106,31 @@ + + org.jboss.arquillian.junit + arquillian-junit-standalone + ${arquillian.version} + test + + + org.arquillian.cube + arquillian-cube-requirement + ${arquillian-cube.version} + test + + + org.arquillian.cube + arquillian-cube-kubernetes + ${arquillian-cube.version} + test + + + org.arquillian.cube + arquillian-cube-openshift + ${arquillian-cube.version} + test + + io.fabric8 mockwebserver diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/.jdk8 b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/.jdk8 new file mode 100644 index 00000000..e69de29b diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/README.md b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/README.md new file mode 100644 index 00000000..5eb1ba24 --- /dev/null +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/README.md @@ -0,0 +1,11 @@ +# Hello World Example + +This is a `Hello World` spring cloud application. + +To run the application on Kubernetes: + + mvn clean package fabric8:build fabric8:deploy fabric8:start + +To run the integration tests: + + mvn clean install -Pintegration diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/pom.xml b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/pom.xml new file mode 100644 index 00000000..eafdb8fd --- /dev/null +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/pom.xml @@ -0,0 +1,189 @@ + + + + spring-cloud-kubernetes-examples + org.springframework.cloud + 0.2.0.BUILD-SNAPSHOT + + 4.0.0 + + org.springframework.cloud + kubernetes-hello-world + Spring Cloud Kubernetes :: Examples :: Hello World + A simple example that demonstrates how to build and test a basic spring cloud kubernetes app + + + + + org.springframework.boot + spring-boot-dependencies + pom + import + ${spring-boot.version} + + + + + + + org.springframework.cloud + spring-cloud-kubernetes-core + ${project.version} + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + org.jboss.arquillian.junit + arquillian-junit-standalone + test + + + org.arquillian.cube + arquillian-cube-requirement + test + + + org.arquillian.cube + arquillian-cube-kubernetes + test + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + repackage + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + ${maven-deploy-plugin.version} + + true + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + true + + + + io.fabric8 + fabric8-maven-plugin + ${fabric8.maven.plugin.version} + + + fmp + + resource + helm + + + + + + + + + + release + + + + io.fabric8 + fabric8-maven-plugin + ${fabric8.maven.plugin.version} + + + fmp + + resource + helm + + + + + + + + + + integration + + + + io.fabric8 + fabric8-maven-plugin + ${fabric8.maven.plugin.version} + + + fmp + + resource + helm + build + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${maven-failsafe-plugin.version} + + + run-integration-tests + integration-test + + integration-test + verify + + + + + false + false + + + + + + + diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/java/org/springframework/cloud/kubernetes/examples/App.java b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/java/org/springframework/cloud/kubernetes/examples/App.java new file mode 100644 index 00000000..51b1b5b6 --- /dev/null +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/java/org/springframework/cloud/kubernetes/examples/App.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2016 to the original authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.springframework.cloud.kubernetes.examples; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * + */ +@SpringBootApplication +public class App { + + public static void main(String[] args) { + SpringApplication.run(App.class, args); + } + +} diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/java/org/springframework/cloud/kubernetes/examples/HelloController.java b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/java/org/springframework/cloud/kubernetes/examples/HelloController.java new file mode 100644 index 00000000..063e2e3e --- /dev/null +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/java/org/springframework/cloud/kubernetes/examples/HelloController.java @@ -0,0 +1,14 @@ +package org.springframework.cloud.kubernetes.examples; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HelloController { + + @RequestMapping("/") + public String hello() { + return "Hello World"; + } + +} diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/resources/application.properties b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/resources/application.properties new file mode 100644 index 00000000..4e667b7e --- /dev/null +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=hello-world-example diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/test/java/org/springframework/cloud/kubernetes/examples/HelloWorldIT.java b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/test/java/org/springframework/cloud/kubernetes/examples/HelloWorldIT.java new file mode 100644 index 00000000..d848ec7f --- /dev/null +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/test/java/org/springframework/cloud/kubernetes/examples/HelloWorldIT.java @@ -0,0 +1,39 @@ +package org.springframework.cloud.kubernetes.examples; + + +import org.arquillian.cube.kubernetes.annotations.PortForward; +import org.arquillian.cube.kubernetes.impl.requirement.RequiresKubernetes; +import org.arquillian.cube.requirement.ArquillianConditionalRunner; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.IOException; +import java.net.URL; + +import javax.inject.Named; + +import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.Service; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +@RunWith(ArquillianConditionalRunner.class) +@RequiresKubernetes +public class HelloWorldIT { + + @ArquillianResource + @Named("kubernetes-hello-world") //The service name is "${project.artifactId}".substring(0,23) + @PortForward + URL url; + + @Test + public void service_should_be_accessible() throws IOException { + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + Response response = client.newCall(request).execute(); + Assert.assertTrue(response.isSuccessful()); + } +} diff --git a/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/test/resources/arquillian.xml b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/test/resources/arquillian.xml new file mode 100644 index 00000000..35f0335e --- /dev/null +++ b/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/src/test/resources/arquillian.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/spring-cloud-kubernetes-examples/pom.xml b/spring-cloud-kubernetes-examples/pom.xml index 545b5a2d..01e13940 100644 --- a/spring-cloud-kubernetes-examples/pom.xml +++ b/spring-cloud-kubernetes-examples/pom.xml @@ -17,6 +17,7 @@ kubernetes-reload-example + kubernetes-hello-world-example