มาติดตั้ง Jenkins เพื่อทำ CI/CD สำหรับ Android กันเถอะ (Step 3)
Thanks to Theerapat Hataitam , Wisanu Choungsuwanish
บทความนี้ผู้เขียนจะนำเสนอเรื่องของการทำ CI (continuous integration) และ CD (continuous delivery) โดยใช้การ Develop บน Android และนำ Source code ขึ้นไปไว้ที่ Gitlab จากนั้น จึง integration ไปที่ Jenkins เพื่อทำ CI และ CD
หลังจากที่ ทำการ Integration Jenkins กับ Gitlab เรียบร้อยแล้วเราก็จะมาเข้าสู่ขั้นตอนของการ Run UnitTest และ Build APK ออกมาโดยอัตโนมัติ
โดยผู้เขียนจะแบ่งขั้นตอนออกเป็นส่วนๆ ดังนี้
Step 1 : Install และ Setup Jenkins บน CentOS Server
Step 2 : Integration Jenkins กับ Gitlab
Step 3 : Build และ Run Unit Test ของ Application
Step 3: Build และ Run Unit Test ของ Application
เมื่อมาถึงขั้นตอนนี้เราจะต้องมี Source code ที่สามารถ Run ใช้งานได้จริงและมีการเขียน Unit Test ไว้แล้ว เพื่อทดสอบว่า เรา Setup Jenkins ได้อย่างถูกต้อง
Install Android SDK
ก่อนอื่นเราต้องติดตั้ง java jdk และตัวแตกไฟล์ Zip เพิ่มเติม โดยเปิดหน้า Console ขึ้นมา แล้วพิมพ์คำสั่ง
$ sudo yum install java-1.8.0-openjdk-devel
$ sudo yum install unzip
เมื่อติดตั้ง java jdk เสร็จแล้ว เราจะต้องไปที่ Path ของ jenkins และสร้าง Folder android-sdk ขึ้นมา ด้วยคำสั่ง
$ cd /var/lib/jenkins
$ sudo mkdir android-sdk
แล้วจึงไป Download SDK สำหรับ Build App กันก่อน (ซึ่งผู้เขียนใช้เวอร์ชั่น 3859397 ที่เป็นเวอร์ชั่นล่าสุด ในขณะที่เขียนบทความนี้ ผู้อ่านสามารถเช็คเวอร์ชั่นได้ที่ https://developer.android.com/studio/index.html#downloads)
$ sudo curl https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -o android-sdk.zip
หลังจากที่ Download เสร็จแล้ว เราจะได้ไฟล์ android-sdk.zip มา ก็ทำการแตกไฟล์ Zip เมื่อแตกไฟล์แล้วก็ลบไฟล์ Zip ออกให้เรียบ ด้วยคำสั่ง
$ sudo unzip android-sdk.zip -d .$ sudo rm android-sdk.zip
เราจะได้ Folder tools มา ให้เข้าไปที่ Folder tools เพื่อไป Update tools และ Install Android SDK Build-Tools, Android SDK Platform, Android Support Repository, Google Repository โดยพิมพ์คำสั่งตามลำดับ
$ cd tools$ sudo ./bin/sdkmanager "tools"$ sudo ./bin/sdkmanager "build-tools;26.0.2" "platforms;android-26" "extras;android;m2repository" "extras;google;m2repository"$ sudo ./bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2"
เมื่อติดตั้งเรียบร้อยสามารถ Check Package ต่างๆ ที่ถูก Install ไปแล้วได้ ด้วยคำสั่งด้านล่าง หากแสดงข้อมูลต่างๆ ขึ้นมาก็แปลว่าติดตั้ง Package เรียบร้อย
$ sudo ./bin/sdkmanager --list
Setting Jenkins
จากนั้นเปิด UI ของ Jenkins ขึ้นมา Login ให้เรียบร้อย แล้วไปที่
Manage Jenkins > Configure System > ที่หัวข้อ Global properties
ติ้กเลือกที่ Environment variables แล้วกดปุ่ม Add จะมีฟิลด์ Name กับ Value ให้ใส่ไป 2 อัน ดังนี้
Name > “ANDROID_HOME”
Value > “/var/lib/jenkins/android-sdk”Name > “JAVA_HOME”
Value > “/usr/lib/jvm/jre-1.8.0-openjdk”
จากนั้นเลื่อนลงมาที่หัวข้อ Gitlab ในฟิลด์ Enable authentication for ‘/project’ end-point จะต้องไม่ถูกติ้กเลือก หากมีการติ้กเลือกอยู่ให้เอาออกครับ เมื่อใส่ค่าต่างๆ เสร็จเรียบร้อยแล้วกด Save
ขั้นต่อไป ให้ไปที่ Project ของเรา และเลือกเมนู Configure คลิกที่ tab Build จากนั้นคลิกปุ่ม Add Build Step เลือกเมนู Execute Shell ในช่อง Command ให้ใส่คำสั่ง
chmod +x gradlew
./gradlew clean
./gradlew assembleDebug
และคลิกที่ปุ่ม Add Build Step อีกครั้ง เลือกเมนู Invoke Gradle Script และ ติ้กเลือก Use Gradle Wrapper ในช่อง Tasks ให้ใส่คำว่า Test
จากนั้นเลื่อนลงมาด้านล่างที่หัวข้อ Post-build Actions ให้คลิกที่ปุ่ม Add Post-build Actions เลือกเมนู Archive the artifacts ในช่อง Files to archive ให้ใส่ **/*.apk
จากนั้น กดปุ่ม Save ก็จะเป็นการเสร็จขั้นตอนทั้งหมดของการทำ CI เรียบร้อย โดยสามารถทดสอบได้ด้วยการ Push Code จาก Gitlab ที่หน้า Jenkins ใน Project ของเราจะต้องมี progress bar แสดงขึ้นมา และเมื่อ Build จนเสร็จ และผ่าน UnitTest ทั้งหมดที่เราเขียนไว้ บอลสถานะจะเป็นสีฟ้า และเราจะได้ไฟล์ APK มา สามารถ Download มาทดสอบได้เลย
ก็เป็นอันเสร็จเรียบร้อยแล้วนะครับ ขั้นตอนอาจจะเยอะสักหน่อยแต่ก็ทำเพียงแค่ครั้งเดียว เมื่อเรา Setup ระบบขึ้นมาได้แล้ว ก็สามารถที่จะประหยัดเวลาในการ ส่ง App ไป Test ได้เยอะ ซึ่งเราไม่ต้องเสียเวลามานั่ง Build App บน Smart Phone ของ Tester เพราะ Tester สามารถ Download ไป Test ได้เลย และลดปัญหา Code Error บางเครื่อง หรือ Work On my machine เพราะทุก Commit ที่ถูก Push ขึ้นจะถูก Build บน Environment เดียวกันหมด หากมีบอลแดงขึ้นก็รีบตรวจสอบและแก้ไขชะ เท่านี้การทำงานก็จะไม่ยุ่งยากอีกต่อไป