Desember 7

Automation Code Review dengan SonarQube

Sabtu pagi yg cerah sambil ditemani segelas kopi hitam, membuat suasana semakin ceria. Tak terasa sudah lama tidak menulis kembali. Kali ini kita akan membahas sebuah tools gratis yg sangat membantu dalam menganalisa code. Yuph, lebih tepatnya untuk kebutuhan code review dalam development. Sebenarnya ada banyak sekali tools gratis & open source yg bisa kita gunakan. Namun, kali ini kita akan coba membahas SonarQube. Kenapa SonarQube dipilih? Selain karena kemudahannya, menurut saya report hasil scannya pun detail & menarik. Yuk kita langsung saja praktekkan. Perlu diingat, di sini saya menggunakan MacOS, teman-teman bisa menyesuaikan sesuai OS yg digunakan ya. Namun, sebelum melanjutkan, kita butuh download software berikut :

  • JRE (disini saya menggunakan versi 11, dikarenakan kebutuhan development saat ini. Teman-teman bisa menggunakan versi terbaru & direkomendasikan untuk menggunakan versi terbaru).
  • SonarQube (di sini saya menggunakan versi 8.9 dikarenakan versi tersebut yg support jre versi 11. Teman-teman disarankan menggunakan versi terbaru)

Adapun langkah-langkahnya berikut :

  • Ekstrak file yang diunduh ke folder aplikasi : /Applications/SonarQube
  • Pindah folder ke : /Applications/SonarQube/bin/macosx-universal-64. Kemudian jalankan perintah berikut :

./sonar.sh start

  • Buka browser dan akses: http://localhost:9000 seperti berikut :

  • Login dengan Username : admin dan Password : admin

 

Langkah selanjutnya adalah Inisialisasi Proyek, berikut langkah-langkahnya :

  • Pada halaman Dashboard SonarQube, klik Create Project dan tambahkan detail seperti project key dan display name. Di sini saya mengisi project key dan display name dengan sample-php-app. Kemudian klik Set Up.

  • Pada Halaman Overview, isi nama token. Di sini saya mengisi dengan nama sample-php-app-token. Kemudian klik Generate.

  • Token akan ter-generate. Klik Continue.

  • Pilih tools yg digunakan. Karena kita akan mencoba pada php, maka kita pilih Other. Untuk OS, saya pilih macOS karena memang saya sedang menggunakan macOS. Jika teman-teman menggunakan windows atau linux, bisa memilih sesuai OS yg digunakan. Copy konfigurasi, ini akan kita taruh pada root project.

  • Pada tahap ini kita sudah selesai untuk inisialisasi project.

 

Sampai di sini, kita sudah berhasil membuka halaman dashboard SonarQube dan inisialisasi project. Langkah selanjutnya adalah kita perlu meng-install Sonar Scanner. Sonar Scanner adalah tool untuk menganalisis kode dan mengirim laporan ke server SonarQube. Adapun langkah-langkah selanjutnya adalah :

  • Install Sonar Scanner, di sini saya menggunakan Homebrew
  • Periksa versi Sonar Scanner untuk memastikan Sonar Scanner sudah terinstall dengan benar

sonar-scanner --version

  • Bila sudah tampil versinya, berarti sonar scanner sudah siap digunakan.

 

Langkah selanjutnya, kita akan mencoba scan project menggunakan Sonar Scanner dan melihat hasilnya pada Dashboard SonarQube. Untuk projectnya sendiri, di sini saya sudah menyiapkan sebuah project php sederhana untuk keperluan artikel ini. Teman-teman dapat melakukan clone project pada link berikut :

https://github.com/Agunahwan/php-simple-project

Setelah teman-teman sudah melakukan clone project, kita akan coba memulai melakukan inisialisasi pada project tersebut. Adapun langkah-langkahnya sebagai berikut :

  • Buat file sonar-project.properties di root project. Kemudian isi file tersebut dari konfigurasi project yg kita dapat saat membuat project di Dashboard SonarQube. Berikut contoh isi konfigurasi yg sudah kita setting sebelumnya :

<

p style=”text-align: left; padding-left: 40px;”>sonar.projectKey=sample-php-app
sonar.sources=.
sonar.host.url=http://localhost:9000
sonar.login=5655bd05f2bceb25f68e0820ad91a92afcef5ff3

  • Kira-kira berikut struktur file yang akan kita lihat :

  • SonarQube untuk PHP membutuhkan tools seperti PHP_CodeSniffer atau PHPUnit. Install dengan Composer. Berikut perintah yang bisa diberikan :

composer require --dev squizlabs/php_codesniffer

composer require --dev phpunit/phpunit

 

Sampai pada tahap ini, kita sudah dapat menjalankan analisis code. Adapun langkah-langkahnya sebagai berikut :

  • Buka terminal di folder project. Kemudian jalankan perintah berikut dan tunggu hingga proses selesai :

sonar-scanner

  • Hasil analisis pun akan muncul di Dashboard SonarQube.

 

Sebenarnya, lebih lanjut untuk SonarQube ini sendiri, kita bisa menjadikannya standard pada saat kita melakukan proses CI/CD pada platform GIT yg kita gunakan sebelum proses deployment pada server dilakukan. Mungkin lain kesempatan akan coba kita bahas lebih lanjut penggunaan SonarQube ini pada proses deployment.

Akhir kata, semoga artikel ini bermanfaat untuk teman-teman yang sedang ada kebutuhan dalam proses perapihan code agar code menjadi lebih bersih. Selamat berhari libur dan Terima Kasih. 😀

Januari 28

Menggunakan Postman untuk Pengujian API

Ahad pagi merupakan hari yang sangat baik untuk berbagi kembali, sambil ditemani teh manis hangat dan tahu sumedang hangat. 😀

Pada artikel sebelumnya, kita sudah membahas bagaimana cara membuat Mock API dengan menggunakan tools mockapi.io. Bila teman-teman terlewat dengan artikel tersebut, teman-teman dapat membacanya kembali di sini :

Membuat Mock API dengan mockapi.io

Langkah selanjutnya adalah melakukan pengujian terhadap Mock API yang sudah kita buat tersebut tentunya. Nah, untuk pengujian ini, saya akan menggunakan Postman sebagai API Platform yang akan kita gunakan. Sebenarnya teman-teman dapat menggunakan API Platform Tools lainnya yang teman-teman sukai untuk melakukan pengujian API, namun saya pribadi sejak dahulu lebih senang menggunakan Postman sebagai API Platform yang saya gunakan, selain gratis, juga banyak fitur yang sangat bermanfaat untuk saya dapat gunakan.

Untuk Postman sendiri, teman-teman dapat mengunduhnya pada link berikut :

https://www.postman.com/downloads/

Adapun langkah-langkah pengujian Mock API dengan Postman sebagai berikut :

  • Buka Postman. Bila teman-teman baru pertama kali buka Postman, maka akan terlihat langkah untuk membuat sebuah Workspace baru. Teman-teman dapat memilih menggunakan template yang sudah disediakan oleh Postman. Namun, kali ini kita akan menggunakan Blank Workspace untuk pengujian kita kali ini. Kemudian klik tombol Next.

Postman Blank Workspace

  • Pada halaman ini, teman-teman diminta untuk mengisi nama workspace, keterangan perihal workspace tersebut, dan siapa yang akan mengakses workspace tersebut. Klik tombol Create untuk mulai membuat workspace.

Membuat Workspace Baru

  • Setelah workspace berhasil dibuat, teman-teman akan melihat tampilan Postman seperti berikut :

Blank Collection

  • Sebelum kita membuat collection, kita coba untuk membuat sebuah environment terlebih dahulu. Fungsi environment sendiri, agar memudahkan kita mengatur penggunaan collection untuk diuji pada environment yang berbeda. Kita klik tab Environments, kemudian klik icon + untuk membuat Environment baru.

Environments

  • Maka akan terbuat Environment baru. Isi nama Environment yang kita buat, bisa Local untuk lokal kita, Development untuk development kita, Staging, ataupun Production untuk masing-masing environment pada development project kita. Dikarenakan pada kali ini kita akan menguji Mock API, maka saya namakan environment kali ini Mock API. Isi variabel yang dibutuhkan, kemudian klik tombol Save.

Environment Baru

  • Setelah environment sudah dibuat, langkah selanjutnya kita sudah dapat membuat collection. Klik tab Collection, kemudian klik icon +. Maka akan tampil pilihan jenis collection yang ingin dibuat. Dikarenakan Mock API kita menggunakan RESTful API, maka kita pilih REST API basics, teman-teman dapat menyesuaikannya dengan kebutuhan project teman-teman.

Membuat Collection Baru

  • Maka akan tampil seluruh request untuk CRUD standard RESTful API.

CRUD Collection

  • Teman-teman dapat mengganti nama collection yang sudah dibuat dengan melakukan klik di tombol titik 3, kemudian klik Rename. Atau langsung dapat diklik pada Nama Collectionnya.

Rename Collection

  • Setelah collection dan semua request yang dibutuhkan sudah dibuat, kita sudah dapat menggunakan collection kita untuk pengujian API. Kita coba dengan salah satu request, klik request Get data, ubah endpoint info dengan endpoint yang ingin kita uji, kemudian pilih Environment yang sebelumnya kita buat, dan klik tombol Send. Tunggu sebentar sampai proses request selesai.

Get Data

Resource Products

Sampai sini kita sudah selesai membuat collection untuk melakukan pengujian API. Sisanya teman-teman dapat menyesuaikannya sesuai dengan kebutuhan project yang sedang dikerjakan.

Akhir kata, semoga artikel ini bermanfaat untuk teman-teman yang sedang membuat api untuk kebutuhan development project. Selamat berhari libur dan Terima Kasih. 😀

Januari 27

Membuat Mock API dengan mockapi.io

Sabtu pagi yang cerah, diiringi teh manis hangat, dengan gemericik suara hujan, merupakan waktu yang tepat untuk kita berbagi kembali. 😀

Untuk kali ini, kita akan mencoba membahas, bagaimana membuat sebuah mock api tanpa harus ribet coding dengan menampilkan response json berupa hardcode string. Cara ini memiliki beberapa keunggulan, di antaranya dapat mempercepat waktu development. Tentu saja, dengan membuat sebuah mock api, suatu tim yang bekerja dimana di dalamnya terdapat frontend, backend, bahkan mobile developer, maka masing-masing developer dapat bekerja secara paralel. Dimana baik frontend maupun mobile developer, tidak harus menunggu backend developer untuk menyelesaikan semua api nya, karena baik frontend maupun mobile developer, dapat melihat langsung request & response yang akan digunakan dalam development.  Dan untuk beberapa case, bahkan dapat mempercepat QA dalam mempersiapkan test case yang akan dibuatnya.

Sebenarnya ada banyak tools yang dapat digunakan untuk membuat sebuah mock api atau fake api. Namun pada pembahasan kali ini, kita akan menggunakan tools mockapi.io. Adapun langkah-langkah penggunaannya, sebagai berikut :

  • Buka mockapi.io dan buat akun serta login. Teman-teman dapat jg menggunakan akun google untuk langsung membuat akun dan login. Maka akan tampil kira-kira seperti berikut :

mockapi.io

  • Buat sebuah Project baru dengan meng-klik tombol +. Isi Name dengan nama project kita. Bila diperlukan untuk kebutuhan versioning api, bisa ditambahkan API Prefix. Kemudian klik tombol Create.

Tambah Project

  • Sampai pada tahap ini, project baru akan terdaftar berikut project-project lainnya bila teman-teman juga menggunakannya untuk banyak project.

Project List

  • Pilih project yang sudah kita buat tadi. Di sini akan terlihat base url dari mock api yang akan kita buat.

Resource List

  • Klik tombol New Resource untuk membuat sebuah resource api baru, maka akan tampil Popup New Resource. Buat skema api yang ingin kita buat. Nah, di sini kita bisa memanfaatkan Faker.js untuk generate random data terkait data apa yang ingin kita generate saat Mock API kita dipanggil. Teman-teman juga dapat membuatnya menjadi data statis. Jadi tergantung kebutuhan project nanti. Untuk response sendiri, bila teman-teman ingin membuatnya custom, misal dengan format sebagai berikut :

    Dimana $mockData merupakan data generate dari mockapi.io, maka teman-teman harus melakukan subscription terlebih dahulu dikarenakan untuk versi gratis, response yang diberikan akan langsung berupa data array hasil generate. Kemudian klik tombol Create.

Tambah Resource

  • Maka resource baru kita akan terlihat pada List Resource. Di sini kita dapat melakukan penyesuaian, berapa jumlah data yang akan kita generate. Maksimal jumlah data yang dapat kita generate adalah 100 buah.

Set Total Data

Generate 13 Data

  • Sebuah resource berhasil kita buat dan sudah siap untuk kita gunakan. Teman-teman juga dapat melihat contoh response yang akan dihasilkan dengan menekan tombol Data. Dan teman-teman juga dapat mengubah dan/atau menghapus resource tersebut dengan menekan tombol Edit dan/atau icon Delete.

Action Mock API

Data

Nah, sampai tahap ini, Mock API sudah berhasil kita buat untuk sebuah resource dan sudah siap untuk digunakan. Ada hal menarik yang perlu diperhatikan dalam penggunaan tool mockapi.io ini, dimana mockapi.io menerapkan secara menyeluruh perihal RESTful API. Bila teman-teman bingung bagaimana sebuah API secara penuh menerapkan RESTful API, teman-teman dapat membaca dokumentasi perihal RESTful API di sini (dan mungkin di lain kesempatan, kita akan coba bahas mengenai RESTful API) :

https://restfulapi.net/

Demikian pembuatan Mock API sudah selesai kita buat, mudah-mudahan bermanfaat buat teman-teman khususnya yang sedang kesulitan untuk mengatur waktu development para developer dalam tim. Akhir kata, kita habiskan teh hangat kita, semangat terus untuk bekerja, dan Terima Kasih. 😀

Januari 23

Membuat Server NFS di Lokal

Di siang yang cerah ini, saatnya kita berbagi kembali. Nah, kali ini kita akan membuat server NFS sendiri di lokal kita. Yuph, jadi ceritanya saya ada sebuah task dimana dalam task tersebut membuat sebuah api untuk keperluan dokumen yang akan ditaruh dalam sebuah server NFS. Dikarenakan untuk kebutuhan pengujian, saya harus membuat sebuah server NFS dalam lokal saya. Nah, untuk memulainya, ada 2 software yang harus teman-teman gunakan, satu sebagai server dan satunya sebagai client (ini dikarenakan untuk pengujian server NFS, kita memerlukan software tersebut, baik untuk upload maupun fetch file tanpa harus code). Adapun kedua software tersebut sebagai berikut :

  • Server NFS. Di sini saya menggunakan WinNFSd, teman-teman dapat mengunduhnya pada link berikut :

https://sourceforge.net/projects/winnfsd/

  • Client NFS. Di sini saya menggunakan muCommander, teman-teman dapat mengunduhnya pada link berikut :

https://www.mucommander.com/#download

Nah, setelah kedua aplikasi diunduh dan diekstrak, selanjutnya kita jalankan server NFS kita. Adapun yang perlu teman-teman lakukan sebagai berikut :

  • Buka Command Line dan arahkan pada folder dimana  WinNFSd berada.
  • Jalankan format command winnfsd.exe [-id <uid> <gid>] [-log on | off] <export path>. Di sini saya menjalankan perintah : winnfsd.exe -log on C:\xampp\htdocs\download. Adapun perintah tersebut maksudnya adalah :
    Saya menjalankan server NFS dengan log yang dihidupkan dimana folder C:\xampp\htdocs\download sebagai tempat penyimpanan file NFS.
    Tunggu hingga daemon nya sudah berhasil jalan. Kira2 seperti berikut :

Start Daemon NFS

Di sini daemon NFS sudah berjalan, dan perlu diperhatikan IP server NFS kita. Di sini server saya berada pada IP 192.168.8.105 (setiap lokal mungkin akan berbeda, IP ini akan kita gunakan untuk koneksi ke NFS kita dari client). Langkah selanjutnya, kita mengujinya apakah sudah dapat pergunakan. Untuk mengujinya, berikut yang saya lakukan :

  • Buka aplikasi muCommander, kemudian klik icon Connect to server

Start muCommander

  • Koneksikan dengan mengklik tab NFS dan mengisi data-data berikut :
    • Server : IP yang kita dapatkan saat menjalankan daemon NFS
    • Share : Lokasi dimana folder NFS disetting. Diisi dengan export path yang diisi sebelumnya dengan mengubah \ menjadi /. Disini sebelumnya saya input export path di C:\xampp\htdocs\download, sehingga di field Share, saya isi /C/xampp/htdocs/download
    • Port : Biarkan default port NFS, dimana berada pada port 2049

Koneksi Server NFS

  • Setelah dikoneksikan, kita akan dapat melihat folder NFS kita.

NFS Tersambung

  • Kita coba masukkan sebuah file untuk pengujian. Jika sudah masuk, maka kita sudah sukses menjalankan NFS di lokal kita

File Terunggah

  • Dan bila kita kembali ke Command Line td, maka kita akan dapat melihat log yang kita lakukan

Log NFS

 

Bila file sudah bisa diupload seperti di atas, maka kita sudah dapat melakukan langkah kita selanjutnya sesuai keperluan. Dan baiknya, selanjutnya dilakukan pengujian juga dalam bentuk code yang akan kita buat.

Mungkin sekian untuk sharing kali ini. Mudah-mudahan bermanfaat untuk yang sedang mengalami kesulitan dalam membuat sebuah api yang mengunggah file ke server NFS, namun bingung bagaimana cara mengujinya di lokal.

Akhir kata, tetap semangat, dan terima kasih.

Agustus 31

Automation Jira saat semua Task Done, Story atau Bugs yang berelasi Menjadi Done

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 :

Issue Type

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 :

  1. Buat sebuah trigger yang akan dijalankan bila “Adanya perubahan status Task dari In Progress menjadi Done
  2. Cari Story yang berelasi dengan Task tersebut
  3. Cari semua Task yang ada dalam Story tersebut
  4. Simpan total semua Task yang ada dalam Story tersebut dalam sebuah variabel (kita namakan : totalAllTasks)
  5. Cari semua Task yang berstatus Done yang ada dalam Story tersebut
  6. Simpan total semua Task yang berstatus Done yang ada dalam Story tersebut dalam sebuah variabel (kita namakan : totalAllDoneTasks)
  7. Kita cek apakah variabel totalAllTasks = totalAllDoneTasks. Jika sama, maka akan lanjut ke proses. Jika berbeda, maka automation akan berhenti
  8. Terapkan pada semua Story yang berelasi pada Task yang menjadi trigger-nya
  9. 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

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.

Rule Details

  • Pada bagian Trigger, kita pilih Issue transitioned. Isi field From Status dengan In Progress dan field To Status dengan Done. Kemudian kita klik Save.

Issue Transitioned

  • 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.

Issue Field Condition Task

  • 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.

Lookup Issue Story

  • 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.

Create Variable Story

  • 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.

Lookup Issues All Tasks

  • 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.

Create Variables totalAllTasks

  • 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.

Lookup Issues All Done Tasks

  • 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.

Create Variables totalAllDoneTasks

  • 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.

Advanced compare condition

  • 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.

Branch rule

  • 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.

Issue Field Condition Story

  • 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.

Transition issue Done

  • Kemudian kita hidupkan Automation tersebut dengan klik Turn it on.

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.

New Rule Activated

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 :

Story with 2 Task

Kemudian kita coba ubah TJ-39, TJ-40, TJ-41 menjadi In Progress. Kira-kira seperti berikut :

All In Progress

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.

All Done

Automate Done

 

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.

Maret 8

Menjalankan php di luar htdocs

Malam yang tepat untuk berbagi, dan kali ini, kita akan coba membahas hal kecil yang mungkin sangat bermanfaat dalam pekerjaan.

Sebelum kita masuk ke cerita, mungkin sebagai perkenalan, di kantor yang sekarang, posisi saya merupakan Squad Supervisor, dimana tugas saya lebih ke arah solving problem teknikal & manajemen project, dan tidak turun dalam development, dalam artian ikut dalam ngoding.

Nah, ceritanya, di kantor kita sedang mengejar target development fitur untuk kuartal pertama. Dengan jumlah developer yang terbatas, sementara project yang menantang (menantang maut mungkin, hehe… Just kidding) baik dalam jumlah maupun pengerjaannya, kita dituntut untuk mengerjakan development tersebut secepat mungkin. Dengan perumpamaan yang selalu saya ucapkan terhadap tim, dimana proses development itu seperti sebuah balon. Yuph, seperti balon, bila suatu titik kita tekan, maka akan membesar di titik lawannya. Seperti halnya development, bila kita menekan waktu development (dalam artian mempercepat proses development), maka berimbas dengan jumlah developer yang membengkak. Namun bila kita menekan pula jumlah developernya, maka akan membengkak pula bugs yang akan dihasilkan. Yuph, dikarenakan kita tidak mau mengurangi waktu maupun kualitas, tentu titik lawannya, yakni jumlah developer yang mesti membengkak. Singkat cerita, tentu tidak dapat menembah developer dalam waktu singkat, sehingga strategi lain yang dilakukan adalah dengan mengalihkan developer di project lain ke dalam project yang sedang kita kerjakan. Dan akhirnya, karena masih kekuranganannya developer kembali (inget menekan titik waktu & kualitas, menyebabkan titik jumlah developer menjadi 2x lipat) menyebabkan saya pun ikut dalam development tersebut.

Di kantor sendiri, project yang sedang kita kerjakan menggunakan bahasa pemrograman php. Yuph, bisa dibilang bahasa sejuta umat. Biasanya, saya selalu merapikan source code dari project dalam sebuah folder, dan tentunya saya simpan di drive data, tentunya tidak di dalam folder server seperti htdocs pada php dan inetpub pada dotnet. Di kantor sendiri umumnya project menggunakan framework yii, dimana untuk menjalankan project tersebut dapat menggunakan perintah berikut walaupun folder project di luat htdocs :

Nah, di satu project ini, kebetulan kita tidak menggunakan framework, alias menggunakan php native. Lalu, bagaimana caranya untuk menjalankan file php tersebut di luar folder htdocs. Yuk kita langsung praktikan. Kita buat sebuah file php, simpan dengan nama index.php. Isi file php berikut dengan code berikut :

Untuk saya sendiri, menyimpan di alamat : D:\Data\Data Agun\Blog\Run Php

Buka command prompt dan pindahkan posisi folder ke alamat folder php kita seperti berikut :

Lalu ketik perintah berikut :

 

Dimana kita dapat mengganti port yang ingin dijalankan, dalam contoh di atas, kita dapat mengganti port tersebut dengan port lainnya sesuai kebutuhan. Bila berhasil, maka saat kita akses browser dengan alamat http://localhost:45, akan tampil seperti berikut :

Dan di Command Prompt akan terlihat seperti berikut :

 

Mungkin sekian secuil ilmu yang kita bahas di malam sunyi ini. Semoga sekecil apapun ilmu yang dibagikan dapat bermanfaat bagi teman-teman semua di dalam pekerjaan.

Akhir kata, selamat malam dan selamat beristirahat. 😁

November 9

Publishing dan Konfigurasi Web Deploy pada IIS

Malam yang indah untuk melanjutkan pekerjaan keseharian, apalagi kalau bukan ngoding. 😅

Sudah lama juga tidak menulis, yah dikarenakan pekerjaan yang lumayan padat juga sih. Untuk malam ini, sebenarnya tulisan ini sekedar mengingat bila di lain waktu melakukan hal yang sama. Tidak perlu berlama-lama lagi, langsung aja.

Jadi, ceritanya hari ini hampir seharian setting server untuk kebutuhan publishing website. Kebutuhan ini untuk dipresentasikan pada keesokan harinya. Sebenarnya ini bukan kali pertama setting server untuk keperluan publishing/deployment. Perlu diingat, ini berfokus pada teknologi nya Microsoft, apalagi kalau bukan Windows Server & Dot Net. Adapun langkah-langkahnya akan dibagi dua, dimana kita akan setting dari sisi server terlebih dahulu, baru kemudian setting dari sisi project untuk deploymentnya. Di sini saya akan menggunakan Web Deploy untuk sarana deploymentnya. Berikut langkah-langkahnya :

  • Install Internet Information Services (IIS) Manager :
    • Pada Server Manager, pilih menu Manage > Add Roles and Features.Add Roles and Features
    • Pada langkah Before You Begin langsung klik Next.Before You Begin
    • Pada bagian Installation Type, pilih Role-based or feature-based installation,kemudian klik Next.Installation Type
    • Pada bagian Server Selection, pilih Select a server from the server pool, kemudian klik Next.Server Selection
    • Pada bagian Server Roles, pilih Web Server (IIS), lalu klik Next.Server Roles
    • Pada bagian Features, pastikan .NET Framework 3.5 dan .NET Framework 4.6 terpilih dan langsung klik Next.Features
    • Pada bagian Confirmation, kemudian klik Install.Confirmation
    • Tunggu hingga proses instalasi selesai, dan Internet Information Services (IIS) Manager pun telah terinstal pada Server
  • Setting Web Deploy pada Server :
    • Download dan Install Hosting Bundle sesuai dengan versi .Net yang digunakan. Di sini saya menggunakan versi .Net Core 3.1.30Hosting Bundle
    • Restart sistem dengan menggunakan perintah berikut pada Command Line :

net stop was /y
net start w3svc

    • Buka Web Platform Installer, search kata kunci Web Deploy. Add Web Deploy (dalam hal ini saya memilih Web Deploy 3.6), kemudian klik Install.Web Platform Installer
    • Tunggu hingga proses Instalasi selesai. Kemudian buka IIS Manager, lalu pilih IIS Manager Permissions.IIS Manager Permissions
    • Klik Allow User, kemudian pilih user yang akan digunakan untuk mengakses server melalui Web Deploy pada Projects nanti. Kemudian klik OK.Allow User
    • Konfigurasi pada server hingga tahap ini selesai.
  • Create Publish Profile pada Project :
    • Klik kanan pada Project, kemudian klik Publish.Publish
    • Pilih Web Server (IIS), kemudian klik Next.Web Server IIS
    • Pilih Web Deploy, kemudian klik Next.Web Deploy Project
    • Isi data Server dengan format : {alamat_server}/MSDeployAgentService, Site name diisi dengan nama website yang kita buat pada IIS Server, Destination Url dengan Alamat dari Server, Username dengan User yang kita beri Permission pada IIS Server, Password yang digunakan untuk mengakses Server menggunakan Username yang disetting. Setelah semua selesai, kita dapat mengecek apakah konfigurasi yang kita berikan sesuai dengan klik Validate Connection. Bila sudah sesuai, maka akan tampil centang hijau seperti gambar di bawah. Kemudian klik Finish.Publish Config
    • Untuk deployment, kita cukup melakukan Publish dan Visual Studio akan otomatis melakukan Build dan Deployment langsung ke Server.

Mungkin hanya itu langkah-langkah untuk setting Deployment ke Server menggunakan Web Deploy. Untuk setiap kali akan melakukan Deployment/Publish, teman-teman hanya cukup melakukan Publish menggunakan konfigurasi yang telah kita setting, dan hasil build dari aplikasi pun akan langsung terdeploy ke Server.

Mungkin itu saja tulisan kali ini, semoga bermanfaat untuk teman-teman yang mengalami kesulitan dalam hal Deployment, khususnya pada ekosistem milik Microsoft. Dan Selamat Malam. 😁

Agustus 18

Mengatasi masalah CredSSP saat melakukan remote desktop

Siang ini saya harus melakukan pengecekan pada server DB untuk melihat CPU sistem yang katanya sedang high banget. Saya coba melakukan remote, kemudian terjadilah error seperti ini : “An authentication error has occured.” Kemudian di bawahnya ada error : “This could be due to CredSSP encryption oracle remediation.”. Kira-kira seperti ini capturenya :

credssp encryption oracle remediation

Lalu, bagaimana cara mengatasinya? Sebenernya untuk mengatasinya sendiri, Microsoft sudah menjelaskannya pada halaman dokumentasinya :

https://docs.microsoft.com/id-id/troubleshoot/azure/virtual-machines/credssp-encryption-oracle-remediation

Hal ini kalau dilihat dari penjelasannya diketahui terjadi karena akses terhadap server tersebut menggunakan sambungan yg tidak aman. Bisa jadi karena versi server lokal kita berbeda dengan versi server (server memiliki versi lebih rendah dari versi lokal). Dari dokumen tersebut jg dijelaskan salah satu (karena masih ada cara lain jg, cuma karena menurut saya ini cara paling mudah :D) cara mengatasinya :

  1. Buka command prompt (saya coba dengan “Run As Administrator”)
  2. Ketik perintah berikut “REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters\ /v AllowEncryptionOracle /t REG_DWORD /d 2”. Kemudian enter

Solution in local

Setelah melakukan itu, coba teman2 melakukan remote kembali, untuk kasus saya berhasil.

Demikian sedikit info dari saya, semoga teman-teman yang mengalami hal yg sama dapat terpecahkan.

Selamat sore dan selamat bekerja… 😀

Juli 7

Query untuk melihat structure table

Setelah melewati 3 hari yang melelahkan, ingin kembali menulis kembali. Yuph, 2 hari akhir pekan merenovasi rumah di bogor, dan sehari ke rumah sakit seharian untuk imunisasi anak. Tak habis bahan untuk saya ulas, kali ini saya ingin membagikan query untuk melihat bagaimana struktur sebuah tabel maupun tabel-tabel dalam database.

Langsung aja ke inti utama yang akan saya sharing. Jadi, ceritanya saya ingin membuat dokumentasi berupa Data Dictionary untuk semua database yang dipakai. Task ini saya berikan kepada developer saya saat ia sedang tidak terlalu berat task. Setiap point merupakan sebuah penjelasan untuk semua tabel yang ada dalam setiap database dimana di dalamnya terdapat penjelasan mana yang merupakan tabel PK, FK, apakah nullable, apa tipe data dan berapa lengthnya, dan apakah ia unik. Yuph, kira2 semacam itu, dan teman-teman dapat menggunakan query ini untuk mendapatkan data lainnya dari tabel-tabel tersebut tentunya.

Pada contoh kali ini, saya menggunakan database pada contoh-contoh saya sebelumnya yakni database Akademik. Untuk query database, teman-teman dapat mendownload query database pada contoh kali ini pada link berikut :

https://drive.google.com/file/d/1KYiT2H_uPhfzMDJ8ZZclxBy685uXUFs1/view?usp=sharing

Atau teman-teman dapat me-restore-nya dengan menggunakan file bak pada link berikut :

https://drive.google.com/file/d/1dm7TsHlJqpG1YaQHBnq7r2g0lAJCrLLd/view?usp=sharing

Saya asumsikan teman-teman sudah memiliki databasenya. Teman-teman akan melihat secara singkat struktur key seperti berikut :

Table Structure

Ada dua kasus yang akan saya gunakan saat ini :

  • Saya ingin melihat semua struktur pada tabel Siswa, maka query yang dapat digunakan sebagai berikut :

Maka hasilnya akan seperti berikut :

Get Structure Table

  • Saya ingin melihat semua struktur dari semua tabel yang ada pada database Akademik, maka query yang dapat digunakan sebagai berikut :

Maka hasilnya akan seperti berikut :

Get All Structure Table

Demikian sharing sedikit dari saya untuk mendapatkan semua struktur tabel yang ada. Mudah-mudahan bermanfaat buat teman-teman semua untuk mempermudah dalam mendapatkan informasi dari sebuah database terutama bagi yang sering berhubungan dengan database.

Sekian dari saya, terima kasih dan selamat beristirahat… 😀

Juni 30

Menggunakan SQL Search untuk mencari kata di database

Halo semua, pada malam ini saya ingin membagikan sebuah software yang berguna banget buat saya pribadi saat saya kesulitan dalam pekerjaan untuk mencari sebuah tabel dalam sekumpulan stored procedure, function, maupun view.

Jadi, ceritanya begini, dulu saya pernah mengerjakan sebuah project dimana kalau dikategorikan termasuk project maintenance. Dan sudah bisa ditebak, yuph, dalam project itu aplikasi sudah ada dengan berbagai flow di dalamnya termasuk berbagai macam SP, function, dan view. Aplikasinya pun terikat/terhubung dengan beberapa aplikasi lainnya dan pastinya terdapat beberapa database di dalamnya (satu aplikasi satu database saat itu). Dalam task maintenance tersebut, terkadang saya mendapatkan task dimana saya diharuskan untuk menambahkan sebuah kolom dalam beberapa tabel. Dan sialnya, banyak stored procedure melakukan script insert tanpa menyebutkan detail kolom-kolom yang akan diinsert. Dalam kasus saya, insert yang dipakai biar ada gambaran contohnya yaitu insert into table1 select * from table2. Tahukan apa yang akan terjadi saat terjadi penambahan kolom pada table2 tapi tidak terjadi penambahan kolom yang sama pada table1? Yuph, akan terjadi error.

Nah, untuk mempermudah saya mencari query apa aja yang terhubung dengan table yang akan saya ubah (dalam kasus td table2), saya menggunakan tools ini untuk mencarinya. Tools tersebut adalah SQL Search dari RedGate. Eits… jangan khawatir, tools tersebut free kok, namun teman-teman mesti submit data dahulu saat mengunduhnya. Tools tersebut sebagai plugin pada aplikasi Ms SQL Server Management Studio. Berikut link untuk mengunduh toolsnya :

https://www.red-gate.com/products/sql-development/sql-search/installer/

Adapun setelah teman-teman melakukan instalasi, maka menu akan tampil pada toolbar SSMS. Kira-kira akan seperti ini tampilannya :

SQL Search

Dan cara penggunaannya pun terbilang mudah, teman-teman hanya perlu melakukan klik pada menunya seperti yang saya tandai pada gambar di atas. Maka tampilan akan seperti gambar di atas. Kemudian pilih database yang akan dilakukan pencarian, kemudian masukkan kata/kolom/tabel/apapun itu yang akan dicari pada kotak pencarian. Maka list hasil akan terlihat. Teman-teman pun dapat melakukan penyaringan tipe object apa aja yang akan dicari. Dalam contoh saya, saya ingin mencari semua yang berhubungan dengan kata name, baik itu kolom maupun tabel. Maka tampilan di laptop saya, hasil akan seperti berikut :

Result search

Dalam hasil pencarian tersebut akan terlihat semua kata yang terkait dengan kata “name”, baik itu sebagai kolom dalam sebuah tabel, maupun parameter & isi dari sebuah stored procedure.

Nah, untuk kasus awal saya sebelumnya, saya menggunakan kata kunci “SELECT * FROM table2” untuk pencarian sehingga saya mengetahui semua stored procedure dan fungsi, bahkan trigger yang melakukan insert dari table2 menggunakan query select * from.

Demikian sedikit info untuk sebuah tools yang sering saya pakai untuk pencarian kata terkait database SQL Server. Mudah-mudahan bermanfaat untuk teman-teman yang mengalami masalah yang sama dan tools tersebut menjadi solusi jitu untuk permasalahan teman-teman juga.

Terima kasih dan selamat malam… 😀