Bukan rahasia lagi bagi developer bahwa membuat layanan baru memerlukan banyak konfigurasi rutin: skrip build, dependensi, pengujian, buruh pelabuhan, deskriptor k8s. Karena kami melakukan pekerjaan ini, template IDE saat ini tidak cukup. Di bawah pemotongan, upaya saya untuk mengotomatiskan setiap tombol "lakukan dengan baik" lintas platform disertai dengan kode, contoh dan hasil akhir.
Jika prospek membuat layanan dalam satu klik dengan penerapan otomatis berikutnya di Lautan Digital terdengar menggoda, maka artikel ini untuk Anda.
Mari mulai membuat template kita dan pertama-tama pertimbangkan organisasi perakitan. Meskipun banyak orang menyukai maven karena kesederhanaan dan deklaratifnya, kami akan menggunakan gradle, karena lebih modern dan memungkinkan Anda untuk menulis skrip build dalam bahasa yang sama dengan proyek. Selain plugin Kotlin itu sendiri, kita membutuhkan satu lagi:
plugins {
kotlin("jvm") version "1.4.30"
// jvm
id("org.beryx.runtime") version "1.12.1"
}
Dari dependensi tersebut, framework Kotlin Ktor "asli" dipilih sebagai framework server . Untuk pengujian, sekelompok JUnit + Hamkrest digunakan dengan DSL ekspresifnya, yang memungkinkan Anda menulis pengujian dengan cara ini:
assertThat("xyzzy", startsWith("x") and endsWith("y") and !containsSubstring("a"))
Menggabungkan semuanya, dengan fokus pada Java 15+
dependencies {
implementation("com.github.ajalt.clikt:clikt:3.1.0")
implementation("io.ktor:ktor-server-netty:1.5.1")
testImplementation("org.junit.jupiter:junit-jupiter:5.8.0-M1")
testImplementation("com.natpryce:hamkrest:1.8.0.1")
testImplementation("io.mockk:mockk:1.10.6")
}
application {
mainClass.set("AppKt")
}
tasks {
test {
useJUnitPlatform()
}
compileKotlin {
kotlinOptions.jvmTarget = "15"
}
}
entry-point , , ( Hamkrest).
, Kotlin codestyle - .editorsconfig:
[*.{kt, kts, java, xml, html, js}]
max_line_length = 120
indent_size = 2
continuation_indent_size = 2
, , , , , .
gradle clean test runtime
( build/image) , build/image/bin
Dockerfile, . :
# syntax = docker/dockerfile:experimental
FROM gradle:jdk15 as builder
WORKDIR /app
COPY src ./src
COPY build.gradle.kts ./build.gradle.kts
RUN --mount=type=cache,target=./.gradle gradle clean test install
FROM openjdk:15 as backend
WORKDIR /root
COPY --from=builder /app/build/install/app ./
jdk ( jvm) c jstack/jmap jdk.
Docker Compose:
version: "3.9"
services:
backend:
build: .
command: bin/app
ports:
- "80:80"
, jdk/gradle,
docker-compose up
? Digital Ocean - . , Apps Platform ... ! Docker , , , , , . 5$ :
master , , .
Terakhir, semua yang dijelaskan dalam artikel ini didokumentasikan secara mendetail di file README.md dari template, sehingga setelah membuat proyek, pembuatan dan penerapan berikutnya tidak akan menimbulkan kesulitan.
Anda dapat menggunakan template untuk mendapatkan repositori siap pakai hanya dengan mengklik tombol "Use this template"
di GitHub:
github.com/demidko/Projekt-portable
Atau, jika Anda memerlukan opsi jar yang dapat dijalankan sendiri tanpa jvm portabel:
github.com/demidko / Projekt-jar
Setelah itu tinggal menulis logika :) Seperti pendekatan apapun, template ini bukannya tanpa kekurangan, sehingga sangat menarik untuk mendengar saran, komentar dan kritik.