gitlab flow deployment

Sometime, proses deploy itu merepotkan bagi sebagaian orang seperti saya yang bekerja di pursahaan kecil dengan jumlah !>= 20 orang programer apalagi sekarang jaman2nya microservice yang aplikasinya harus build 3 - 10 project. Klo dulu enak aplikasi yang di deploy cuman 1 war buncit (Monolith) klo sekarang aplikasi udah di pecah2 jadi ya makin banyak project makin banyak juga proses deploynya (jadi makin banyak kerjaannya~ heheh).

gitlab logo

Dari pada saya deploy aplikasinya setiap project mending saya buatkan script deployment dengan CI/CD, supaya proses deployment dijalankan otomatis dan terintegrasi dengan Version Controls System (git) dan waktunya bisa untuk main atau explore technology baru. Untuk menggunakan CI/CD, kita harus menyediakan toolsnya diantarnya:

  • Gitlab CE
  • Gitlab Runner
  • Environtment
    • OS seperti Linux, Mac or Windows, rekomendasi Linux
    • SDK seperti Java, PHP, AndroidSDK dan lain-lain
    • Build Tools seperti maven, gradle, composer, npm, gulp dan lain-lain.

Ok, langsung ja kita setup-setup dulu ya. pertama kita harus siapkan dulu environmentnya seperti OS, SDK dan build tools. Karena kita biasanya untuk server menggunakan Linux yang free, maka saya pilih Ubuntu Server dan Untuk development kita biasanya kebanyakan project menggunakan Java jadi didalam OS Ubuntu server kita akan install juga Oracle JDK 8 atau OpenJDK 8 serta buildtoolsnya yang paling mudah yaitu Apache Maven

Install gitlab-runner

Setelah kita menambahkan apt-repository gitlab, curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash kita bisa langsung install gitlab-runner dengan perintah berikut:

apt-get install -y gitlab-runner

Pastikan setelah install service gitlab-runner telah berjalan dengan perintah:

service gitlab-runner status

Seperti berikut:

gitlab-runner status

Create project, example Java Spring

Sekarang kita buat aja, sample project template yang telah disedikan oleh gitlab yaitu springboot template seperti berikut:

springboot template new

Setelah itu click Use template dengan pilihan Spring maka tampilannya seperti berikut:

springboot template

Kemudian kita isi aja detailsnya dengan property seperti berikut:

  • Project name : spring-gitlab-ci-example
  • Project slug: spring-gitlab-ci-example
  • Project Description (optional): Belajar gitlab ci/cd dengan springboot v2
  • Visibilty project: Public
  • Kemudian click Create project

Setelah projectnya udah di clone oleh gitlab, dan udah jadi. Sekarang kita ke menu Settings -> CI/CD -> Runner seperti berikut:

gitlab ruunner menu

Di tab Runner kemudian Expanse kemudian cari ci token seperti berikut:

gitlab ci token

Register gitlab-runner

Untuk menjalankan build automated kita butuh me-register gitlab-runner ke projectnya dengan menggunakan perintah seeprti berikut:

sudo gitlab-runner register

Setelah itu akan muncul form seperti berikut:

gitlab runner register new

kemudian kita bisa check di gitlabnya dengan me-refresh halaman setting tersebut, kemudian ckeck kemali di tab Runner pastikan lampu indikator berwana hijau seperti berikut:

gitlab runner registered

Setup script deployment

Di gitlab, secara default akan meng-aktifkan auto-devops, tpi saya mau custome contohnya untuk case kali ini sya cuman mau build kemudian di package menjadi jar saja. Jadi sekarang kita buat file dengan nama .gitlab-ci.yml di root project dengan isi seperti berikut:

variables:
  MAVEN_CLI_OPTS: "--show-version"

# Cache downloaded dependencies and plugins between builds.
cache:
  paths:
    - .m2/repository

building:
  stage: build
  script:
    - 'mvn $MAVEN_CLI_OPTS clean package'
  only:
    - master
  artifacts:
    paths:
      - target/*.jar

Seperti berikut:

file .gitlab-ci.yml location

Setelah itu Commit and Push dan setelah itu maka proses build akan berjalan, kita check di menu CI/CD -> Pipeline seperti berikut:

pipeline running

Selain itu juga kita bisa breakdown lebih dalem lagi proses apa yang sedang berjlaan dengan meng-click yang sedang running seperti berikut:

job status

Setelah itu kita juga bisa liat consolenya yang di jalankan di gitlab-runner dengan click Jobs maka seperti berikut hasilnya jika success:

job success

Summery

  • Dengan menggunakan gitlab CI/CD kita tidak perlu melakukan build jika ada perubahan coding cukup push perubahan ke branch tertentu maka gitlab ci akan otomatis build
  • Effort setiap project harus di daftarkan gitlab-runner tapi hanya sekali setting aja, klo kata pribahasa bahasa Java write ones execute everytime