DomaiNesia

Ticker

6/recent/ticker-posts

Belajar Continuous Integration (CI) di Gitlab untuk Testing Flask Application

Setelah mencoba sedikit mempelajari mengenai testing, sekarang saya mencoba belajar apa itu Continuous Integration (CI) dalam suatu siklus pengembangan perangkat lunak (software development).

Secara sederhana, CI (yang biasanya dikombinasikan dengan CD menjadi CI/CD, continuous integration/continuos delivery) yaitu suatu upaya meng-otomasi pekerjaan rutin developer setelah kode selesai ditulis.

Biasanya, developer akan melakukan push kode ke remote repository (biasanya di branch selain mater/main branch) untuk kemudian dilakukan merge dengan master branch.

Nah, untuk memastikan bahwa kode yang akan di-merge (digabungkan) dengan kode utama adalah kode yang benar dan telah teruji biasanya developer akan melakukan test terlebih dahulu terhadap kode yang telah ditulis.

Apabila dalam sehari seorang developer bisa melakukan puluhan kali update/push kode ke repo, maka bisa dipastikan dia akan melakukan "pekerjaan berulang" yang lumayan "membosankan" tapi perlu dilakukan, yaitu testing kode.

Atau dalam kasus lain setiap akan melakukan commit, push dan merge developer perlu memastikan kode yang dia buat bisa di build dan lolos test cases dengan baik.

Lebih jauh lagi sebenarnya CI ini akan dilanjutkan ke CD dimana aplikasi yang sudah di build, test tersebut akhirnya di deploy ke production (diterapkan di server).

Di sinilah peran CI mulai terasa, dimana developer dapat mendelegasikan tugas rutin yang berulang tersebut kepada suatu pipeline CI/CD yang telah dikonfigurasi sebelumnya (pre-configured) untuk memudahkan tugas rutinnya, sekaligus memastikan bahwa kode yang dia simpan di repository adalah kode yang selalu diuji/lolos uji.

Dengan demikian CI ini salah satu fungsinya kurang lebih adalah membantu dalam menerapkan pipeline Quality Assurance untuk produk perangkat lunak kita.

Awalnya saya masih belum terlalu paham. Padahal sebenarnya konsep ini sudah ada sejak lama.

Dulu awalnya saya melihat di banyak Github repo software-software opensource yang terkenal ada badge-badge menarik dengan tulisan "passed" berwarna hijau. Waktu itu masih belum tahu apa fungsinya. Setelah sekian lama akhirnya baru ngeh sekarang.

Nah, dalam kasus ini saya belajar Continuous Integration (CI) di Gitlab untuk Testing Flask Application untuk aplikasi web yang saya buat. Namun demikian, masih terdapat kegagalan dalam hasil pipeline yang saya buat khususnya pada stage test (InsyaAllah saya update jika saya berhasil, atau jika ada dari anda yang sudah tahu caranya dan lancar dan ahli menggunakan pytest di Gitlab CI anda bisa membantu saya di kolom komentar :) )


Contoh yang awal ini dihasilkan jika semua stage passed/lolos. Sementara jika ada stage yang tidak berhasil maka akan bertanda merah dan failed.

Secara umum isi dari file .gitlab-ci.yml cukup sederhana dan straighforward. Contohnya telah dijelaskan di dalam dokumentasi gitlab ci berikut.

Pipeline saya sendiri gagal jalan pada stage test karena hasil running dari stage sebelumnya ternyata harus disimpan dalam artifacts untuk bisa diacu / refer pada stage selanjutnya.

Namun demikian perlu diingat bahwa ternyata ini akan membuat storage kita di repo lama-lama menjadi membengkak. Saya sendiri dengan size kode asli hanya sekitar 4.5 MB membengkak menjadi > 100 MB setelah menjalankan pipeline dengan menyimpan artifacts yang ada di stage preparation untuk diacu pada stage test.

Setelah artifact dijalankan ternyata stage test jg masih gagal. ternyata saya menemui error module not found. Mungkin ini terkait penempatan folder test saya terhadap folder app flask saya. Selain itu mungkin ini terkait juga dengan relative import yang saya gunakan di file test nya. Sementara saya belum menemukan solusinya agar berhasil.

Jika pembaca punya solusinya, boleh lah share di kolom komentar.. terima kasih..

Post a Comment

0 Comments