Setelah melewati proses development aplikasi, maka tahap berikutnya adalah melakukan deployment aplikasi ke server yang dituju. Sebelum melakukan deployment, maka aplikasi wajib dilakukan testing terlebih dahulu. Proses seperti testing, building dan deployment sebenarnya dapat dijalankan secara otomatis dengan menggunakan tool automated deployment misalnya seperti :
Untuk melakukan integrasi dari satu proses dengan proses lain misalnya seperti testing kemudian menjalankan building lalu mendeploy, dalam hal ini sering disebut dengan Continuous Integration. Di dalam proses Continuous Integration, terdapat 2 jenis yaitu :
- Continuous Deployment adalah proses deployment yang dijalankan secara otomatis mulai dari testing, building hingga deployment ke server production
- Continuous Delivery adalah proses deployment yang dijalankan secara otomatis mulai dari testing, building, akan tetapi untuk proses deployment akan dilakukan secara manual. Biasanya yang melakukan deployment ke server production adalah manager IT yang tertinggi untuk memastikan aplikasi berjalan lancar.
Pada artikel ini, penulis akan membahas bagaimana cara melakukan integrasi gitlab (git server) dengan jenkins. Source code yang telah di push ke gitlab nantinya akan diclone di jenkins server lalu dilakukan testing, jika sukses maka source code akan di deploy ke server production, dalam artikel ini penulis akan mencoba melakukan deployment otomatis ke heroku. Berikut adalah arsitektur yang akan penulis gunakan untuk membuat Continuous Deployment dengan menggunakan docker, gitlab dan jenkins.
Setup Docker Compose
Bagi anda yang belum mengerti bagaimana cara menggunakan docker, silahkan baca di artikel Belajar Docker dan Belajar Load Balancing Dengan HAProxy, Docker Dan Spring Boot. Silahkan buat sebuah file docker-compose.yml
lalu isikan source code seperti berikut.
Konfigurasi docker compose yang kita gunakan adalah versi 2. Disini penulis membuat 2 container yaitu docker-gitlab
dengan base image gitlab/gitlab-ce
dan docker-jenkins
dengan base image jenkins/jenkins
. Masing - masing container akan melakukan expose port sehingga kita dapat melakukan akses dari luar container. Pada konfigurasi diatas kita menggunakan fungsi networks, fungsi networks ini memungkinkan kita untuk mengakses 2 way dependency antar container, secara default sebenarnya kita dapat menggunakan fungsi links
, akan tetapi jika menggunakan 2 way dependency link maka akan muncul error, untuk mengatasi hal diatas maka kita gunakan networks untuk menghubungkan 2 container dengan kebutuhan 2 way dependency. Dengan menggunakan network maka container jenkins dapat mengakses http://gitlab dan container gitlab dapat mengakses http://jenkins. Jika telah selesai, kita akan melakukan menjalankan 2 container diatas dengan perintah.
Jika berhasil maka akan muncul output seperti berikut.
Setup Jenkins
Ketika jenkins startup, jangan lupa untuk mencatat key security, biasanya terdapat pada baris berikut.
Dapat dilihat, bahwa key security yang akan kita gunakan nantinya adalah a541f4e0f9f94dff807afb3273c260a1
. Jika anda melihat output seperti berikut.
Ini menandakan bahwa jenkins adalah telah berjalan dan siap digunakan. Untuk gitlab, nantinya kita akan lakukan konfigurasi jika gitlab telah berjalan dengan sempurna, gitlab membutuhkan waktu yang lebih lama dikarenakan melakukan beberapa setup database dan lain sebagainya. Oke silahkan buka http://127.0.0.1:8080 di browser anda. Jika berhasil maka akan muncul output seperti berikut.
Lalu silahkan isikan security key yang telah anda simpan. Jika berhasil maka akan muncul halaman Customize Jenkins
untuk melakukan instalasi plugin, silahkan pilih install suggested plugins
, nantinya anda akan dibawa ke halaman proses instalasi plugin seperti berikut.
Jika instalasi plugin telah selesai, nantinya anda akan diarahkan ke halaman pengisian data administrator, silahkan isi sesuai dengan kebutuhan anda. Berikut adalah halaman awal ketika anda memasuki dashboard jenkins.
Instalasi Plugin Gitlab
Langkah selanjutnya, karena kita menggunakan gitlab, maka kita harus melakukan instalasi plugin gitlab terlebih dahulu. Berikut adalah langkah - langkahnya.
- Silahkan pilih menu
manage jenkins
yang ada disebelah kanan anda. - Lalu pilih menu
manage plugins
. - Lalu pilih tab available
- Kemudian silahkan cari plugin
GitLab Plugin
, cek list lalu pilihinstall without restart
- Kemudian akan diarahkan ke halaman proses instalasi, silahkan cek list
Restart Jenkins when installation is complete and no jobs are running
agar jenkins melakukan restart setelah melakukan instalasi plugin tersebut.
Setup Gradle Dan JDK
Project yang akan penulis deploy adalah project berbasis gradle, maka kita perlu melakukan setup gradle dan juga jdk nya. Berikut adalah langkah - langkahnya.
- Silahkan pilih menu
manage jenkins
yang ada disebelah kanan anda. - Lalu pilih menu
Global Tool Configuration
- Pada menu JDK, silahkan pilih
Add JDK
- Bagian name isikan dengan
JDK 8
, cek list padaagreement
dan jangan lupa login dengan menggunakan oracle account. - Pada menu gradle, silahkan pilih
Add Gradle
- Bagian name isikan dengan
Gradle 4.0.2
. - Jika telah selesai silahkan klik save.
Setup Gitlab
Langkah selanjutnya kita akan melakukan setup gitlab, silahkan akses http://127.0.0.1
, secara default gitlab menggunakan port 80. Ketika anda mengakses pertama kali, anda akan diminta untuk mengisi password baru, silahkan isi dengan kebutuhan anda. Jika telah selesai, anda akan dipindahkan ke halaman login seperti berikut.
Silahkan login dengan menggunakan user root
dan password yang telah anda register kan pada halaman sebelumnya. Jika berhasil maka akan muncul halaman seperti berikut.
Setup User Jenkins Pada Gitlab
Repository yang ada di dalam gitlab biasanya akan disetting menjadi private repository, sehingga hanya user tertentu yang dapat melakukan akses terhadap repository tersebut. Agar jenkins dapat melakukan akses repository tersebut maka kita harus melakukan register untuk user jenkins. Silahkan logout terlebih dahulu, lalu lakukan registrasi melalui halaman register gitlab. Setelah selesai, silahkan logout kembali lalu login kembali menggunakan user root
. Silahkan buat sebuah group dengan nama jenkins-group
lalu buat sebuah project di dalam jenkins-group
dengan nama Belajar-Jenkins
seperti gambar berikut.
Setelah selesai, silahkan pilih menu admin area (gambar kunci) seperti berikut
Maka akan muncul halaman baru, silahkan pilih group jenkins-group
dibagian kanan bawah. Nantinya anda akan masuk ke halaman management user di dalam group tersebut, silahkan pilih user jenkins
dan berikan hak akses sebagai owner
seperti gambar berikut.
Setup Credentials Pada Jenkins
Setelah membuat user pada gitlab, sekarang kita akan mencoba membuat credentials pada jenkins, sehingga nantinya jenkins dapat melakukan clone dan deployment otomatis ke heroku. Silahkan pilih menu credentials pada menu jenkins yang berada di bawah enu My views
, maka akan muncul menu system yang telah di expand, silahkan pilih menu system tersebut. Lalu pilih domain Global credentials (unrestricted)
, dan kemudian pilih menu Add Credentials
. Untuk user jenkins silahkan isikan seperti berikut.
Untuk user heroku juga silahkan isikan seperti berikut.
Yang terakhir, kita harus mendaftarkan api token gitlab pada jenkins, untuk membuat api token gitlab, silahkan login kembali ke gitlab dengan menggunakan user root
, lalu pilih menu setting
dan pilih tab access token
. Lalu isikan seperti berikut.
Jika sudah, nantinya akan muncul api token gitlab, kemudian silahkan isikan seperti berikut di menu jenkins.
Berikut adalah list credentials yang didaftarkan.
Setup Connection Jenkins Ke Gitlab
Agar jenkins dapat mengakses source code pada gitlab maka kita harus melakukan konfigurasi connection terlebih dahulu pada jenkins. Berikut adalah tahapan nya.
- Pilih menu manage jenkins.
- Lalu pilih configure system.
- Lalu isikan konfigurasi berikut pada menu gitlab
Pada gitlab host URL, penulis menggunakan http://gitlab, ini disebabkan kita menggunakan network dari docker, sehingga untuk memanggil connection gitlab, kita dapat menggunakan url http://gitlab. Kemudian silahkan lakukan test connection, jika error silahkan periksa konfigurasinya kembali.
Setup Project Pada Heroku
Silahkan login pada dashboard heroku, lalu silahkan buat sebuah app, bebas dengan nama apa saja, misalnya disini saya membuat projectnya dengan nama belajar-jenkins
. Maka nantinya url git yang digunakan akan menjadi git@heroku.com:belajar-jenkins.git
Membuat Project Pada Jenkins
Silahkan akses kembali dashboard jenkins, silahkan pilih menu create new jobs
atau new item
, lalu pilih menu Freestyle Project
, nama project diisikan dengan Belajar-Jenkins
lalu pilih oke. Untuk bagian general silahkan pilih gitlab connection seperti berikut.
Pada source code management silahkan isikan seperti berikut.
Pada bagian rspec silahkan isikan sintak berikut untuk origin.
dan sintak berikut untuk heroku.
Pada bagian build triggers silahkan isikan seperti berikut.
Pada bagian build environment silahkan pilih Delete workspace before build starts
. Pada bagian build silahkan pilih add build step
lalu pilih invoke gradle script
. Pada bagian tasks silahkan isikan dengan perintah.
berikut adalah konfigurasi untuk invoke gradle
Pada bagian Post-build Actions, silahkan pilih menu add post-build action
, lalu pilih publish build status to gitlab commit, kemudian pilih menu git publisher, lalu silahkan ubah konfigurasinya menjadi seperti berikut.
Setup WebHook Pada Gitlab
Setiap 1 project yang ada di jenkins akan mewakili 1 project atau bahkan akan mewakili 1 branch yang ada di gitlab. Silahkan login kembali pada gitlab dengan user root
, lalu pilih project yang akan didaftarkan webhook nya. Pilih menu setting pada projectnya, lalu pilih menu integrations kemudian isikan konfigurasinya seperti berikut.
Kemudian lakukan test webhook nya, jika berhasil maka akan muncul output seperti berikut.
Pesan diatas dikarenakan repository masih kosong dan belum ada source code yang dicommit.
Setup Project Yang Akan Di Deploy
Project yang akan kita deploy ke heroku adalah project spring boot dengan menggunakan kotlin, silahkan download terlebih dahulu projectnya di Belajar-Jenkins. Lalu silahkan extract project nya. Silahkan inisialisasi git pada project tersebut dengan perintah.
Lalu inisialisasi remote git nya dengan perintah
lalu lakukan add semua project dengan perintah berikut.
lalu commit seperti berikut.
Melakukan Deploy
Untuk melakukan deploy, silahkan lakukan push dengan perintah.
Ketika dijalankan teryata menyebabkan error, ini disebabkan karena ssh key yang ada di docker belum kita daftarkan pada heroku. Sebelumnya, kita akan melakukan instalasi heroku cli terlebih dahulu pada docker, untuk dapat mengakses ssh docker, kita membutuhkan id container yang sedang aktif. Silahkan jalan perintah berikut untuk mengetahui id nya.
maka hasilnya akan seperti berikut.
Untuk mengakses root container silahkan jalankan perintah berikut.
Kemudian silahkan jalankan perintah dibawah ini berdasarkan baris nya.
Setelah selesai, silahkan keluar dari ssh, kemudian login lagi ke ssh dengan perintah berikut.
Kemudian lakukan login heroku dengan perintah.
silahkan lakukan login dengan username dan password anda. Tahap selanjutnya, silahkan generate ssh anda dengan perintah.
Lalu setting git nya dengan perintah
Setelah selesai, silahkan jalankan perintah berikut untuk memunculkan public key.
Kemudian hasilnya public key nya silahkan didaftarkan di heroku. Setelah selesai, coba lakukan clone repository dari heroku agar mendapatkan hak akses ssh nya dengan perintah.
Maka akan muncul info seperti berikut.
Silahkan ketik yes, maka project akan di clone dari heroku. Nah jika telah selesai, silahkan balik lagi ke dashboard project jenkins, silahkan pilih menu build now, sehingga jenkins akan menjalankan ulang proses test build dan deploy ke heroku.
Jika berhasil maka akan muncul output seperti berikut.
Jika ingin melihat status pipeline yang ada di gitlab, silahkan login kembali dengan user root
lalu akses project, pilih menu pipelines
dan berikut adalah hasilnya.
Untuk mengecek apakah sudah berhasil di deploy atau belum, silahkan cek di https://{nama-aplikasi-heroku}.herokuapp.com/api/barangs, karena saya menggunakan belajar-jenkins, maka saya mengakses nya di https://belajar-jenkins.herokuapp.com/api/barangs dan berikut adalah hasilnya.
Jika sewaktu - waktu terjadi error pada saat testing, maka jenkins akan mengeluarkan pesan error dan deployment ke production tidak akan dilakukan, berikut output jika testing error.
Dan berikut jika output yang akan ditampilkan pada gitlab.
Sekian artikel mengenai Belajar Melakukan Integrasi Jenkins Dan Gitlab Pada Docker, jika ada pertanyaan atau saran silahkan isi di kolom komentar dan Terima kasih :).