Skip to content

TN-007 β€” Execute and Verify End-to-End CI/CD Pipelines in Jenkins Controller

Field Value
Status Completed
Activity Type Verification
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 dan memverifikasi secara langsung (live verification) seluruh alur Continuous Integration (CI β€” otomasi integrasi kode secara berkala) dan Continuous Deployment (CD β€” otomasi peluncuran dan pembaruan sistem secara berkelanjutan) pada peladen Jenkins Controller (http://localhost:8080) untuk 3 repositori platform Tomcat Monitoring (tomcat-diagnostic-service, tomcat-diagnostic-event-collector, dan tomcat-monitoring) sesuai dengan arsitektur TM-ADR-0024, cetak biru CI/CD TN-001, dan spesifikasi pipeline TN-004 s.d. TN-006.

Target Utama & Kriteria Keberhasilan:

  1. Registrasi Job Pipeline SCM Mandiri: Mendaftarkan 3 pipeline job (tugas alur otomasi) pada Jenkins Controller yang terhubung langsung ke peladen Git lokal (Gitea) menggunakan kredensial Jenkins Credentials Store (gitea-token) tanpa kebocoran rahasia (Zero Secret Leakage).
  2. Penyelesaian 100% Kelulusan Gerbang Mutu (100% Quality Gates Success): Mengeksekusi eksekusi build live pada dedicated build agent (agen pekerja build khusus) builder-01 (berbasis Rootless Podman / DooD β€” Docker-out-of-Docker via Podman socket) dan membuktikan status kelulusan SUCCESS tanpa kegagalan pada seluruh tahapan:
  3. tomcat-diagnostic-service (7 tahapan quality gates, validasi statis, 62 unit/schema test suites, pembuatan citra OCI β€” Open Container Initiative, dan ephemeral smoke test).
  4. tomcat-diagnostic-event-collector (4 tahapan quality gates, validasi tata kelola, dan spool lifecycle & pruning tests).
  5. tomcat-monitoring (4 tahapan orkestrasi stack, zero-touch deployment multi-kontainer, dan live verification suite).
  6. Pembuktian Tanggap Insiden End-to-End Pasca-CD: Membuktikan secara langsung fungsi jembatan Postfix Enterprise SMTP Relay dengan STARTTLS (Start Transport Layer Security β€” perintah negosiasi peningkatan koneksi teks biasa menjadi terenkripsi TLS) dan SASL (Simple Authentication and Security Layer β€” kerangka kerja otentikasi protokol aplikasi), evaluasi otomatis insiden TomcatDown, penerimaan laporan insiden 7-seksi SRE (Site Reliability Engineering) dengan 4 header RFC di Mailpit, serta notifikasi pemulihan (RESOLVED).
  7. Portabilitas Penuh & Bebas Jalur Hardcoded (Strict Plug-and-Play): Menjamin seluruh skrip validasi, build, dan berkas Jenkinsfile bersih dari referensi direktori pengguna spesifik (/home/<user>/...), mematuhi standar POSIX dan modul bawaan Python 3.

🌍 Background

Setelah penyusunan arsitektur CI/CD (TN-001), standarisasi repositori (TN-002, TN-003), dan implementasi berkas deklaratif Jenkinsfile pada masing-masing repositori (TN-004, TN-005, TN-006), tahap pamungkas dari siklus Continuous Integration and Deployment adalah eksekusi nyata (live execution) pada peladen CI/CD Jenkins Controller.

Aktivitas ini memvalidasi keterhubungan antara Jenkins Controller (jenkins-podman), Dedicated Build Agent SSH (builder-01), peladen Git lokal (Gitea), Container Engine (Rootless Podman), serta ekosistem monitoring yang dideploy secara zero-touch (peluncuran sistem secara mandiri tanpa intervensi manual pengembang).

Klasifikasi 3 Lapisan Pipeline CI/CD

Ketiga pipeline yang dieksekusi mencerminkan pembagian lapisan arsitektur platform:

  1. Application Code Layer (tomcat-diagnostic-service β€” Pipeline 1): Menguji dan mempaketkan mikroservis backend Node.js analitik insiden menjadi artefak OCI container image independen.
  2. Host Daemon / OS Agent Layer (tomcat-diagnostic-event-collector β€” Pipeline 2): Menguji skrip Bash dan tata kelola daemon systemd pengamat event container di host Linux.
  3. Platform Infrastructure & Stack Orchestration Layer (tomcat-monitoring β€” Pipeline 3): Bertindak sebagai Infrastructure as Code (IaC) dan Stack CD Hub yang mengelola network bridge (devops-lab), storage volumes, layanan COTS (Prometheus, Alertmanager, Postfix Relay, Mailpit), zero-touch deployment, serta membuktikan keandalan end-to-end melalui simulasi insiden live.

πŸ“š Scope

Pekerjaan eksekusi dan verifikasi end-to-end ini mencakup:

  • Resolusi Konflik Port Host:
  • Penataan ulang alokasi port host Tomcat JMX Exporter ke port 8083 agar port 8080 dialokasikan khusus untuk Jenkins Controller secara bersih.
  • Registrasi Pipeline Job pada Jenkins Controller:
  • Pendaftaran 3 job alur kerja SCM (Source Code Management β€” sistem manajemen kontrol versi kode sumber) melalui antarmuka REST API (Representational State Transfer Application Programming Interface) Jenkins dengan autentikasi berbasis API Token dan proteksi Jenkins Crumb (mekanisme perlindungan pemalsuan permintaan antar-situs CSRF).
  • Eksekusi Live Build & Penanganan Hambatan (Troubleshooting):
  • Eksekusi build untuk tomcat-diagnostic-service dan resolusi isolasi pustaka dependensi npm di dalam kontainer pengujian tanpa merusak prinsip Plug-and-Play.
  • Eksekusi build untuk tomcat-diagnostic-event-collector dan pembuktian uji retensi spool daemon host.
  • Eksekusi build untuk tomcat-monitoring dan resolusi penanganan sertifikat X.509 pada volume rahasia Alertmanager.
  • Audit Verifikasi Hasil Insiden Live:
  • Pemeriksaan pesan pada Mailpit API (http://localhost:8025) untuk memverifikasi 4 header RFC enterprise dan struktur 7 seksi laporan SRE.
  • Pemeriksaan antrean Postfix Relay (postqueue -p) untuk memastikan 0 pesan tertahan.
  • Konsolidasi Dokumentasi:
  • Penulisan technical note TN-007, pembaruan status indeks fase CI/CD ke Completed, dan sinkronisasi situs handbook.

πŸ“‹ Prerequisites

  1. Jenkins Controller kontainer jenkins-podman aktif dan dapat diakses pada http://localhost:8080.
  2. Dedicated SSH Build Agent builder-01 (label: builder linux podman) dalam status Online (offline: false, idle: true).
  3. Peladen Git Gitea aktif pada http://localhost:3000 dengan kredensial gitea-token terdaftar di Jenkins Credentials Store.
  4. Repositori tomcat-diagnostic-service, tomcat-diagnostic-event-collector, dan tomcat-monitoring dalam status bersih (clean working tree) dan telah dipush ke branch main.
  5. Postfix Relay (postfix-relay) dan Mailpit (mailpit) aktif pada network devops-lab.

βš–οΈ Execution Decision

Mengadopsi keputusan arsitektur TM-ADR-0024: - Autentikasi SCM Terpadu: Menggunakan URL SCM jaringan LAN http://192.168.0.111:3000/gitadm/<repo>.git yang dapat diakses secara konsisten oleh Jenkins Controller (dalam kontainer) maupun Jenkins Agent (pada host). - Zero Hardcoded Paths: Menghapus seluruh referensi direktori pribadi pengguna lokal dari skrip validasi dan pipeline, menggantikannya dengan modul bawaan standar Python 3 (re, pathlib, json) dan variabel lingkungan dinamis ($WORKSPACE, $HOME). - Parameterized Build Execution: Memanfaatkan REST API Jenkins POST /job/<name>/buildWithParameters untuk memicu pipeline dengan konfigurasi parameter deklaratif enterprise.


🧭 Implementation Plan

Tahap Rencana
Resolve Port Conflicts & Register Jobs Membebaskan port 8080 untuk Jenkins Controller dan mendaftarkan 3 pipeline jobs via REST API Jenkins.
Execute Diagnostic Service CI Pipeline Memicu eksekusi build tomcat-diagnostic-service di Jenkins dan memverifikasi kelulusan 7 tahapan quality gates.
Execute Event Collector CI Pipeline Memicu eksekusi build tomcat-diagnostic-event-collector di Jenkins dan memverifikasi kelulusan 4 tahapan quality gates.
Execute Monitoring Stack CD Hub Pipeline Memicu eksekusi build tomcat-monitoring di Jenkins dan memverifikasi tahapan deployment serta live verification suite.
Verify End-to-End Live Incident Response Memverifikasi penerimaan email insiden TomcatDown (FIRING & RESOLVED) pada Mailpit dan kebersihan antrean Postfix Relay.
Sync Handbook Documentation Site Memperbarui indeks fase CI/CD dan melakukan build serta sinkronisasi situs handbook (http://localhost:8282).

βš™οΈ Implementation

flowchart TD
    subgraph Jenkins_Orchestration["Jenkins Controller & Agent Live Orchestration"]
        direction TB
        J1["Jenkins Controller<br/>(Port 8080 / REST API)"]
        A1["Dedicated Build Agent<br/>(builder-01 / Rootless Podman)"]
        G1["Gitea SCM<br/>(Port 3000 / gitea-token)"]

        J1 <-->|"SSH Launcher"| A1
        J1 <-->|"SCM Polling / Fetch"| G1
    end

    subgraph Pipeline_Execution["Live Pipeline Execution (100% SUCCESS)"]
        direction TB
        P1["Job 1: tomcat-diagnostic-service<br/>(Build 8 β€” 7 Stages PASS)"]
        P2["Job 2: tomcat-diagnostic-event-collector<br/>(Build 1 β€” 4 Stages PASS)"]
        P3["Job 3: tomcat-monitoring CD Hub<br/>(Build 4 β€” 4 Stages PASS)"]

        P1 --> P2 --> P3
    end

    subgraph Live_Verification["Post-CD Live Incident Response Audit"]
        direction TB
        V1["Zero-Touch Deploy<br/>(5 Containers + Volumes)"]
        V2["Postfix STARTTLS+SASL<br/>(Relay Bridge Verification)"]
        V3["TomcatDown Incident<br/>(FIRING + RESOLVED)"]
        V4["Mailpit & Postfix Audit<br/>(4 RFC Headers + 7 Sections)"]

        V1 --> V2 --> V3 --> V4
    end

    A1 --> Pipeline_Execution
    P3 --> Live_Verification

Resolve Port Conflicts and Prepare Network

Menata ulang alokasi port host agar Jenkins Controller dapat beroperasi pada port standar 8080 tanpa benturan dengan beban kerja monitoring:

  1. Mengubah port HTTP Tomcat pada tomcat-monitoring/CONFIG dan tomcat-jmx-exporter/CONFIG:
    TOMCAT_HTTP_PORT=8083
    
  2. Menghapus entri host statis dari /etc/hosts untuk mengembalikan resolusi DNS alami container network devops-lab.
  3. Memastikan peladen Jenkins Controller aktif pada port 8080 dan agen builder-01 terhubung secara daring (online).

Expected Result

Port 8080 dialokasikan penuh untuk Jenkins Controller, dan agen builder-01 siap menerima pekerjaan eksekusi.

Register Pipeline Jobs in Jenkins Controller

Mendaftarkan 3 berkas alur otomasi Pipeline as Code ke dalam Jenkins Controller melalui REST API:

  1. Mendapatkan token pengaman Jenkins Crumb:
    CRUMB=$(curl -s -u "admin:<token>" 'http://localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
    
  2. Mendaftarkan job tomcat-diagnostic-service, tomcat-diagnostic-event-collector, dan tomcat-monitoring dengan definisi XML yang mengarah ke repositori SCM Gitea (http://192.168.0.111:3000/gitadm/<repo>.git) menggunakan kredensial gitea-token.

Expected Result

Ketiga pipeline job terdaftar pada Jenkins Controller dan siap dipicu untuk eksekusi build.

Execute Diagnostic Service CI Pipeline

Memicu eksekusi build CI untuk komponen analitik diagnostik:

  1. Menjalankan build berparameter melalui API:
    curl -s -X POST -u "admin:<token>" -H "$CRUMB" "http://localhost:8080/job/tomcat-diagnostic-service/buildWithParameters"
    
  2. Memverifikasi seluruh 7 tahapan quality gates:
  3. Stage 1 β€” Checkout Source Code: Memeriksa integritas berkas kontrak.
  4. Stage 2 β€” Verify Build Agent: Memverifikasi keamanan runtime Rootless Podman pada agent.
  5. Stage 3 β€” Static Lint & Governance Validation: Menjalankan pemindaian aturan tata kelola dengan Python 3 murni.
  6. Stage 4 β€” Automated Unit & Schema Testing: Memasang dependensi terisolasi dan mengeksekusi 62 test suites (100% PASS).
  7. Stage 5 β€” Build & Pin OCI Image: Membangun citra OCI localhost/tomcat-diagnostic-service:0.1.8 dan tag latest.
  8. Stage 6 β€” Ephemeral Smoke Test: Menguji metadata runtime, pengguna non-root node, dan isolasi direktori.
  9. Stage 7 β€” Publish Image to Registry: Dilewati sesuai parameter default.

Expected Result

Job tomcat-diagnostic-service Build 8 selesai dengan status SUCCESS (seluruh 62 test suites lulus tanpa cacat).

Execute Event Collector CI Pipeline

Memicu eksekusi build CI untuk komponen pemantau event host:

  1. Menjalankan build melalui API:
    curl -s -X POST -u "admin:<token>" -H "$CRUMB" "http://localhost:8080/job/tomcat-diagnostic-event-collector/build"
    
  2. Memverifikasi seluruh 4 tahapan quality gates:
  3. Stage 1 β€” Checkout Source Code: Memeriksa keberadaan skrip kolektor dan berkas proyek.
  4. Stage 2 β€” Verify Build Agent: Memverifikasi ketersediaan utilitas host (Bash, Python 3, Podman).
  5. Stage 3 β€” Static Lint & ShellCheck Governance: Menjalankan validasi sintaksis bash -n dan aturan isolasi berkas.
  6. Stage 4 β€” Spool Lifecycle & Pruning Test: Mengeksekusi uji coba snapshot event, pemangkasan berkas kadaluwarsa (> 24 jam), pembersihan berkas temporary tertinggal (> 60 menit), dan kuota FIFO (First In First Out).

Expected Result

Job tomcat-diagnostic-event-collector Build 1 selesai dengan status SUCCESS.

Execute Monitoring Stack CD Hub Pipeline

Memicu eksekusi build CD untuk orkestrasi multi-kontainer platform pemantauan:

  1. Menjalankan build berparameter melalui API:
    curl -s -X POST -u "admin:<token>" -H "$CRUMB" "http://localhost:8080/job/tomcat-monitoring/buildWithParameters?DEPLOY_ENV=production&REGISTRY_HOST=localhost&EXECUTE_LIVE_TESTS=true"
    
  2. Memverifikasi 4 tahapan orkestrasi stack:
  3. Stage 1 β€” Checkout & Platform Validation: Memvalidasi tata kelola konfigurasi seluruh komponen pemantauan.
  4. Stage 2 β€” Verify Agent & Runtime Isolation: Memastikan isolasi network bridge devops-lab.
  5. Stage 3 β€” Zero-Touch Platform Deployment: Meluncurkan kontainer tomcat-jmx-exporter, prometheus, alertmanager, diagnostic-service, dan daemon tomcat-diagnostic-event-collector.service.
  6. Stage 4 β€” Live Verification Suite: Mengeksekusi verifikasi relay Postfix dan simulasi insiden TomcatDown.

Expected Result

Job tomcat-monitoring Build 4 selesai dengan status SUCCESS.

Verify End-to-End Live Incident Response in Mailpit

Memverifikasi hasil pengujian insiden live pada antarmuka API Mailpit (http://localhost:8025):

  1. Memeriksa ketersediaan pesan insiden TomcatDown (FIRING):
  2. Subjek: [CRITICAL] [LAB] Tomcat Service: TomcatDown (Target: lab/tomcat-01/default)
  3. 4 Header RFC Enterprise: Auto-Submitted: auto-generated, X-Priority: 1, X-Incident-Target: lab/tomcat-01/default, X-Diagnostic-Rule: TomcatDown.
  4. Laporan 7-Seksi SRE: Mencakup Alert Summary, Diagnostic Assessment, Key Metrics Snapshot, Correlated Log Evidence, Unavailable/Contradicting Evidence, Recommended Operator Actions, dan Rule & Traceability.
  5. Memeriksa pesan resolusi insiden TomcatDown (RESOLVED):
  6. Subjek: [RESOLVED] [LAB] Tomcat Service: TomcatDown Restored (Target: lab/tomcat-01/default)
  7. Header RFC: X-Priority: 3 (Normal).
  8. Memeriksa antrean Postfix Relay:
    podman exec postfix-relay postqueue -p
    # Output: Mail queue is empty
    

Expected Result

Seluruh rantai tanggap insiden otomatis terbukti beroperasi 100% dari penerimaan webhook hingga pengiriman email terenkripsi.


βœ… Verification

Ringkasan matriks hasil eksekusi dan verifikasi live pada peladen Jenkins Controller:

Nama Pipeline Job Nomor Build Parameter Eksekusi Tahapan & Gerbang Mutu (Quality Gates) Hasil Akhir (Result)
tomcat-diagnostic-service Build 8 REGISTRY_HOST=localhost
PUSH_IMAGE=false
1. Checkout SCM
2. Verify Rootless Agent
3. Static Lint & Governance
4. Unit/Schema Tests (62 Suites PASS)
5. Build & Pin OCI Image (ef71e6e2b7d0)
6. Ephemeral Smoke Test
7. Post Actions (cleanWs)
🟒 SUCCESS
tomcat-diagnostic-event-collector Build 1 (Default) 1. Checkout SCM
2. Verify Host Utilities
3. Static Governance & Bash Validation
4. Spool Lifecycle & FIFO Pruning Tests
5. Post Actions (cleanWs)
🟒 SUCCESS
tomcat-monitoring Build 4 DEPLOY_ENV=production
EXECUTE_LIVE_TESTS=true
1. Checkout & Static Stack Validation
2. Verify Runtime & devops-lab Isolation
3. Zero-Touch Multi-Container Deployment
4. Postfix STARTTLS+SASL Relay Test
5. TomcatDown Live Incident Simulation
6. Post Actions (cleanWs)
🟒 SUCCESS

Bukti Telemetri Verifikasi Insiden Live (Mailpit & Postfix)

[MAILPIT AUDIT LOG]
--------------------------------------------------------------------------------
FIRING_SUBJECT    = [CRITICAL] [LAB] Tomcat Service: TomcatDown (Target: lab/tomcat-01/default)
FIRING_SENDER     = diagnostic@tomcat-monitoring.invalid
FIRING_RECIPIENTS = ['operator@tomcat-monitoring.invalid']
HEADER_AUTO_SUBMITTED = ['auto-generated']
HEADER_X_PRIORITY     = ['1']
HEADER_X_TARGET       = ['lab/tomcat-01/default']
HEADER_X_RULE         = ['TomcatDown']
SEVEN_SECTIONS_VERIFIED = true

RESOLVED_SUBJECT  = [RESOLVED] [LAB] Tomcat Service: TomcatDown Restored (Target: lab/tomcat-01/default)
HEADER_X_PRIORITY = ['3']
RESOLVED_VERIFIED = true

[POSTFIX QUEUE AUDIT]
--------------------------------------------------------------------------------
Command: podman exec postfix-relay postqueue -p
Status : Mail queue is empty (0 messages stuck)

βš™οΈ Commands Executed

Daftar perintah yang dieksekusi selama pengujian dan verifikasi end-to-end:

Kategori Aktivitas Perintah yang Dijalankan Tujuan / Cakupan
Pemeriksaan Status Agent curl -s -u "admin:<token>" "http://localhost:8080/computer/builder-01/api/json" Memastikan build agent builder-01 dalam status Online
Pengambilan Crumb curl -s -u "admin:<token>" 'http://localhost:8080/crumbIssuer/api/xml...' Mendapatkan token proteksi CSRF Jenkins
Pemicuan Build CI Diagnostic curl -s -X POST -u "admin:<token>" -H "$CRUMB" "http://localhost:8080/job/tomcat-diagnostic-service/buildWithParameters" Memicu eksekusi build 8 pada tomcat-diagnostic-service
Pemicuan Build CI Collector curl -s -X POST -u "admin:<token>" -H "$CRUMB" "http://localhost:8080/job/tomcat-diagnostic-event-collector/build" Memicu eksekusi build 1 pada tomcat-diagnostic-event-collector
Pemicuan Build CD Monitoring curl -s -X POST -u "admin:<token>" -H "$CRUMB" "http://localhost:8080/job/tomcat-monitoring/buildWithParameters?..." Memicu eksekusi build 4 pada tomcat-monitoring
Audit Log Eksekusi curl -s -u "admin:<token>" "http://localhost:8080/job/<job>/<build>/consoleText" Memeriksa keluaran log konsol eksekusi tahapan secara live
Audit Antrean Postfix podman exec postfix-relay postqueue -p Memverifikasi tidak adanya pesan tertahan pasca-pengiriman

🧾 Outcome

  1. Kelulusan 100% Seluruh CI/CD Pipeline: Seluruh alur otomasi CI/CD pada ketiga repositori platform Tomcat Monitoring berhasil dieksekusi dan diverifikasi pada Jenkins Controller dengan status SUCCESS tanpa kegagalan.
  2. Kepatuhan Mutu & Keamanan Non-Root: Seluruh proses build dan pengujian dieksekusi di dalam lingkungan Rootless Podman pada dedicated agent builder-01 dengan pembersihan ruang kerja bersih (workspace hygiene) pasca-build.
  3. Validasi Tanggap Insiden Live Sempurna: Sistem berhasil membuktikan pelaporan insiden end-to-end otomatis mulai dari deteksi kegagalan, evaluasi diagnostik, pengiriman email terenkripsi via Postfix Relay dengan otentikasi SASL, hingga penerimaan laporan 7-seksi SRE di Mailpit dan notifikasi pemulihan.
  4. Fase CI/CD Selesai Secara Paripurna: Seluruh rangkaian aktivitas rekayasa Continuous Integration and Deployment (TN-001 s.d. TN-007) telah selesai dengan standar enterprise.

πŸŽ“ Lessons Learned

  1. Isolasi Dependensi Terkendali pada Headless Runner: Dalam alur CI headless, repositori tidak menyimpan direktori node_modules di Git. Menjalankan npm ci --omit=dev --ignore-scripts di dalam kontainer runner sesaat sebelum eksekusi pengujian menjamin dependensi terpasang sesuai package-lock.json tanpa bergantung pada pustaka host pengembang.
  2. Substitusi Variabel Parameter Declarative Pipeline: Pada sintaksis blok sh '''...''' bersinglet kutip, Jenkins tidak melakukan interpolasi variabel Groovy ${params.VAR}. Mereferensikan variabel langsung sebagai variabel lingkungan bash ${VAR:-default} menjamin skrip dieksekusi secara portabel dan bersih.
  3. Go TLS Parser Memerlukan Struktur Sertifikat X.509 Baku: Pada Alertmanager, konfigurasi tls_config.ca_file menuntut berkas sertifikat berformat X.509 PEM yang valid secara sintaksis. Memberikan fallback pembuatan sertifikat self-signed darurat via OpenSSL pada skrip inisialisasi rahasia mencegah kegagalan panic saat layanan dijalankan di lingkungan pengujian baru.

⏭️ Next Steps

flowchart TD
    A["Completed<br/>TN-001: Architecture & Roadmap"] --> B["Completed<br/>TN-002 & TN-003: Standardization"]
    B --> C["Completed<br/>TN-004 & TN-005: Component CI"]
    C --> D["Completed<br/>TN-006: Stack CD Pipeline"]
    D --> E["Completed<br/>TN-007: End-to-End Live Verification<br/>(Jenkins Controller)"]
    E --> F["Phase Finalized<br/>Continuous Integration & Deployment<br/>(Ready for Production Operations)"]

Dengan selesainya aktivitas TN-007, seluruh fase Continuous Integration and Deployment telah tuntas 100%. Langkah selanjutnya:

  1. Mengonsolidasikan dan memperbarui indeks fase devops-handbook/docs/projects/tomcat-monitoring/engineering-journal/continuous-integration-and-deployment/index.md ke status Completed.
  2. Membangun dan menyinkronkan situs DevOps Handbook (http://localhost:8282) guna mempublikasikan rekam jejak teknis implementasi CI/CD enterprise.