TN-003 β Standardize Repositories for Production Plug-and-Play Readiness¶
| Field | Value |
|---|---|
| Status | Completed |
| Activity Type | Implementation |
| Record Type | Live |
| Project | Tomcat Monitoring |
| Phase | Continuous Integration and Deployment |
| Activity Date | 2026-09-12 |
| Recorded Date | 2026-09-12 |
| Owner | Eddy Wiyatno |
| Working Mode | Write |
| Authorization Status | Approved |
| Approved By | Eddy Wiyatno |
| Approval Date | 2026-09-12 |
π― Objective¶
Mengeksekusi rencana tindakan remediasi (remediation action plan) hasil audit TN-002 pada 3 repositori platform Tomcat Monitoring (tomcat-diagnostic-service, tomcat-diagnostic-event-collector, dan tomcat-monitoring) agar berstatus Enterprise Production-Ready (Plug-and-Play) (standar kesiapan produksi korporat yang dapat langsung digunakan tanpa penyesuaian manual) sebelum penulisan deklarasi pipeline (alur otomasi) Jenkinsfile (berkas deklarasi pipeline Jenkins) pada tahap TN-004 s.d. TN-007.
Target Utama & Kriteria Keberhasilan:
- Parameterisasi Portabilitas Registry: Memperbarui
scripts/build.shpadatomcat-diagnostic-serviceagar mendukung variabelREGISTRY_HOST,IMAGE_TAG, danPUSH_IMAGEuntuk integrasi enterprise container registry (registri kontainer korporat seperti Harbor atau Nexus). - Eliminasi Jalur Statis Host (Path-Agnostic): Merefaktor
scripts/verify-postfix-relay.shuntuk mengganti jalur hardcoded (nilai yang ditulis mati di dalam kode)/home/eddywiyatno/git/...dengan variabel konfigurasi dinamis${DIAGNOSTIC_SERVICE_DIR:-...}. - Ketahanan Rollback Otomatis (Automated Rollback Recovery Trap): Mengintegrasikan penanganan kegagalan shell (
trap '...' ERR) padascripts/deploy-diagnostic-service.shyang secara otomatis memulihkan (restore) dan menyalakan kembali kontainer snapshot (salinan kondisi kontainer cadangan) jika kontainer baru gagal melewati uji kesiapan (readiness check). - Portabilitas Verifikasi Registry Remote: Menstandarkan skrip verifikasi integrasi (
verify-alertmanager-diagnostic-service.shdanverify-diagnostic-service-mailpit.sh) agar menerima referensi image tag dan digest dari registry remote. - Kepatuhan Tata Kelola Berkas Sementara (Zero
/tmpPolicy): Menertibkan payload pengujian webhook padaverify-postfix-relay.shmenggunakan direktori sementara terisolasi berbasismktemp -ddengan penanganan pembersihan otomatis (cleanup handler). - Standarisasi Unit Service Daemon: Menyesuaikan template instalasi service unit
systemd --userpadascripts/deploy-event-collector.shagar menggunakan variabel direktori instalasi repositori secara dinamis. - Verifikasi Mutu Deterministik 100%: Memastikan seluruh pengujian unit Node.js (62 suites), pengujian retensi daemon spool, dan static validators tetap lulus 100% tanpa regresi.
π Background¶
Berdasarkan keputusan arsitektur TM-ADR-0024, cetak biru pipeline TN-001, dan temuan audit kesiapan operasional TN-002, lingkungan build agent (mesin atau kontainer pekerja pembangun kontainer) Jenkins (builder-01) mengeksekusi tahapan CI/CD secara headless (eksekusi otomatis di latar belakang tanpa antarmuka grafis atau interaksi terminal) di dalam kontainer terisolasi berbasis Rootless Podman (lingkungan kontainer Podman yang berjalan tanpa hak akses root).
Audit TN-002 menemukan 1 Critical Gap pada jalur hardcoded pengujian Postfix relay dan 4 Configuration Gaps pada parameterisasi registry dan otomasi rollback. Tanpa standarisasi ini, eksekusi pipeline CI/CD pada Jenkins Controller akan mengalami kegagalan build seketika (broken build) akibat perbedaan struktur direktori workspace dan penolakan tag image. Oleh karena itu, standarisasi repositori wajib dieksekusi sebelum penulisan deklarasi pipeline Jenkinsfile.
π Scope¶
Pekerjaan implementasi standarisasi repositori ini mencakup:
- Repositori
tomcat-diagnostic-service: - Modifikasi
scripts/build.shuntuk parameterisasiREGISTRY_HOST,IMAGE_TAG, danPUSH_IMAGE. - Verifikasi kepatuhan
scripts/validate.shdan eksekusi pengujian unit 62 test suites. - Repositori
tomcat-monitoring: - Refaktor
scripts/verify-postfix-relay.shuntuk eliminasi jalur statis host${DIAGNOSTIC_SERVICE_DIR:-...}dan isolasi berkas sementaramktemp -d. - Refaktor
scripts/deploy-diagnostic-service.shuntuk implementasi automated rollback recovery trap (trap rollback_on_failure ERR). - Refaktor
scripts/verify-alertmanager-diagnostic-service.shdanscripts/verify-diagnostic-service-mailpit.shuntuk mendukung referensi image registry remote. - Refaktor
scripts/deploy-event-collector.shuntuk merender jalur direktori repositori dinamis pada service unit systemd. - Repositori
tomcat-diagnostic-event-collector: - Verifikasi static governance, validasi skema JSON
event-record-v1, dan pengujian retensi spool. - Exclusions:
- Penulisan berkas fisik
Jenkinsfilepada masing-masing repositori (dijadwalkan pada TN-004 s.d. TN-006). - Pendaftaran job deklaratif pada Jenkins Controller UI (dijadwalkan pada TN-007).
π Prerequisites¶
- Runtime Podman rootless aktif pada host lokal.
- Image dasar Node.js
localhost/nodejs:24.18.0dan base digest immutable tersedia. - Seluruh 3 repositori Git lokal berada pada status bersih (clean working tree) di branch
main. - Persetujuan Remediation Action Plan dari pemilik proyek (Project Owner).
βοΈ Execution Decision¶
Mengadopsi keputusan arsitektur TM-ADR-0024 dan rencana remediasi TN-002:
- Menggunakan parameterisasi berbasis environment variables dengan nilai bawaan (default fallback) yang aman untuk eksekusi lokal maupun remote CI/CD.
- Menerapkan pola Fail-Safe Automated Rollback berbasis trap shell Bash (trap ... ERR) untuk menjaga ketersediaan layanan pemantauan produksi (zero-downtime resilience).
π§ Implementation Plan¶
| Tahap | Rencana |
|---|---|
| Parameterize Diagnostic Service Build Script | Menambahkan dukungan REGISTRY_HOST, IMAGE_TAG, dan PUSH_IMAGE pada scripts/build.sh. |
| Standardize Monitoring Stack Test Runners and Deployers | Merefaktor verify-postfix-relay.sh, deploy-diagnostic-service.sh, deploy-event-collector.sh, dan skrip verifikasi integrasi. |
| Verify Multi-Repository Deterministic Test Suites | Menjalankan seluruh rangkaian validator statis dan test suite pada ketiga repositori untuk membuktikan 100% kelulusan. |
βοΈ Implementation¶
flowchart TD
subgraph S1["1. Diagnostic Service Standardization"]
DS1["Parameterize build.sh<br/>(REGISTRY_HOST,<br/>IMAGE_TAG, PUSH_IMAGE)"]
DS2["Validate static contract<br/>& npm test (62 suites)"]
DS1 --> DS2
end
subgraph S2["2. Monitoring Stack Standardization"]
TM1["Refactor verify-postfix-relay.sh<br/>(DIAGNOSTIC_SERVICE_DIR<br/>& mktemp)"]
TM2["Integrate rollback trap<br/>in deploy-diagnostic-service.sh"]
TM3["Update verify-*.sh for<br/>remote registry portability"]
TM4["Dynamic systemd unit path<br/>in deploy-event-collector.sh"]
TM1 --> TM2 --> TM3 --> TM4
end
subgraph S3["3. Multi-Repo Verification"]
VR1["Run validate.sh<br/>on 3 repos"]
VR2["Run test-collector.sh<br/>on collector"]
VR3["Run npm test<br/>on backend"]
VR1 --> VR2 --> VR3
end
S1 --> S2 --> S3
Parameterize Diagnostic Service Build Script¶
Melakukan modifikasi berkas scripts/build.sh pada repositori tomcat-diagnostic-service untuk memungkinkan penentuan host registry, tag versi, dan flag publikasi kontainer:
- Menambahkan deklarasi variabel lingkungan dengan fallback nilai bawaan:
- Memperbarui target tag pada perintah
podman build:podman build \ --file "${PROJECT_ROOT}/Containerfile" \ --tag "${TARGET_IMAGE}" \ --tag "${LATEST_IMAGE}" \ --build-arg "BASE_IMAGE=${BASE_IMAGE}" \ --build-arg "BASE_IMAGE_ID=${BASE_IMAGE_ID}" \ --build-arg "IMAGE_PROJECT=${project_name}" \ --build-arg "IMAGE_VERSION=${project_version}" \ "${PROJECT_ROOT}" - Menambahkan percabangan logika untuk mendorong image ke registry saat
PUSH_IMAGE=true:
Expected Result
Skrip build.sh dapat membangun image lokal dengan tag default localhost/... maupun tag remote registry harbor.internal/... saat variabel REGISTRY_HOST disuplai, dan berkas scripts/validate.sh tetap memvalidasi sintaksis shell secara valid.
Standardize Monitoring Stack Test Runners and Deployers¶
Melakukan refaktorisasi pada skrip pengujian dan deployment di repositori tomcat-monitoring:
- Eliminasi Jalur Statis Host pada
scripts/verify-postfix-relay.sh: - Mendefinisikan variabel direktori dinamis:
- Menambahkan asersi pre-flight untuk memastikan direktori modul Node.js tersedia.
- Mengganti seluruh referensi
-v /home/eddywiyatno/git/tomcat-diagnostic-service:/app:romenjadi-v "${DIAGNOSTIC_SERVICE_DIR}:/app:ro". - Mengganti pembuatan berkas statis
/tmp/postfix-e2e-payload.jsondengan direktori terisolasimktemp -dyang dibersihkan viarm -rf "${payload_dir}". - Implementasi Automated Rollback Recovery Trap pada
scripts/deploy-diagnostic-service.sh: - Menstandarkan nama snapshot dan direktori repo:
- Menambahkan fungsi pemulihan otomatis jika terjadi kesalahan:
rollback_on_failure() { echo "PERINGATAN: Deployment Diagnostic Service gagal! Mengeksekusi automated rollback..." >&2 if podman container exists "${CONTAINER_NAME}"; then podman rm -f "${CONTAINER_NAME}" >/dev/null 2>&1 || true fi if podman container exists "${ROLLBACK_NAME}"; then echo "Memulihkan kontainer snapshot cadangan: ${ROLLBACK_NAME} -> ${CONTAINER_NAME}..." >&2 podman rename "${ROLLBACK_NAME}" "${CONTAINER_NAME}" >/dev/null 2>&1 || true podman start "${CONTAINER_NAME}" >/dev/null 2>&1 || true echo "Automated rollback selesai. Kontainer versi sebelumnya telah dipulihkan dan aktif." >&2 fi } trap rollback_on_failure ERR - Menghapus snapshot dan melepaskan trap (
trap - ERR) ketika verifikasi kesiapan kontainer baru berhasil. - Portabilitas Verifikasi Registry Remote:
- Memperbarui validasi
DIAGNOSTIC_IMAGEpadascripts/verify-alertmanager-diagnostic-service.shdanscripts/verify-diagnostic-service-mailpit.sh: - Standarisasi Service Unit Systemd pada
scripts/deploy-event-collector.sh: - Mengganti hardcoded path
%h/git/...dengan variabel${COLLECTOR_REPO}/src/collector.shdanEnvironment=SPOOL_DIR=${SPOOL_DIR}.
Expected Result
Seluruh skrip deployment dan test runner bebas dari jalur statis pengguna lokal, mendukung automated rollback jika kontainer baru gagal beroperasi, dan mematuhi Zero /tmp Policy.
Verify Multi-Repository Deterministic Test Suites¶
Mengeksekusi seluruh rangkaian pengujian deterministik pada 3 repositori untuk memvalidasi ketiadaan efek samping (side effects) atau kerusakan fungsional:
- Menjalankan static validator dan unit test pada
tomcat-diagnostic-service: - Menjalankan validator dan komponen pengujian retensi spool pada
tomcat-diagnostic-event-collector: - Menjalankan validator statis pada
tomcat-monitoring:
Expected Result
Seluruh 62 test suite Node.js lulus (0 fail), pengujian retensi daemon collector berhasil (Test A, B, C PASSED), dan seluruh validator statis menghasilkan exit code 0.
β Verification¶
Hasil eksekusi verifikasi menyeluruh terhadap ketiga repositori platform:
| Repositori Platform | Uji / Validator yang Dijalankan | Hasil Aktual (Actual Result) | Status |
|---|---|---|---|
tomcat-diagnostic-service |
scripts/validate.sh |
Static validation passed: schema, migration, source, and dependency boundaries are consistent. | π’ PASS |
tomcat-diagnostic-service |
npm test (Unit & Integration Suites) |
βΉ tests 62, pass 62, fail 0, skipped 0, duration: 539ms | π’ PASS |
tomcat-diagnostic-event-collector |
scripts/validate.sh |
Validasi baseline governance dan metadata tomcat-diagnostic-event-collector berhasil. | π’ PASS |
tomcat-diagnostic-event-collector |
test/test-collector.sh |
Spool creation, schema compliance, Test A (JSON prune), Test B (TMP prune), Test C (FIFO cap) PASSED. | π’ PASS |
tomcat-monitoring |
scripts/validate.sh |
Alertmanager, JMX Exporter, Prometheus, Telegraf, Tomcat health app, layout, and static contracts valid. | π’ PASS |
βοΈ Commands Executed¶
Seluruh perintah yang dieksekusi selama aktivitas standarisasi dicatat dalam indeks berikut:
| Kategori Tahapan | Perintah yang Dijalankan | Cakupan / Target |
|---|---|---|
| Status Repositori Awal | git -C /home/eddywiyatno/git/<repo> status --short --branch |
Memastikan 3 repositori dalam status bersih (clean working tree) |
| Validasi & Pengujian Backend | cd /home/eddywiyatno/git/tomcat-diagnostic-service./scripts/validate.shpodman run --rm -v $(pwd):/app:ro -w /app localhost/nodejs:24.18.0 npm test |
Memverifikasi static contracts dan 62 unit/integration test suites |
| Validasi & Pengujian Daemon | cd /home/eddywiyatno/git/tomcat-diagnostic-event-collector./scripts/validate.sh./test/test-collector.sh |
Memverifikasi skema JSON event-record-v1 dan algoritma retensi spool |
| Validasi Monitoring Stack | cd /home/eddywiyatno/git/tomcat-monitoring./scripts/validate.sh |
Memverifikasi kontrak konfigurasi platform multi-kontainer |
| Inspeksi Diff Perubahan | git -C /home/eddywiyatno/git/<repo> diff |
Memeriksa ketepatan baris kode yang dimodifikasi |
| Source Control Commit | git -C /home/eddywiyatno/git/tomcat-diagnostic-service commit -m "refactor(build): ..."git -C /home/eddywiyatno/git/tomcat-monitoring commit -m "refactor(scripts): ..." |
Menyimpan rekaman perubahan berstandar Conventional Commits |
π§Ύ Outcome¶
- Standarisasi Repositori Selesai 100%: Seluruh kesenjangan teknis (gaps) yang teridentifikasi pada audit TN-002 telah diselesaikan secara tuntas.
- Kesiapan Plug-and-Play Produksi Enterprise: Ketiga repositori platform kini sepenuhnya path-agnostic, mendukung registry portability, menerapkan automated rollback recovery trap, dan mematuhi Zero
/tmpPolicy. - Fondasi Pipeline CI/CD Terjamin: Repositori siap dikonsumsi langsung oleh deklarasi
Jenkinsfilepada tahap implementasi CI/CD berikutnya (TN-004 s.d. TN-007) tanpa risiko kegagalan keterikatan lingkungan lokal.
π Lessons Learned¶
- Portabilitas Sejak Level Skrip Fondasi: Menghilangkan asumsi jalur pengguna lokal (
/home/...) pada skrip tingkat bawah merupakan kunci utama kelancaran eksekusi pipeline CI/CD di lingkungan containerized agent Jenkins. - Resiliensi Deployment Berbasis Trap Shell: Integrasi fungsi
trap ... ERRdengan pemulihan snapshot otomatis memberikan jaminan keandalan tinggi bagi sistem pemantauan tanpa intervensi manual operator saat terjadi kegagalan deployment kontainer baru. - Isolasi Berkas Sementara via mktemp: Menghindari penggunaan nama berkas statis di
/tmpmencegah konflik konkurensi antar eksekusi pengujian otomatis di pipeline CI/CD.
βοΈ Next Steps¶
flowchart TD
A["Completed<br/>TN-003: Standarisasi Repo"] --> B["Next Stage<br/>TN-004: Diagnostic Service CI<br/>(Declarative Jenkinsfile)"]
B --> C["Next Stage<br/>TN-005: Event Collector CI<br/>(Declarative Jenkinsfile)"]
C --> D["Next Stage<br/>TN-006: Stack CD Hub<br/>(Declarative Jenkinsfile)"]
D --> E["Next Stage<br/>TN-007: Live Verification<br/>(Jenkins Controller)"]
Setelah seluruh 3 repositori platform berstatus Enterprise Production-Ready (Plug-and-Play), langkah implementasi selanjutnya adalah:
- Melanjutkan ke tahap TN-004 β Implement Production-Ready CI Pipeline for
tomcat-diagnostic-serviceuntuk menulis berkas deklaratifJenkinsfilebackend analitik insiden. - Melanjutkan ke tahap TN-005 β Implement Production-Ready CI Pipeline for
tomcat-diagnostic-event-collectoruntuk pipeline CI daemon pemantau siklus hidup kontainer host.
π Related Documentation¶
- Continuous Integration and Deployment Phase Index
- TN-001 β Design Production-Ready Jenkins CI/CD Pipeline Architecture and Implementation Roadmap
- TN-002 β Audit and Standardize Repositories for Production Plug-and-Play Readiness
- TM-ADR-0024 β Adopt Decoupled Component CI and Orchestrated Stack CD Pipeline Architecture
- Engineering Journal Standards
- Writing Standards
- Repositori
tomcat-diagnostic-service - Repositori
tomcat-diagnostic-event-collector - Repositori
tomcat-monitoring