วันนี้นั่งสร้างระบบ 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 ระบบ
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 ทั้งหมดเลย