การทำ cron job ของ CI สำหรับชาว Developer ทั้งหลาย

Programming Jul 24, 2020

ยอมรับว่าตอนแรกหลงทางไปไกลว่าจะใช้ตัวอื่น เนื่องจาก พอเราให้เจ้า CI ไปทำงานทุกๆ commit ผลที่เกิดขึ้นคือ ด้วยความที่โปรเจกใหญ่มาก ทำให้ pipeline นั้นทำงานเป็นชั่วโมงเลยหล่ะ แล้วยังทำงานเก่าไม่เสร็จ งานใหม่มาแทรก

Photo by Scott Graham on Unsplash

จนทำให้มีเมลล์เด้งไปยัง PM เนื่องจาก full limit data นั่นเอง

สิ่งที่คุณ PM เขาแคปมาให้จ้า

เลยต้องลบออก

สะเทือนใจ เลยต้องลบน้องออกจากโปรเจก

ที่คิดไว้จะทำ Cron Job (ที่ไม่ใช่ข้าวโพดเน้อ ถึงจะชื่อคล้ายๆกันก็เถอะ) ให้รันวันละครั้งพอ จุดประสงค์คือ

  • ช่วยดูให้หน่อยว่าไม่ build failed นะ
  • ถ้ามี Unit Test ก็ช่วยทำให้หน่อยนะ
  • ช่วยดู Code Style ด้วย ว่าควร improve อะไรเพิ่มบ้าง และเป็น Kotlin Style หรือไม่
  • และอื่นๆ เช่น อาจจะช่วยทำ Firebase App Distribution ได้

ก่อนอื่นไปสร้าง Pipeline กันก่อนเลย ไปที่ CI/CD > Pipelines คลิกที่ New schedule

หรือไปที่ CI/CD > Schedules ก็จะเจอหน้าสร้างเช่นกัน จากนั้นกรอกข้อมูลต่างๆลงไป เราเลือก Timezone Bangkok ไป และสามารถเลือก branch ได้ด้วย

และสิ่งที่น่าสนใจก็คือ การ set เวลาในการทำ Cron Job นั่นเอง เราอยากทำตอน 4 ทุ่ม ในวันจันทร์ถึงศุกร์ เราจะต้อง set อย่างไรกันนะ?

ref: https://en.wikipedia.org/wiki/Cron

จากตัวอย่างนั้น เราสามารถสรุปได้ดังนี้

เมื่อสร้างเสร็จแล้วเราสามารถรอเวลาเพื่อให้ทำงาน Cron Job หรือรีบร้อนก็กด run ไปก่อนได้เลยจ้า

สามารถอ่านเพิ่มเติมได้ที่

Pipeline schedules | GitLab
Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.

และไฟล์ gitlab ci ที่เราใช้นั้น จะเป็นดังนี้จ้า

เพราะเราเป็น Android Developer อ่ะเนอะ และต่อจากบล็อกที่แล้วที่กล่าวถึง ktlint นั่นเอง

เริ่มทำ Code Review ด้วย ktlint กันเถอะ
เนื่องด้วยทำงานบริษัท startup ที่เปลี่ยนแปลง requirement ได้บ่อย จนเดฟไม่มีเวลาทำ Unit Test แล้วไม่รู้จะทำ Code Review ยังไงอีก อ่ะงั้นเราค่อยๆเริ่มทำสักอย่างก็แล้วกัน แน่นอนว่า Android Kotlin…

มาดูผลกันหน่อยจ้าาาา ว่าจะรอดไหม

  • เมื่อ update file ตาม gist ด้านบนแล้ว ให้เริ่มทำงานตาม sehedule ที่ทำไว้ใน cron job พบว่าหลังจาก commit ไฟล์นี้ มันจะไม่เริ่ม run pipeline แล้วนะ เย้~
  • ตัว cron job ทำงานตามที่เรากำหนดไว้ด้วยหล่ะ
  • แต่ตรง lint มัน error ง่ะ เพราะมันไม่สามารถสร้าง report ของ lint ฝั่ง Android ได้แหะ เลยต้องแก้ path ของมัน
  • พอมาอ่านๆดูพบว่า เราสามารถ set crontab ในไฟล์ .gitlab-ci.yml  ได้เลยนะ

สำหรับ gitlab ci สามารถอ่านได้เพิ่มเติมได้เลยที่นี่

GitLab CI/CD pipeline configuration reference | GitLab
Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.
Introduction to CI/CD with GitLab | GitLab
An overview of Continuous Integration, Continuous Delivery, and Continuous Deployment, as well as an introduction to GitLab CI/CD.

สำหรับชาวดรอยโดยเฉพาะแนะนำอ่านอันนี้จ้า

Working with YAML in GitLab CI from the Android perspective
Guest author Renato Stanic shares a sample YAML configuration for Android projects, which helps his team with faster, more iterative development.

สุดท้ายฝากร้านกันสักนิด ฝากเพจด้วยนะจ๊ะ

อย่าลืมกด like กด share บทความกันด้วยนะคะ :)

Posted by MikkiPastel on Sunday, 10 December 2017

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.