Di malam Jum’at yang sunyi ini, waktunya kita berbagi ilmu kembali. Hmmm… Ternyata sudah lama & jarang pula saya menulis. Nasib kerja di Startup.
Sebelum masuk ke pembahasan, saya ingin menjelaskan dahulu mengapa kali ini kita membahas automation yang ada di jira. Yuph, kalian tidak salah, jira yang dimaksud adalah Jira dari Attlasian yang digunakan sebagai tools management project. Di dalamnya banyak sekali fitur yang bisa kita gunakan untuk mempermudah kita dalam tentunya me-manage sebuah project.
Jadi, di sebuah project, saat seluruh tim sudah beraktifitas dengan pekerjaannya masing-masing, terkadang sering sekali saat report pada daily standup, Story yang seharusnya sudah dalam posisi siap testing, masih belum tergeser alias lupa untuk diubah statusnya. Nah, dalam flow kerja yang ada di kantor saya, ini agak berbeda dan mungkin tidak sesuai dengan best practise-nya. Sebelum kita bahas dalam proses alur kerjanya, adapun kerangka card (dalam Jira, teman-teman akan memahaminya sebagai Issue) yang digunakan di jira kantor kira-kira berikut :
Jadi, yg digunakan di kantor saya seperti berikut :
- Epic : fitur dari sebuah aplikasi
- Story : card untuk requirement terkait fitur baru atau enhancement terhadap project. Story ini akan memiliki sebuah Epic sebagai parent-nya.
- Bug : card untuk bug/hotfix sebuah aplikasi. Biasanya bug tidak saya kaitkan dengan sebuah Epic, namun tidak menutup kemungkinan memiliki Epic sebagai parent-nya.
- Task : card untuk detail pekerjaan masing-masing tim, baik itu developer, maupun QA. Task akan berelasi terhadap sebuah Story atau sebuah Bug.
- Issue : card yang dibuat oleh QA saat menemukan bug ketika testing. Issue ini akan berelasi dengan sebuah Story
- Sub Task : untuk sub task ini, di project yang saya manage tidak digunakan. Hal ini dikarenakan kebijakan management dalam pengelolaan project di kantor.
Card-card yg saya sebutkan di ataslah yang saya gunakan dalam management project kantor. Nah, dari card-card tersebut, kita memiliki flow proses masing-masing. Saya tidak akan menyebutkan satu persatu flow proses yang saya gunakan dalam setiap card, namun saya akan berfokus bagaimana sebuat card Task akan berubah. Saat seorang developer memulai pekerjaannya, ia akan segera mengubah status card Task miliknya dari To Do menjadi In Progress. Dan bila card Task itu selesai, maka ia akan mengubah statusnya dari In Progress menjadi Done. Nah, di penjelasan kali ini, saya akan memfokuskan bagaimana kita membuat sebuah automation jira yang secara otomatis akan mengubah status card Story yang berelasi dengan card Task, dimana saat semua card Task yang berelasi dengannya sudah ber-status Done, maka Story itu pun akan otomatis berubah status menjadi Done.
Adapun ide flownya yang akan saya buat adalah sebagai berikut :
- Buat sebuah trigger yang akan dijalankan bila “Adanya perubahan status Task dari In Progress menjadi Done“
- Cari Story yang berelasi dengan Task tersebut
- Cari semua Task yang ada dalam Story tersebut
- Simpan total semua Task yang ada dalam Story tersebut dalam sebuah variabel (kita namakan : totalAllTasks)
- Cari semua Task yang berstatus Done yang ada dalam Story tersebut
- Simpan total semua Task yang berstatus Done yang ada dalam Story tersebut dalam sebuah variabel (kita namakan : totalAllDoneTasks)
- Kita cek apakah variabel totalAllTasks = totalAllDoneTasks. Jika sama, maka akan lanjut ke proses. Jika berbeda, maka automation akan berhenti
- Terapkan pada semua Story yang berelasi pada Task yang menjadi trigger-nya
- Ubah status Story tersebut menjadi Done
Oke, setelah kita mendapatkan rancangan proses/algoritma dari automation yang akan kita buat, maka langkah selanjutnya kita coba implement proses tersebut dalam jira. Sebelumnya, saya sudah menyiapkan sebuah project untuk penerapannya. Adapun langkah-langkah yang bisa kita buat sebagai berikut :
- Pada Project Settings, klik Automation. Kemudian klik Create rule
- Pada Rule Detail, kita bisa menamakan rule tersebut sesuai dengan apa yang dikerjakan oleh Automation yang akan kita buat. Dalam hal ini, kita akan menamakannya “When all tasks are completed → then change story to completed“. Description bisa dikosongkan, namun direkomendasikan untuk dijelaskan perihal apa yang akan dikerjakan oleh Rule yang akan kita buat.
- Pada bagian Trigger, kita pilih Issue transitioned. Isi field From Status dengan In Progress dan field To Status dengan Done. Kemudian kita klik Save.
- Karena kita hanya menyeleksi bahwa trigger ini hanya boleh dijalankan oleh Task, maka kita tambahkan Condition dengan tipe Issue fields condition. Isi Field dengan Issue Type, Condition dengan Equals, dan Value dengan Task. Kemudian klik Save.
- Karena syarat trigger sudah kita buat, selanjutnya kita pilih Action dengan tipe Lookup issues. Isi field JQL dengan query berikut :
issue in linkedIssues({{issue}}) AND issuetype = story
Dimana maksud query tersebut adalah : “kita mencari issue yang berelasi dengan issue yang menjadi trigger dan tipe issue tersebut adalah Story“. Kemudian klik Save.
- Tambahkan sebuah Action dengan tipe Create variable. Isi Variable name dengan relatedStory dan Smart value dengan {{lookupIssues}}. Dalam hal ini, kita akan menyimpan story yang sudah didapatkan pada proses Lookup sebelumnya ke variable relatedStory. Kemudian klik Save.
- Tambahkan Action dengan tipe Lookup issues. Isi field JQL dengan query berikut :
issue in linkedIssues({{relatedStory}}) AND issuetype = task
Dimana maksud query tersebut adalah : “kita mencari issue yang berelasi dengan story di variable relatedStory dan tipe issue tersebut adalah Task“. Kemudian klik Save.
- Tambahkan sebuah Action dengan tipe Create variable. Isi Variable name dengan totalAllTasks dan Smart value dengan {{lookupIssues.size}}. Dalam hal ini, kita akan menyimpan total seluruh task yang sudah didapatkan pada proses Lookup sebelumnya ke variable totalAllTasks. Kemudian klik Save.
- Tambahkan Action dengan tipe Lookup issues. Isi field JQL dengan query berikut :
issue in linkedIssues({{relatedStory}}) AND issuetype = task and status = done
Dimana maksud query tersebut adalah : “kita mencari issue yang berelasi dengan story di variable relatedStory dan tipe issue tersebut adalah Task dan ber-status Done“. Kemudian klik Save.
- Tambahkan sebuah Action dengan tipe Create variable. Isi Variable name dengan totalAllDoneTasks dan Smart value dengan {{lookupIssues.size}}. Dalam hal ini, kita akan menyimpan total seluruh task yang sudah didapatkan pada proses Lookup sebelumnya ke variable totalAllDoneTasks. Kemudian klik Save.
- Tambahkan sebuah Condition dengan tipe Advanced compare condition. Isi First value dengan {{totalAllTasks}}, Condition dengan equals, dan Second value dengan {{totalAllDoneTasks}}. Dalam hal ini, kita akan membandingkan apakah variable totalAllTasks bernilai sama dengan variable totalAllDoneTasks. Kemudian klik Save.
- Tambahkan sebuah For Each dengan tipe Branch rule / related issues. Isi Type of related issues dengan Linked issues dan Link types dengan relates to. Dalam hal ini, kita akan mencari semua Issue yang berelasi dengan Task yang menjadi Trigger. Step ini akan dikerjakan bila value pada Condition sebelumnya sudah memenuhi syarat, dalam artian bernilai true dalam perbandingannya. Kemudian klik Save.
- Untuk memastikan kita hanya akan mengubah status Story, maka kita tambahkan Condition dengan tipe Issue fields condition. Isi Field dengan Issue Type, Condition dengan Equals, dan Value dengan Story. Kemudian klik Save.
- Kita tambahkan step terakhir, yuph perubahan story tersebut ke status Done dengan menambahkan Action dengan tipe Transition issue. Isi Destination status dengan Done. Kemudian klik Save.
- Kemudian kita hidupkan Automation tersebut dengan klik Turn it on.
Oke, kali ini kita selesai membuat automation dengan rule yang sudah kita buat. Selanjutnya bila teman-teman kembali ke list Rule Automation, maka teman-teman akan melihat rule yang barusan dibuat sudah aktif.
Selanjutnya, kita akan mencoba apakah rule tersebut berjalan dengan sukses. Kita buat sebuah card Story dengan 2 buah card Task yang berelasi dengan card Story tersebut. Kira-kira kita buat seperti berikut :
Kemudian kita coba ubah TJ-39, TJ-40, TJ-41 menjadi In Progress. Kira-kira seperti berikut :
Kemudian kita coba ubah status TJ-40 dan TJ-41 menjadi Done, maka apa yang akan terjadi? Yuph, TJ-39 akan secara otomatis berubah menjadi Done. Pada notifikasi pun, teman-teman akan melihat bahwa Automation berjalan.
Mungkin itulah sedikit informasi yang mudah-mudahan bermanfaat untuk teman-teman, khususnya yang saat ini berkecimpung di Jira dalam me-manage project-nya.
Mungkin cukup sekian dari saya, selamat malam dan terima kasih.