มาใช้ gitlab-runner ทำ CI/CD แทน Jenkins กันเถอะ
เนื่องจากมีหลาย Project ที่ใช้ Jenkins ทำ CI/CD แล้วมักจะพบกับปัญหาที่ Jenkins มักชอบ Crash ไปโดยไม่บอกไม่กล่าว อีกทั้งปัจจุบันก็ได้ใช้ Gitlab เป็นที่จัดเก็บ Code เป็นส่วนใหญ่อยู่แล้ว
อีกทั้งตัว Gitlab เองก็มีความสามารถในการทำ CI/CD มาให้พร้อมอยู่แล้วนั่นก็คือตัว gitlab-runner บทความนี้ก็จะมาพูดถึงวิธีการติดตั้ง สิ่งที่ต้องเตรียมก่อนการติดตั้ง และการเขียน pipeline script เพื่อสั่งให้ gitlab-runner ทำงานตามที่ต้องการ
ความต้องการขั้นพื้นฐาน
ตัว gitlab-runner นั้นมีวิธีกาทำงานคล้ายกันกับ Jenkins เลยนั่นก็คือการนำ script ที่เราเขียนเป็น pipeline ไว้มาทำงานทีละคำสั่ง ฉนั้นก่อนที่เราจะเริ่มใช้งาน gitlab-runner เราต้องมาพิจารณาดูก่อนว่าการ build, test, deploy ของเรานั้นใช้อะไรบ้าง ในบทความนี้แนะนำให้ใช้ docker เป็นเครื่องมือในการ build และ deploy ผ่าน shell ของเครื่อง gitlab-runner เลย ถ้าเป็นตาม use case นี้ สิ่งที่ต้องมีดังนี้
- docker link สำหรับติดตั้ง
- gitlab-runner link สำหรับติดตั้ง แนะนำเป็นแบบ binaries ครับ
- ตั้งค่าให้ gitlab เป็น https (ในกรณี self host)
ตั้งค่า Gitlab-runner
ตัว gitlab-runner สามารถ run อยู่บนเครื่องไหนก็ได้โดยหลักการแล้วจะเป็นการลงทะเบียนตัว runner ให้รู้จักกับ gitlab server เราผ่าน token ฉนั้นเราต้องทำ 2 ขั้นตอนคือ 1. หา token จาก gitlab-server กับ 2. ลงทะเบียน gitlab-runner ดังภาพ
ขั้นที่ 1 หา token ของ gitlab server
- login ด้วย user root แล้วเข้าไปที่ menu / Admin ดังภาพ
- เข้าไปที่ Overview / Runners จะได้หน้าจอดังภาพ ให้เอาข้อมูลตามลูกศรมาใช้งานในขั้นต่อไป
ขั้นที่ 2 ลงทะเบียน gitlab-runner
- run คำสั่งดังนี้ที่เครื่องที่ติดตั้ง gitlab-runner เอาไว้
# คำสั่งนี้เป็นตัวอย่างบน linux ถ้าเป็น windows, mac ไม่จำเป็นต้องใส่ sudosudo gitlab-runner register
Program จะมี prompt ให้ใส่ข้อมูลดังต่อไปนี้
- Enter the GitLab instance URL (for example, https://gitlab.com/): ให้ใส่ url ที่ นำมาจากส่วนบนไปใส่
- Enter the registration token: ให้นำ token จากด้านบนไปใส่
- Enter a description for the runner: ใส่อะไรก็ได้
- Enter tags for the runner (comma-separated) ในส่วนนี้แนะนำให้ใส่เป็นภาษาอังกฤษพิมพ์เล็กทั้งหมดไม่มี space และอักขระพิเศษ เพราะส่วนนี้จะมีส่วนสำคัญในการเขียน pipeline script ว่าส่วนไหนของ script จะให้มาทำงานที่ runner ตัวนี้จะอ้างอิงกันด้วยชื่อตรงส่วนนี้
- Enter an executor: ssh, docker+machine, docker-ssh+machine, virtualbox, kubernetes, custom, docker, docker-ssh, parallels, shell: ส่วนนี้แนะนำเป็น shell
หลังจากเสร็จแล้วให้ทำการ refresh หน้าจอ Overview / Runners จะปรากฏ runner ดังภาพ
เริ่มเขียน Pipeline Script
ตัว gitlab-runner มีหลักการทำงานคล้าย Jenkins ค่อนข้างมาก นั่นคือถ้าเป็น Jenkins เราสามารถสร้าง file Jenkinsfile เก็บไว้ใน Project แล้วเขียน pipeline script ใน file นั้นได้เลยแล้วตัว Jenkins ก็จะทำงานตามแต่ที่ตั้งค่าไว้
ตัว gitlab-runner ก็เช่นกันเราสามารถสร้าง file ชื่อ .gitlab-ci.yml แล้วเขียน pipeline script เข้าไปได้เลย สามารถดูเอกสารเพิ่มเติมได้ที่นี่
Run and Monitor
หลังจากที่เราเขียน pipeline script เสร็จแล้ว (1 script : 1 project) ใน script ที่เขียนสามารถสั่งให้ auto execute ได้ตามเงื่อนไขที่เรากำหนดไว้ใน script
ในกรณีทีเราต้องการ manual สั่งให้ pipeline script ทำงานสามารถทำตามขั้นตอนดังนี้
- เข้าไปที่ gitlab server แล้วเข้าไปที่ project ที่เราเขียน pipeline script ไว้
- กดเข้า menu CI/CD / Pipelines จะเห็นรายละเอียดประวัติการทำงานของ Pipelines ทั้งหมด ดังภาพ
- กดปุ่ม Run piplines > Run pipeline หลังจากนั้นก็รอผลการทำงานได้เลยไม่จำเป็นต้องเป็น web browser ทิ้งไว้
สำหรับท่านใดที่ลองทำตามแล้วไม่ได้ หรือว่าติดขัดอย่างไรสามารถเข้ามาพูดคุยแลกเปลี่ยนกันได้ที่ หน้า page facebook : pnpsolution หรือ web site : www.pnpsw.com ได้ครับ