summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Lidke2023-08-02 15:19:38 +0200
committerJakub Lidke2023-08-02 15:19:38 +0200
commita075f731625db4a790d567de4da7d018c3696131 (patch)
treefb78894b4d81d8c2af04038808bc55ad8ae16631
parentdb631fbd8eee6395833d55415e68719c54e773cc (diff)
feat: add Dockerfile for build within docker environment and run application within a container.
-rw-r--r--Dockerfile36
-rw-r--r--HealthCheck.java20
-rw-r--r--build.gradle.kts6
3 files changed, 60 insertions, 2 deletions
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..2d38c6a
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,36 @@
+FROM gradle:8.1-jdk17 AS build
+WORKDIR /home/gradle/src
+ENV GRADLE_USER_HOME /gradle
+
+COPY build.gradle.kts settings.gradle.kts ./
+
+COPY --chown=gradle:gradle . .
+RUN gradle build --info && \
+ java -Djarmode=layertools -jar build/libs/*.jar extract
+
+FROM gcr.io/distroless/java17:nonroot
+WORKDIR /opt/kafka-streams-template
+COPY --from=build /home/gradle/src/dependencies/ ./
+COPY --from=build /home/gradle/src/spring-boot-loader/ ./
+COPY --from=build /home/gradle/src/application/ ./
+COPY HealthCheck.java .
+
+USER nonroot
+ARG GIT_REF=""
+ARG GIT_URL=""
+ARG BUILD_TIME=""
+ARG VERSION=0.0.0
+ENV APP_VERSION=${VERSION} \
+ SPRING_PROFILES_ACTIVE="prod"
+ENTRYPOINT ["java", "-XX:MaxRAMPercentage=90", "org.springframework.boot.loader.JarLauncher"]
+
+HEALTHCHECK --interval=25s --timeout=3s --retries=2 CMD ["java", "HealthCheck.java", "||", "exit", "1"]
+
+LABEL org.opencontainers.image.created=${BUILD_TIME} \
+ org.opencontainers.image.authors="Paul-Chrisitan Volkmer, Jakub Lidke" \
+ org.opencontainers.image.source=${GIT_URL} \
+ org.opencontainers.image.version=${VERSION} \
+ org.opencontainers.image.revision=${GIT_REF} \
+ org.opencontainers.image.vendor="" \
+ org.opencontainers.image.title="etl-processor" \
+ org.opencontainers.image.description="Relay application between Onkostar and bwHc for pseudonymization or anonymization of patient data and profide additional monitoring of processed data."
diff --git a/HealthCheck.java b/HealthCheck.java
new file mode 100644
index 0000000..0aac2a6
--- /dev/null
+++ b/HealthCheck.java
@@ -0,0 +1,20 @@
+import java.io.IOException;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse.BodyHandlers;
+
+public class HealthCheck {
+
+ public static void main(String[] args) throws InterruptedException, IOException {
+ var client = HttpClient.newHttpClient();
+ var request = HttpRequest.newBuilder()
+ .uri(URI.create("http://localhost:8001/actuator/health"))
+ .header("accept", "application/json")
+ .build();
+ var response = client.send(request, BodyHandlers.ofString());
+ if (response.statusCode() != 200 || !response.body().contains("UP")) {
+ throw new RuntimeException("Healthcheck failed");
+ }
+ }
+} \ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index eecd959..290362a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,7 +1,6 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
- war
id("org.springframework.boot") version "3.1.1"
id("io.spring.dependency-management") version "1.1.0"
kotlin("jvm") version "1.9.0"
@@ -28,6 +27,10 @@ repositories {
mavenCentral()
}
+tasks.getByName<Jar>("jar") {
+ enabled = false
+}
+
dependencies {
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
@@ -47,7 +50,6 @@ dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
developmentOnly("org.springframework.boot:spring-boot-docker-compose")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
- providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("io.projectreactor:reactor-test")
}