Tools yang Kami Gunakan
Halo sobat AdHub, kali ini kita akan membahas soal tools yang kami gunakan dalam pengembangan perangkat lunak AdHub. Adapun tools yang akan kita bahas kali ini adalah Git dan Agile Software Development. Selain itu, kita juga membahas secara singkat proses deployment yang kami lakukan.
Git
Git merupakan version control system. Apa itu version control system? version control system adalah sistem yang mencatat perubahan pada file(s) dari waktu ke waktu sehingga kita bisa me-recall (file) pada versi tertentu.
Git Manual
Berikut ini adalah beberapa perintah git dan fungsinya.
Git Flow
Git Flow merupakan bentuk percabangan yang dirancang sebelum memasuki tahap production. Dalam pengembangan perangkat lunak AdHub menerapkan Git Flow sebagai berikut.
Pada Git Flow yang kami terapkan terdapat beberapa cabang(branch) yaitu cabang master, staging, coldfix, dan UserStory. Cabang master berfungsi untuk menyimpan source code yang siap deploy ke dalam production environment. Cabang staging merupakan cabang utama yang terkait dengan proses pengembangan. Cabang staging menyimpan source code hasil pekerjaan setiap developer. Cabang coldfix digunakan untuk melakukan rollback. Cabang UserStory merupakan cabang untuk implementasi user story (fitur).
Manfaat Menggunakann Git
Penggunaan Git Flow dirancang untuk membantu developer melakukan collaborative dalam penggunaan version control GIT. Salah satu manfaat menerapkan Git Flow adalah membantu untuk melacak fitur, perbaikan terbaru, dan rilis dalam proyek.
Agile Software Development
Agile Software Development merupakan pendekatan untuk pengembangan perangkat lunak dimana requirements belum pasti dan berkemungkinan besar mengalami perubahan. Agile Software Development menerapkan planning yang adapif, fleksibel terhadap perubahan, respon yang cepat, dan delivery product yang cepat.
Agile Manifesto
A. Individuals and Interactions Over Processes and Tools
Interaksi antar individu lebih utama dibandingkan proses dan tools yang digunakan karena yang merespon request klien adalah individu, bukan proses.
2. Working Software Over Comprehensive Documentation
Working product yang ter-deliver ke klien lebih utama dibandingkan dokumentasi yang lengkap. Dengan demikian working product dapat di-deliver dengan cepat.
3. Customer Collaboration Over Contract Negotiation
Kolaborasi dengan klien lebih utama dibandingkan kontrak. Hal tersebut akan lebih efektif untuk development karena klien dapat memberikan feedback terhadap hasil yang telah dibuat secara cepat.
4. Responding to Change Over Following a Plan
Respon terhadap perubahan lebih utama dibandingkan mengikuti rencana. Hal tersebut membuat Agile Software Development lebih fleksibel terhadap perubahan.
Penerapan Agile Software Development pada AdHub
Dalam mengembangkan perangkat lunak AdHub kami menerapkan salah satu jenis Agile Software Development yaitu Scrum. Pada Scrum terdapat beberapa fase yaitu
- Inception, yaitu fase ketika bertemu dengan project owner, membuat mockup, dan menyiapkan environment.
- Sprint, fase yang terdiri dari rangkaian kegiatan : sprint planning, daily standup meeting, sprint review, dan sprint retrospective. Satu fase sprint berdurasi 2 minggu.
- Sprint planning, proses menentukan estimasi bobot setiap user story, menentukan sprint goal, memilih sprint backlog, dan breakdown task.
- Daily standup meeting, setiap anggota melaporkan hasil kerjanya dan kendala yang dialami secara singkat.
- Sprint Review, pada tahap ini kami melaporkan hasil kerja kami dalam sebuah sprint kepada product owner.
- Sprint Retrospective, pada tahap ini kita mendiskusikan hal apa saja yang kita pelajari pada sprint tersebut.
Deployment Process
Terdapat tiga environment pada pengembangan perangkat lunak AdHub kami yaitu development, staging, dan production. Environment development merupakan environment untuk melakukan proses pengembangan. Environment staging sebagai environment untuk melaporkan produk kepada project owner. Environment production digunakan untuk deliver produk yang sudah siap.
Pada proses Continuous Integration dan Continuous Deployment (CI/CD) terdapat tiga tahap yaitu linting, testing, dan building.
Proses linting bertujuan untuk memastikan kode yang kita tulis terhindar dari syntax error dan memenuhi best practice sesuai standar coding Python yaitu PEP8.
# .gitlab-ci.yml bagian linting
lint:
stage: lint
script:
- pylint --load-plugins pylint_django *.py || true
Proses testing bertujuan untuk mengukur code coverage yang dicakup kecuali file manage.py.
# .gitlab-ci.yml bagian test
test:
stage: test
script:
- python manage.py runserver 8000 &
- coverage run --omit='manage.py' manage.py test
- coverage report -m
Proses building bertujuan untuk membuat tiga Docker image, yaitu untuk development, staging, dan production yang di-push ke portainer.
# .gitlab-ci.yml bagian build
build:
image: docker:stable
stage: build
services:
- docker:dind
tags:
- build
- docker
before_script:
- docker info
script:
- docker build -t registry.docker.ppl.cs.ui.ac.id/ppla2:latest .
- docker push registry.docker.ppl.cs.ui.ac.id/ppla2:latest