Minggu Terakhir Sprint 1 & Awal Sprint 2

Pada minggu terakhir sprint 1 ini saya telah menyelesaikan tiga halaman pemantauan CYD oleh fakultas serta memperbaiki beberapa hal dalam chores seperti code coverage dan auto deployment. Berikut adalah detail hal-hal yang saya lakukan pada minggu terakhir sprint 1 ini.

  • Implementasi fitur

Pada minggu ini saya mengimplementasikan fitur donwload file berkas CYD dan acceptance letter beserta exceptionnya. Pada setiap row atau setiap CYD pada tabel CYD terdapat tombol download yang akan mendownload file yang sesuai dengan CYD pada row tersebut.

Exception terjadi ketika tidak ada file yang didownload. Pada halaman ini, akan ditampilkan “Belum tersedia” pada kolom download file. Exception yang saya buat berlapis, maksudnya seandainya karena suatu kesalahan terdapat tombol “Unduh” padahal file tidak dapat didownload, maka akan muncul halaman berikut.

Selain itu, saya juga mengimplementasikan fitur melihat log CYD pada halaman pemantauan. Berikut contoh tampilannya.

Ketika terjadi exception pada log, maka CYD tidak ditampilkan karena jika sesuai flownya exception pada log berarti terdapat kesalahan ketika melakukan pengajuan CYD.

Selain kedua fitur tersebut, saya juga tidak lupa menambahkan fitur pagination yang merupakan fitur wajib pada data tabel. Saya menggunakan library Paginator yang merupakan library dari Django. Penggunaannya cukup mudah, dengan menambahkan sedikit baris code pada views.py dan pada template html.

  • Mengintegrasikan halaman

Setelah semua fitur selesai, saya mengintegrasikan ketiga halaman pemantauan fakultas yang saya buat dengan menambahkan tab berisi status CYD. Kemudian, saya juga mengintegrasikan halaman saya dengan halaman-halaman terkait yang dibuat oleh teman saya dengan menambahkan link pada navbar. Selain itu, saya juga menyesuaikan CSS pada halaman saya dengan halaman-halaman lain yang dibuat oleh teman.

  • Update seeding database

Fitur yang saya buat belum memiliki seeding database yang sesuai dengan kasus-kasus pada fitur ini, sehingga saya menambahkan seeding ke file json yang telah ada sebelumnya. Seeding yang ditambahkan mencakup kasus-kasus yang mungkin terjadi pada ketiga halaman yang saya buat.

  • Memperbaiki code coverage report

Pada awalnya code coverage report yang saya buat adalah dengan menampilkan suatu GitLab Page yang berisi code coverage html dan terintegrasi dengan README.md pada repository GitlLab. Cara tersebut ternyata kurang baik karena semua coverage report dari setiap branch terkumpul menjadi satu pada page tersebut. Sehingga ketika individual review dosen memerintahkan untuk memperbaikinya agar muncul coverage pada tiap commit dan ada coverage badge yang menunjukkan nilai coverage pada README.md. Karena hal tersebut memerlukan akses pipeline setting, maka asisten dosen lah yang membuatkan regexnya di pipeline setting. Saya tinggal mengedit file .yml pada bagian test dan coveragenya dari scipt berikut

test:
script:
- cd lipsy
- coverage run — rcfile=.coveragerc manage.py test
- coverage html
- cd ..
artifacts:
paths:
- lipsy/htmlcov/
pages:
type: deploy
dependencies:
- test
script:
- mv lipsy/htmlcov/ public/
artifacts:
paths:
- public/

menjadi script berikut

test:
script:
- cd lipsy
- coverage run — rcfile=.coveragerc manage.py test
- coverage report
- cd ..

Perbedaannya adalah saya sekarang menggunakan “coverage report”, bukan, “coverage html” dan menghapus deployment GitLab Page. Kemudian pada file README.md saya tambahkan link yang memunculkan coverage badge dan build status badge. Link ini diperoleh dari pipeline setting.

  • Auto deployment

Untuk melakukan autodeploy cukup dengan melakukan scp dan ssh ke server yang telah dipersiapkan di Digital Ocean. Permasalahannya adalah scp dan ssh memerlukan password dan username server, yang mana nilainya biasanya dimasukkan melalui shell secara interaktif. Sehingga, saya pun mencoba mencari library agar dapat melakukan ssh dan scp tidak secara interaktif. Setelah melakukan eksplorasi akhirnya saya gunakan library sshpass. Library tersebut dapat membantu melakukan scp dan ssh tanpa shell yang interaktif. Instalasinya sangat mudah, cukup dengan “apt-get install sshpass”. Untuk melakukan scp pada sshpass, digunakan perintah

sshpass -p ‘password’ scp -r -o StrictHostKeyChecking=no asal uname@domainserver:tujuan

sedangkan untuk ssh digunakan

sshpass -p ‘password’ ssh uname@domainserver -o StrictHostKeyChecking=no

dapat juga dilakukan ssh beserta pengeksekusian suatu command, misalnya

sshpass -p ‘password’ ssh uname@domainserver -o StrictHostKeyChecking=no ‘docker cp lipsy lipsy:/var/www/html/PPLC3/’

Saya pun mencoba membuat auto deployment dengan menambahkan script berikut pada GitLab CI (username dan password disensor).

- apt-get install sshpass
- sshpass -p ‘password’ scp -r -o StrictHostKeyChecking=no lipsy uname@domainserver:~/lipsy
- sshpass -p ‘password’ ssh uname@domainserver -o StrictHostKeyChecking=no ‘docker exec lipsy rm -rf /var/www/html/PPLC3/lipsydocker exec lipsy rm -rf /var/www/html/PPLC3/lipsy’
- sshpass -p ‘password’ ssh uname@domainserver -o StrictHostKeyChecking=no ‘docker cp lipsy lipsy:/var/www/html/PPLC3/’
- sshpass -p ‘password’ ssh uname@domainserver -o StrictHostKeyChecking=no ‘rm -rf lipsy’
- sshpass -p ‘password’ ssh uname@domainserver -o StrictHostKeyChecking=no ‘docker exec lipsy service postgresql restart’
- sshpass -p ‘password’ ssh uname@domainserver -o StrictHostKeyChecking=no ‘docker exec lipsy service apache2 restart’

Script tersebut ternyata berhasil melakukan auto deployment ke server tiap kali push. Script tersebut belum termasuk migrasi database, hanya appsnya saja. Script migrasi ditambahkan oleh teman saya.

  • Refactoring

Setelah semua fitur yang saya kerjakan dan chores sudah selesai dan dapat berjalan, saya mencoba melakukan refactoring pada code yang telah saya buat agar terlihat lebih rapi. Refactoring saya mulai dari refactoring fungsi-fungsi pada testing kemudian fungsi-fungsi implementasinya. Karena waktu yang terbatas, hasil refactoring masih kurang memuaskan karena masih cukup banyak fungsi-fungsi yang belum direfactor sehingga ada penamaan variabel dan fungsi yang kurang jelas.

  • Presentasi hasil sprint 1

Setelah PBI pada sprint 1 selesai, saya dan kelompok mempresentasikan hasil dari sprint 1 kami. Semuanya berjalan lancar dan hasil sprint 1 kami dapat di merge ke master.

.

Awal sprint 2

Sprint planning kelompok kami dilakukan pada hari Jumat sore. Dikarenakan jadwal UTS saya yang kebetulan menumpuk semua di belakang, saya belum sempat berbuat banyak pada awal sprint 2. Yang sudah kami lakukan antara lain membagi user story untuk dikerjakan tiap-tiap anggota serta menentukan konvensi error code. Untuk saya pribadi telah membaca buku Clean Code karena pada sprint 1 dosen memberikan feedback bahwa code saya masih kurang rapi. Saya juga mencoba melakukan refactor dan mengubah penamaan fungsi dan variabel pada code sprint 1 saya, namun belum selesai 100%. Saya juga sudah menyesuaikan error code pada codingan saya dengan error code yang telah kami sepakati.

Sekian yang dapat saya bagikan, semoga bermanfaat.