มาทำความรู้จัก กับ Travis-CI กันสักหน่อย

https://goo.gl/OvkD2h

Travis-CI คือ เครื่องมือสำหรับการทำ Continuous Integration (CI) เพื่อให้มั่นใจอยู่ตลอดเวลาว่า Project ของเรานั้น Build แล้วไม่พัง เพราะทุกๆ Commit มักมีความเสี่ยงอยู่ตลอดเวลา พอดีว่าเผลอตัว Push ไปแล้ว…

Continuous Integration (CI) คือ เครื่องมือในการทำบูรณาการอย่างต่อเนื่องให้เป็นเรื่องธรรมดาในการพัฒนาองค์กรมากที่สุด… แปลออกมาแล้วดู งงๆ เนาะ เอาเป็นว่ามันคือการนำ Code มารวมกันแล้วนำ Build และทดสอบด้วยระบบงานอัตโนมัติ ตามที่ผมเข้าใจนะ รายละเอียดเพิ่มเติม

เครื่องมือในการทำ CI มีหลายตัวมากยกตัวอย่าง เช่น jenkins, Travis-CI, CircleCI, Gitlab CI และ อื่นๆ ในบทความนี้ขอยกตัวอย่างการใช้งานของ Travis-CI นะครับ

Travis-CI เขาก็มีตัวอย่างการทำของแต่ละภาษาให้เราได้เริ่มต้นได้ง่ายๆ เลย

https://docs.travis-ci.com/user/getting-started/

ด้วยนาย Travis-CI นั้นจะ Integration กับ Github เราต้อง Sign in ด้วย Github ก่อน ตามลิงค์ด้านล่างเลย

หลังจากที่เราทำการเข้าสู่ระบบจะเห็นได้ว่ามัน Sycn Repository ให้เราโดยอัตโนมัติเราอยากทำ Project ไหนก็แค่เปิดสวิตซ์ให้มันทำงานซะก่อน เช่น

แค่นี้ก็เรียบร้อยแล้วครับ โดยโจทย์ของเจ้าของบล็อค คือ ต้องการสร้างระบบงานอัตโนมัติสำหรับการ Build และเมื่อผ่านก็ให้ Deploy ไฟล์ .apk ในทุกๆ การ Push ขึ้นไปบน Repository เริ่มกันเลย ลุย!!!

ขั้นตอนแรกให้ทำการสร้างไฟล์ .travis.yml ไว้ใน root ของ Folder Project เจ้าของบล็อคทำเป็น Android แล้วกันเนาะ เพราะเป็นอยู่อย่างเดียว 555 เช่น

จากตัวอย่างชื่อ tag ต่างๆ สามารถสื่อความหมายได้อย่างชัดเจนเนาะ ส่วนประเด็นสำคัญคือ tag script และ deploy

tag script จะใช้คำสั่ง gradle ถ้าใครไม่รู้จักคำสั่ง gradle ก็สามารถอ่านเพิ่มเติมได้
tag deploy อาจจะยุ่งยากเรื่องของ secure คือต้องไปเอา personal token ของ Repository ใน Github มาซะก่อน

ขั้นตอนการสร้าง Personal Token

  1. ให้เข้าไปที่ setting แล้วเลือกเมนูที่ชื่อว่า Personal access tokens
  2. ให้กด Generate new token ไปเลย
  3. เมื่อ Confirm Password เสร็จ ก็จะได้แบบนี้

โดย Scopes ให้เอาเฉพาะ Repo ก็เพียงพอส่วน Token description ผมขอตั้งเป็นชื่อ Project แล้วก็กด Generate token ก็จะได้ Token มาถือเป็นอันเรียบร้อย

จากนั้นก็กลับมาที่ไฟล์ .travis.yml ของเรา แล้วนำ token ที่ได้มาวางไว้แทน ${personal_token} ของผมด้วยนะครับ

ต่อไปก็ทำการ push code ขึ้น Repository ดูแล้วให้เขามาดูการทำงานบนหน้าเว็ปของ Travis-CI ก็จะได้แบบนี้

จะเห็นได้ว่ามันทำการสร้างระบบงานอัตโนมัติให้เราโดยสามารถดูตรง Job log ได้แบบ Real Time ไปเลยรับรู้ได้ทุกความเคลื่อนไหว

เมื่อนาย Travis ทำงานเสร็จก็ให้กลับไปดูที่ Repo บน Github ในเมนู Release ก็จะได้ดังนี้

จะเห็นได้ว่าเมื่อ Build ผ่านมันก็ Deploy Release บน Github ให้เราเลย สวดยอด!!!

แถมยังส่ง Result มายัง Email ให้เราอีกด้วย

และเจ้า Travis-CI ยังมี Feature ที่พึ่งเพิ่มเข้ามาใหม่ คือ Cron Jobs ซึ่งยังเป็น Beta อยู่ มันมีไว้ให้เราสามารถตั้งตารางเวลาการทำงานแบบอัตโนมัติซึ่ง สามารถกำหนดค่าได้ดั้งนี้

  1. สามารถเลือก Branch ที่ต้องการให้ทำงาน
  2. สามารถตั้งระยะเวลาในการ Interval โดยจะมี monthly, weekly และ daily
  3. สามารถกำหนดเงื่อนไขในการทำงานโดยจะมี Always run หรือ Do not run if there has been a build in the last 24h ใน Options
เข้าไปที่ Setting นะครับ

เมื่อได้ตั้งค่า Cron Jobs แล้วนาย Travis ก็จะทำงานให้เราโดยอัตโนมัตินั่นเอง

สรุป การทำ Continuous Integration (CI) นั้นเข้ามาช่วยให้เรามั่นใจได้ว่าทุกๆ การเปลี่ยนแปลงของ Code มันยังคงทำงานได้เหมือนเดิมแต่ต้องมี Test ด้วยถึงจะคุ้มค่า และเข้ามาพัฒนาระบบงานให้เป็นแบบอัตโนมัติ ส่วนของนาย Travis-CI ก็ถือเป็นเครื่องมือที่ทำงานได้รวดเร็วจนเป็นที่น่าพอใจหลังจากได้ลองใช้ตัวอื่นๆ เช่น Gitlab CI และ Jenkins แต่ก็ยังมีข้อเสียที่ Jenkins ทำได้ดีกว่าคือ เรื่องของผู้ให้บริการ Git ที่รองรับได้มากกว่า และมีลูกเล่นเยอะกว่าแน่นอน