-
Notifications
You must be signed in to change notification settings - Fork 0
PluginBuild
Tato stránka popisuje jak se v projektu Kramerius vytváří procesy, z nich pluginy a z pluginů konkrétní Worker Docker image v rámci process-platform.
Navazuje na stránky:
- Home – základní přehled platformy
- Architecture – runtime architektura (Manager, Worker, procesy)
Tato stránka se soustředí výhradně na build-time pohled.
| Pojem | Význam |
|---|---|
| Process | Čistá Java logika (např. Import, Index, Migration) |
| Plugin | Definice, jak se proces spouští v platformě |
| Worker | Runtime aplikace, která vykonává pluginy |
| Worker image | Docker image s konkrétní sadou pluginů |
Klíčová myšlenka:
Proces je logika. Plugin je kontrakt. Worker je runtime.
Procesy vznikají jako běžné Gradle moduly uvnitř multimodulového projektu Kramerius.
processes/
├─ import/
├─ index/
└─ migration/
Každý proces:
- je samostatný Gradle modul
- má vlastní
build.gradle - může záviset na sdílených modulech (např.
:shared:common) - musí mít závislost na process-api
dependencies {
implementation project(':shared:common')
implementation "org.ceskaexpedice:process-api:${processapiversion}"
}Proces:
- může mít
mainmetodu - není ještě pluginem
- neřeší profily, plánování ani integraci s Workerem
Výstupem buildu je obyčejný JAR v build/libs.
Plugin je platformní obal procesu, který definuje:
- vstupní metodu
- mapování parametrů
- metadata
- profily
- vazbu na Worker runtime
processes/platform/
├─ curator/
│ ├─ importPlugin/
│ ├─ indexPlugin/
│ └─ worker/
└─ cdk/
├─ migrationPlugin/
└─ worker/
Každý *Plugin je opět samostatný Gradle modul.
Plugin obsahuje tři zásadní části:
@ProcessMethod
public static void importMain(...)- označuje spustitelný proces
- definuje parametry pomocí anotací
- je jediným vstupním bodem, který Worker zná
Procesní logika je delegována do původního procesu:
Import.importMain(...)public class ImportSPI extends AbstractPluginSpi {
@Override
public String getMainClass() {
return ImportPlatformStarter.class.getName();
}
}SPI:
- umožňuje Workeru plugin objevit
- definuje hlavní třídu
- určuje podporované profily
plugins {
id 'org.ceskaexpedice.processplatform.process'
}Tento Gradle plugin:
- zpracuje anotace
- vygeneruje metadata
- zaregistruje SPI
- vytvoří process-platform plugin JAR
Konfigurace:
processPlugin {
spiImplementation = 'org.kramerius.plugin.ImportSPI'
profiles = [
[profileId: 'import', description: 'Import FOXML', jvmArgs: ['-Xmx32g']]
]
}➡️ Tady oficiálně vzniká plugin.
worker modul neobsahuje žádný Java kód.
Jeho účel:
- vybrat konkrétní pluginy
- sestavit Worker runtime
- vytvořit Docker image
plugins {
id 'org.ceskaexpedice.processplatform.worker'
id 'com.google.cloud.tools.jib'
}dependencies {
implementation project(':processes:platform:curator:import-foxml')
}Zajišťují, že pluginy jsou k dispozici pro build.
processWorker {
workerName = 'curatorworker'
plugins = [
project(':processes:platform:curator:import-foxml'),
project(':processes:platform:curator:index')
]
}➡️ Zde se explicitně říká, které pluginy patří do Workeru.
Gradle plugin processplatform.worker vytvoří runtime layout:
build/worker/
├─ webapps/
│ └─ process-worker.war
└─ lib/
└─ plugins/
├─ import-plugin.jar
├─ index-plugin.jar
Toto je hotový Worker, ještě bez Dockeru.
Jib:
- vezme runtime layout
- vloží ho do Tomcat image
jib {
from { image = 'tomcat:9-jdk21' }
to { image = 'ceskaexpedice/curator-worker:${version}' }
}Výsledkem je deterministický Worker image s pevnou sadou pluginů.
graph TD
A[Process<br/>Import] --> B[Plugin<br/>importPlugin]
B --> C[Worker build<br/>curator/worker]
C --> D[Docker image<br/>curator-worker]
- Proces je čistá Java logika
- Plugin definuje proces pro platformu
- Worker vybírá pluginy při buildu
- Docker image je pouze runtime obálka
Tento přístup umožňuje:
- pevně definované workery
- jednoduchý a reprodukovatelný build
- jasné oddělení odpovědností