Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

มาสร้างระบบ Continuous Integration สำหรับ Android app กันดีกว่า

$
0
0

android-ci

android-ci วันนี้นั่งสร้างระบบ Continuous Integration (CI) สำหรับ Android app นิดหน่อย เพื่อทำการ integrate ส่วนการทำงานต่าง ๆ เข้าด้วยกัน ทำการ build และ ทดสอบระบบแบบอัตโนมัติ ทำให้เรารู้ข้อผิดพลาด เพื่อทำการแก้ไขได้อย่างรวดเร็ว ดังนั้นมาดูกันว่าจะทำการสร้างระบบ CI อย่างไรกันบ้าง ?

เริ่มจาก CI Server มีอะไรให้ใช้บ้าง ?

ถ้าที่ผมใช้ประจำก็คือ Jenkins เป็น Opensource มัน Free มี plugin ให้ใช้เพียบ เอกสารเยอะ สามารถทำการติดตั้งที่ server ของเราเองได้ ถามว่ามีเครื่องมืออื่น ๆ อีกไหม ? ตอบได้เลยว่ามากมาย ตัวอย่างเช่น ถ้าเป็นระบบ opensource ก็ใช้ TravisCI ได้ ซึ่งเป็น Free cloud service หรือถ้ามีเงินก็ซื้อพวก TeamCity มาใช้ก็ได้ ซึ่งมีความสามารถที่เยอะกว่าและดีกว่าแน่นอน
ดังนั้นจะเลือกเครื่องมืออะไรก็ดูว่าระบบงานของคุณเป็นอย่างไร ? ต้องการอะไรบ้าง ? เพื่อให้ได้สิ่งที่เหมาะสมนะครับ

สิ่งที่ต้องคิดและออกแบบเสมอคือ flow/process หรือขั้นตอนการทำงานของ CI ?

หรือบางครั้งจะเรียกว่า build pipeline หรือ build process ตั้งแต่การดึง source code ใน version ที่ต้องการ ไปจนถึงการ build, test และ deploy เพื่อทำให้เรามั่นใจในการทำงานของระบบ ว่ามีคุณภาพมากเพียงพอ ที่ทำให้เรามีความมั่นใจหรือไม่ ? แนะนำให้ทำการคิดและออกแบบก่อนสร้างเสมอนะครับ ตัวอย่างเช่น
  • ขั้นตอนที่ 1 ทำการดึง code จาก version control ใน brach ที่ต้องการ
  • ขั้นตอนที่ 2 ทำการวิเคราะห์ source code ด้วยเครื่องมือพวก Static Code Analysis
  • ขั้นตอนที่ 3 ทำการทดสอบ Unit test
  • ขั้นตอนที่ 4 ทำการทดสอบ User Interface test
  • ขั้นตอนที่ 5 ทำการทดสอบ End-to-End test
  • ขั้นตอนที่ 6 ทำการทดสอบStress test
  • ขั้นตอนที่ 7 ทำการสร้างไฟล์ APK สำหรับการ deploy
  • ขั้นตอนที่ 8 ทำการ deploy ระบบ
เมื่อเราสามารถคิดและออกแบบระบบการทำงานของ CI Server ได้แล้ว จากนั้นจึงทำการเลือกเครื่องมือที่จะใช้งานตามความต้องการต่อไป โดยขั้นตอนจะมากจะน้อยก็อยู่ที่ความต้องการล้วน ๆ เครื่องมือในแต่ละขั้นตอนก็เยอะแยะ แต่ขอสรุปเท่าที่ใช้ก็แล้วกัน

1. การวิเคราะห์ source code

Android Lint ทำการตรวจสอบทั้งไฟล์ java และ xml ต่าง ๆ ใน Android project ช่วยดูทั้งเรื่องจุดที่มีโอกาสจะเกิด bug การตรวจสอบความถูกต้องของการตั้งชื่อ การใช้งาน เรื่องของ security และ performance เรื่องของ usability และ accessibility อีกต่างหาก Facebook Infer ช่วยตรวจสอบเรื่องของ Null pointer exception และ resource leak เพื่อทำให้เรามั่นใจใน code มากยิ่งขึ้น และยังมีเครื่องมืออื่น ๆ ซึ่ง Java developer น่าจะรู้จักเช่น

2. การทดสอบ

โดยใน Android นั้นมีเครื่องมือการทดสอบมาให้ครบเลย
  • Unit Testing ใช้ jUnit4
  • แต่ถ้าใน code ที่ทดสอบ Unit testing มี library ของ Android แล้วจะไม่สามารถทดสอบได้ ต้องใช้ Instrumentation test ของ Android แทนนะครับ
  • UI Testing ใช้งาน Espresso
  • End-to-End Testing สามารถใช้ได้ทั้ง Appium และ Calabash
  • Stress Testing ใช้งาน Monkey test ซึ่งเขียน shell script ง่าย ๆ ก็ใช้ได้แล้ว
โดยการทำงานตั้งแต่การ build, test, สร้างไฟล์ APK และ deploy นั้น จะทำงานผ่าน gradle ทั้งหมดเลย

แน่นอนว่าแต่ละขั้นตอนจะถูกกำหนดไว้ใน CI Server นั่นเอง

เมื่อใดก็ตามที่ code ใน version control มีการเปลี่ยนแปลง CI Server จะทำงานตามขั้นตอนต่าง ๆ เหล่านี้แบบอัตโนมัติ มันน่าจะทำให้ทีมพัฒนารู้สึกดีขึ้นมาบ้าง

Viewing all articles
Browse latest Browse all 1997

Trending Articles