$ show dromara/Jpom
Jpom is a production-grade, self-hosted DevOps platform built with Java (Spring Boot) and Vue 3. It adopts a server-agent architecture: a central server manages multiple agent nodes via HTTP/WebSocket, enabling remote project deployment, process lifecycle management, script execution, Docker container orchestration, SSH command dispatch, and real-time log monitoring. The server provides a web UI and REST API for configuration, while agents execute operations locally. The codebase is modular, with clear separation into `server`, `agent`, `common`, `storage-module`, and `sub-plugin` modules, plus a Vue frontend with internationalization (i18n) support. Key features include CI/CD build pipelines (Git/SVN), artifact distribution ('outgiving'), trigger tokens for webhook automation, role-based access control with workspaces, database-backend abstraction (H2, MySQL, PostgreSQL), and a plugin system for extensibility (Git, SVN, Docker, encryption, email, webhook). The architecture demonstrates strong engineering practices: SPI-based plugin loading, annotation-driven validation and permission checks, a layered service model with database-agnostic storage, and comprehensive WebSocket handling for real-time features. The codebase is actively maintained with frequent releases and a detailed changelog. While some modules show code duplication (e.g., `SocketSessionUtil` in server and agent) and a number of test files are exploratory or stale, the overall design is clean, the plugin system is genuinely reusable, and the storage abstraction layer (H2, MySQL, PostgreSQL) is a highlight for multi-dialect support. This is a solid implementation of a complex distributed management tool, suitable for teams needing a self-hosted alternative to commercial CI/CD or server management platforms.
The LLM identified 4 files worth highlighting for reuse:
Provides service-discovery and lifecycle management for plugins (IPlugin) using Java SPI, reflection, and annotation scanning. Supports singleton/bean instantiation, ordering, and shutdown hooks. This pattern is decoupled and reusable across any project needing extensible plugin loading.
Wraps Hutool's CronScheduler with thread-safe upsert/remove operations, task statistics, and listener callbacks for start/end/exception. Encapsulates all cron lifecycle in a single utility class, making it easy to integrate scheduled tasks in any Java application.
Implements a generic, key-based concurrent lock using a ConcurrentMap of Semaphores. Allows fine-grained locking based on arbitrary keys (e.g., file paths, node IDs) while avoiding global contention. Thread-safe and reusable in any multi-threaded resource-access scenario.
Defines a clean interface for encryption/decryption with SPI-based implementations (AES, BASE64, no-op). The AesEncryptor uses a configurable key and provides symmetric encryption. This decoupled design allows swapping encryption strategies without affecting callers.