Nafies Luthfi

Life will always feel wonderful if we always think positively.

Testing Laravel: Tentang Continuous Integration

Bismillahirrahmanirrahim.

Baik, karena kita sudah memiliki sebuah mini-project Laravel yang dilengkapi dengan automated testing, kita bisa mencoba yang namanya Continuous Integration. Bagi teman-teman yang belum mengetahui apa itu Continuous Integration (atau kita singkat “CI”), kurang lebih yang saya pahami seperti ini:

Continuous Integration adalah layanan yang melakukan build dan pengujian otomatis, yang terintegrasi dengan hosting repository source code (seperti Github, Gitlab, atau Bitbucket). Di mana setiap kita melakukan push commit-commit baru, atau ada pull request ke dalam repository project, layanan ini langsung menjalankan build dan test, sehingga jika ada error atau kegagalan test akan segera ketahuan.

Catatan: untuk yang lebih lengkap, silakan teman-teman coba googling “continuous integration adalah”.

Sebelum kita melakukan setup Continuous Integration pada project Testing Laravel ini, sebaiknya kita pahami dulu apa manfaat Continuous Integration untuk project kita, serta beberapa layanan CI gratis yang bisa kita gunakan untuk project kita.

Kenapa perlu Continuous Integration?

Seperti biasa, sebelum kita mempelajari/menggunakan suatu alat bantu, kita harus tahu dulu manfaatnya untuk kita. Dari situ kita bisa memutuskan apakah kita memang perlu atau tidak.

Untuk Single Fighter

Jika kita mengerjakan project sendirian, tanpa kolaborasi dengan programmer lain, satu alasan mengapa kita perlu CI, yaitu untuk memastikan bahwa testing aplikasi tidak hanya passed di localhost saja.

“Testing hanya passed di localhost saja? kok begitu?”

Ya, kalau kita kerja sendirian, kita tahunya di tempat kita (localhost) semua berjalan lancar, tapi kita belum tahu nanti ketika kita build ke server produksi (apakah lancar atau tidak?), karena pasti ada perbedaan spesifikasi hardware dan software pendukung antara localhost dengan server produksi (nanti).

Nah, CI dapat membantu kita untuk memastikan, proses langkah yang dilakukan saat kita build aplikasi ke server sudah benar dan testingnya passed, sebagaimana di locahost kita. Disamping itu, jika suatu saat ada programmer lain meneruskan project ini tanpa keterlibatan kita, atau jika ada yang bergabung, project kita sudah siap untuk digarap secara kolaborasi.

Catatan: “build” yang dimaksud disini adalah proses deploy atau installasi aplikasi pada server.

Gambar dibawah adalah contoh commit push yang langsung dicek oleh Travis CI dan Style CI.

CI Check pada Commit Push

Untuk Kolaborasi

Untuk project yang dibangun dengan cara kolaborasi, ada PM (Project Manager/Maintainer) dan kolaborator yang terlibat, ada manfaat lain yang didapatkan (selain manfaat untuk single fighter di atas), yaitu :

  1. Setiap kolaborator melakukan push commit atau pull request, CI langsung melakukan build dan test untuk memastikan semua fitur berjalan lancar.

  2. Testing yang sudah passed di localhost seorang kolaborator, bisa jadi failed di CI dengan berbagai sebab (ini akan jadi bahan diskusi dan ilmu tambahan untuk kolaborator).

  3. Menghindarkan problem jika: Testing passed di localhost kolaborator, tetapi failed di localhost PM.

  4. Meringankan beban PM (Project Manager/Maintainer).
    Kalau seorang PM harus : git pull kemudian build di localhostnya dulu, untuk memastikan semua testing passed, kemudian baru melakukan code review. Kan lumayan makan waktu, ya?

    Dengan dibantu CI ini, PM tinggal bilang:
    “Bro, silakan bikin testingnya passed dulu sebelum ane review kerjaan ente.”

    Apakah ini meringankan pekerjaan PM? Tentu saja.

Gambar dibawah adalah contoh pull request yang langsung dicek oleh layanan CI.

CI Check pada Pull Request

Layanan CI Gratis

Ada beberapa layanan CI yang saya ketahui dan coba gunakan untuk project open-source maupun private. Umumnya layanan CI selalu gratis untuk project-project open-source. Sedangkan untuk project private, biasanya berbayar, tapi ada juga yang gratis.

1. Travis CI

Travis CI adalah layanan CI yang mendukung banyak bahasa pemrograman dan banyak digunakan untuk project-project open-source di Github. Saya juga menggunakan Travis CI untuk beberapa project open-source yang saya kembangkan. Layanan ini berbayar kita gunakan untuk project private.

Berikut contoh hasil build dan test di Travis CI, bisa coba klik link 15.1 untuk melihat detailnya.

Layanan Travis CI

2. Codeship

Codeship adalah layanan CI yang menyediakan akun gratis untuk project private dengan batasan tertentu. Batasannya (saya rasa) sangat cukup untuk kebutuhan freelance web developer. Saya sendiri menggunakan codeship ini untuk project-project private di Bitbucket. Kita bisa melihat perbandingan akun basic dengan akun pro pada halaman web ini.

Layanan Codeship CI

3. Bitbucket Pipeline

Bitbucket Pipeline adalah layanan CI milik Bitbucket, paket akun usernya mengikuti paket akun Bitbucket yang kita miliki. Gratis dengan batasan jumlah user (5 orang). Jika kita menggunakan Bitbucket untuk hosting source code private, kita bisa langsung menggunakan layanan ini.

Layanan Bitbucket Pipeline

4. Gitlab CI

Gitlab CI serupa dengan pipeline milik Bitbucket, yang ini adalah layanan milik Gitlab. Kebetulan saya belum pernah mencoba layanan ini di Gitlab.

Layanan CI Standarisasi Sintax

Nah, layanan CI yang ini berbeda dengan keempat layanan di atas, ini diluar urusan testing. Yang ini adalah layanan untuk mengecek sintax/script yang kita tulis pada project. Misal kita menggunakan bahasa pemrograman PHP, maka dia akan mengecek apakah gaya “coding” (sintax) yang kita tulis sudah sesuai dengan standar atau tidak.

1. Style CI

Style CI ini salah satu layanan CI untuk pengecekan sintax itu. Jadi dengan Style CI ini, kita dibantu mengecek seluruh script di file-file PHP yang ada. Jika ditemukan sintax yang tidak sesuai standar, maka Style CI menyatakan “tidak lolos uji”, dan Style CI akan menawarkan Pull Request untuk memperbaikinya.

Contohnya seperti project Free PMO, sintaxnya ternyata banyak yang tidak standar, ada 151 file yang diperbaiki melalui Pull Request oleh Style CI.

Layanan Style CI

Sayangnya layanan ini gratis hanya untuk project open-source, untuk private repo berbayar.

2. Nitpick CI

Layanan serupa Style CI adalah Nitpick CI, gratis untuk project open-source dan berbayar untuk project private. Nitpick CI khusus untuk bahasa PHP dan PSR-2.

Kesimpulan

Setelah pembahasan di atas, coba kita simpulkan manfaat dari layanan Continuous Integration.

  1. CI membantu memastikan bahwa automated testing project kita passed diluar localhost (ini penting).
  2. CI sangat membantu dalam project kolaborasi yang dikerjakan oleh banyak developer.
  3. CI mempermudah kerja Project Maintainer, dalam membantu memastikan semua perubahan yang baru tidak “merusak” fitur-fitur yang telah ada.
  4. CI yang berkaitan dengan sintax membantu kolaborator belajar standarisasi sintax dan membantu agar kita lebih fokus kepada proses bisnis dan logika bisnis dalam project, ketimbang berdebat tentang gaya menulis kode.

Baik, lebih kurang itu manfaat yang kita dapatkan dari penggunaan layanan Continuous Integration dalam membangun sebuah project. Saya mohon koreksi dari teman-teman jika ada pemahaman saya yang keliru terkait Continuous Integration ini.

Satu lagi, Continuous Integration tidak hanya digunakan saat development saja, pada saat maintenance dan improvement pun Continuous Integration akan tetap kita gunakan. Karena manfaat yang didapatkan dengan adanya Continuous Integration ini bisa kita gunakan untuk jangka panjang. Mungkin itu salah satu sebab kenapa dinamakan “Integrasi secara terus menerus”.

Selanjutnya insyaallah kita mencoba setup Continuous Integration menggunakan Travis CI pada project Testing Laravel. Terima kasih teman-teman atas waktunya.