Continuous Integration untuk pengembangan iOS app dengan jenkins dan xcpretty

Dalam pengembangan iOS app saat, untuk kebutuhan Continuous Integration (CI), sebetulnya sudah ada support native dari Apple yang terintegrasi di dalam XCode IDE dan XCode Server. Tapi dalam percobaan kami banyak hal yang masih membuat solusi yang diberikan Apple tersebut belum cukup nyaman untuk dipakai, terutama untuk developer yang membutuhkan fleksibilitas. Salah satu isu penting adalah  minimnya, bahkan hampir tidak ada, integrasi dengan Cocoapods yang merupakan package manager yang banyak dipakai developer.

Karena itu kami kembali menggunakan jenkins. Dan untuk membuat XCode bisa bekerjasama denhan baik dengan alur kerja jenkins, kami menggunakan beberapa fiture dari xcpretty untuk hal tersebut seperti akan diterangkan di bawah nanti.

Sekilas tentang XCPretty

XCPretty adalah tools untuk membuat keluaran dari xcodebuild (XCode command line tool) lebih nyaman di lihat dan memungkinkan untuk di export dalam format yang bisa diproses dengan tool lain. Ini memungkinkan hasil eksekusi di xcodebuild bisa di parse dan ditampilkan di tools seperti Jenkins.

Persiapan awal

Sebagai persiapan awal, kebutuhan di bawah ini perlu dipasang dan disiapkan di CI server :

  • XCode
  • Cocoapods
  • XCPretty

Setelah repository dan trigger untuk build sudah disiapkan, kita bisa siapkan task-task berikutnya di Jenkins.

Pre-build : install paket yang dibutuhkan dengan cocoapods

Tambahkan task pod install berikut untuk mengunduh semua paket yang dibutuhkan project

export LANG=en_US.UTF-8
pod install --verbose
rm -f build/reports/junit.xml

Pembersihan dan eksekusi build

Kita bersihkan dulu sisa build sebelumnya untuk menjamin kebersihan workspace. Kita pipe ke xcpretty agar tampilan di log displaynya juga lebih mudah/nyaman dibaca

/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -workspace myproject.xcworkspace
-scheme myscheme clean | xcpretty -c

lalu akhirnya eksekusi build dan menjalankan test dengan task di bawah :

/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -workspace myproject.xcworkspace
-scheme myscheme
-sdk iphonesimulator
-destination 'platform=iOS Simulator,name=iPhone 6s,OS=9.0' test | xcpretty -c -r junit

task di atas selain membuat tampilan log enak dilihat juga mengeluarkan output dalam format junit yang nanti bisa diparse oleh Jenkins

Post-build : parse hasil test untuk ditampilkan di jenkins

Akhirnya, tambahkan post-build task Publish JUnit Test Result untuk mem-parse hasil keluaran test ke tampilan hasil build dengan output path di bawah.

build/reports/junit.xml

Output log

Seperti disinggung di atas, selain output test yang bisa diintegrasikan dengan jenkins, dengan xcpretty kita juga bisa mendapatkan output log yang lebih mudah dibaca dan direview dibandingkan hasil mentah dari perangkat build. Di bawah ini adalah cuplikan dari output log hasil dari xcpretty yang tampil di log jenkins :

output2

Dengan setup di atas kita bisa mendapatkan Continuous Integration dalam ekosistem  yang lebih terbuka dan fleksibel dibandingkan apa yang ditawarkan Apple saat ini.

Continuous Integration untuk pengembangan iOS app dengan jenkins dan xcpretty

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s