Cara Membuat CI/CD GitHub Actions untuk Aplikasi Go dan Docker ke VPS
Oleh Anang H. Darmawan

Foto: Gabriel Heinzer / Unsplash
Deploy masih dilakukan dengan cara menyalin file lewat FTP dan me-restart service manual akan terasa menyenangkan sampai aplikasi tumbuh, lalu error muncul dan tidak ada yang tahu apa yang sebenarnya dijalankan di server. CI/CD dengan GitHub Actions mengubah proses itu menjadi langkah yang terulang dan bisa dilacak.
Untuk aplikasi Go yang dikemas dalam Docker, pola yang umum terdiri dari empat tahap: test, build image, publish ke registry, lalu deploy ke VPS lewat SSH.
Garis besar workflow
Satu file workflow di direktori .github/workflows cukup untuk seluruh alur. Setiap push ke branch tertentu memicu tahap test, lalu dilanjutkan build dan deploy kalau test lulus. Gagal di satu tahap menghentikan tahap berikutnya, jadi kode yang rusak tidak akan naik ke server.
Mulai dari workflow yang terkecil: jalankan test dulu untuk memastikan runner-nya sehat, lalu tambahkan tahap berikutnya satu per satu.
Secrets dan versi image
Kredensial untuk Docker Hub dan SSH jangan pernah ditulis di dalam file workflow. Simpan lewat menu settings di repository, dan panggil sebagai variabel. Setiap kali kamu menampilkan secret di log, itu menjadi jejak yang tidak perlu.
Tag image juga menentukan kemudahan rollback. Tag dengan hash commit, misalnya my-app:abc1234, membuat tiap versi kode punya image yang unik. Tag latest terlalu longgar dan menyulitkan memastikan versi mana yang sedang berjalan.
Test dan build image
Tahap test memakai runner yang sudah menginstal Go, lalu menjalankan go test. Untuk aplikasi yang butuh database dalam tes, jalankan service pendukung lewat container di dalam job.
Setelah test lulus, build image pada tag unik dan push ke registry. Push di job yang terpisah dari test membuat ulang build tidak perlu menjalankan ulang seluruh test.
Deploy dan rollback
Tahap deploy menyambung ke VPS melalui SSH dan menjalankan command seperti menarik image terbaru lalu me-restart container. Karena image sudah ditandai unik, kamu tinggal memberitahu orchestrator versi mana yang dipakai.
Kalau terjadi masalah setelah deploy, rollback tinggal menjalankan kembali versi image sebelumnya. Kalau alur ini masih manual, terapkan dulu sistem versi yang jelas sebelum menambahkan otomatisasi, supaya rollback punya tujuan yang pasti. Alasan mengapa alur ini penting dijelaskan lebih jauh di artikel Kenapa Monitoring Server dan CI/CD Otomatis.
Alternatif siap pakai
Kombinasi workflow dan kode aplikasi adalah bagian yang paling banyak menyita waktu. GitHub Actions CI/CD untuk Golang + Docker (Rp200.000) menyediakan pipeline siap pakai yang menjalankan test, membangun image Docker, mengirim ke Docker Hub, lalu deploy ke VPS lewat SSH. Untuk sisi aplikasinya, Golang REST API Boilerplate (JWT + PostgreSQL) (Rp250.000) memberi dasar clean architecture dengan autentikasi dan CRUD yang langsung berjalan, sehingga tinggal fokus menambah endpoint bisnis. Mulai dari satu endpoint sederhana, pastikan pipeline membawanya sampai ke server, lalu naikkan kompleksitas.
