PS-ADR-0013¶
| Property | Value |
|---|---|
| ADR ID | PS-ADR-0013 |
| Title | Execute Deployment through Dedicated Jenkins Agent |
| Project | Personal Site |
| Section | Continuous Deployment |
| Status | Accepted |
| Date | 2026-08-08 |
π Overview¶
Project Personal Site menggunakan dedicated Jenkins deployment agent pada host runtime NGINX untuk menjalankan pipeline CD dan perintah Podman secara lokal.
π Context¶
Jenkins controller dan container NGINX berada pada segmen Podman network yang berbeda. Runtime NGINX menggunakan rootless Podman dan menyimpan static content pada volume www-personal-site.
Pipeline CD membutuhkan akses ke Podman image, container, network, dan volume milik user runtime. Mengekspos Podman socket melalui network akan memperbesar permukaan akses dan menambah kompleksitas pengamanan.
βοΈ Decision¶
Pipeline CD dijalankan pada dedicated Jenkins deployment agent yang memenuhi ketentuan berikut:
- agent ditempatkan pada host runtime NGINX;
- agent berjalan sebagai user yang sama dengan pemilik rootless Podman runtime;
- job deployment menggunakan label agent khusus;
- Podman CLI dijalankan secara lokal oleh agent; dan
- Podman socket tidak diekspos melalui network untuk kebutuhan deployment.
ποΈ Architecture¶
flowchart LR
Controller["Jenkins Controller<br/>CI/CD Orchestrator"]
subgraph RuntimeHost["NGINX Runtime Host"]
Agent["Dedicated Jenkins<br/>Deployment Agent"]
Podman["Rootless Podman"]
Volume["Volume<br/>www-personal-site"]
NGINX["NGINX Container"]
Agent -->|Local Podman CLI| Podman
Podman --> Volume
Podman --> NGINX
Volume -->|/var/www/html:ro| NGINX
end
Controller -->|Jenkins agent connection| Agent
Jenkins controller hanya mengorkestrasi job. Seluruh operasi yang mengubah runtime dilakukan oleh deployment agent pada host NGINX dalam rootless Podman user context yang sama.
π‘ Rationale¶
- Memberikan akses lokal ke Podman runtime tanpa mengekspos Podman socket.
- Memastikan agent melihat container, image, network, dan volume rootless yang benar.
- Memisahkan workload build dan deployment melalui label agent.
- Mengurangi ketergantungan pada akses SSH per stage pipeline.
- Tetap bekerja meskipun Jenkins dan NGINX berada pada segmen Podman network berbeda.
β οΈ Consequences¶
Positive¶
- Perintah deployment dieksekusi dekat dengan target runtime.
- Podman API tidak perlu dipublikasikan melalui network.
- Rootless Podman isolation tetap dipertahankan.
- Pipeline dapat menggunakan Podman CLI secara langsung.
Trade-offs¶
- Jenkins agent harus dipasang dan dipelihara pada host runtime.
- Agent memperoleh kemampuan untuk mengelola workload Podman milik user runtime.
- Hak akses job dan label agent harus dibatasi untuk pipeline deployment.
- Ketersediaan deployment bergantung pada status agent dan koneksinya ke controller.
π Related Decisions¶
- PS-ADR-0001 β Use Jenkins as Automation Server
- PS-ADR-0002 β Containerized Ephemeral Build Environment
- PS-ADR-0012 β Store Static Content in Podman Named Volume
π Status¶
Accepted
π Date¶
2026-08-08