มาใช้ gitlab-runner ทำ CI/CD แทน Jenkins กันเถอะ

Sommai Krangpanich
pnpsolution
Published in
3 min readJun 6, 2022
มาใช้ gitlab-runner ทำ CI/CD แทน Jenkins กันเถอะ
มาใช้ 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 นี้ สิ่งที่ต้องมีดังนี้

  1. docker link สำหรับติดตั้ง
  2. gitlab-runner link สำหรับติดตั้ง แนะนำเป็นแบบ binaries ครับ
  3. ตั้งค่าให้ gitlab เป็น https (ในกรณี self host)

ตั้งค่า Gitlab-runner

ตัว gitlab-runner สามารถ run อยู่บนเครื่องไหนก็ได้โดยหลักการแล้วจะเป็นการลงทะเบียนตัว runner ให้รู้จักกับ gitlab server เราผ่าน token ฉนั้นเราต้องทำ 2 ขั้นตอนคือ 1. หา token จาก gitlab-server กับ 2. ลงทะเบียน gitlab-runner ดังภาพ

ความสัมพันธ์ของ Gitlab Server กับ Gitlab Runner
ความสัมพันธ์ของ Gitlab Server กับ Gitlab Runner

ขั้นที่ 1 หา token ของ gitlab server

  • login ด้วย user root แล้วเข้าไปที่ menu / Admin ดังภาพ
เข้า menu / Admin
เข้า menu / Admin
  • เข้าไปที่ Overview / Runners จะได้หน้าจอดังภาพ ให้เอาข้อมูลตามลูกศรมาใช้งานในขั้นต่อไป
Overview / Runners
เมนู 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 ดังภาพ

ภาพหลังจาก register เสร็จแล้ว
ภาพหลังจาก register เสร็จแล้ว

เริ่มเขียน Pipeline Script

ตัว gitlab-runner มีหลักการทำงานคล้าย Jenkins ค่อนข้างมาก นั่นคือถ้าเป็น Jenkins เราสามารถสร้าง file Jenkinsfile เก็บไว้ใน Project แล้วเขียน pipeline script ใน file นั้นได้เลยแล้วตัว Jenkins ก็จะทำงานตามแต่ที่ตั้งค่าไว้

ตัว gitlab-runner ก็เช่นกันเราสามารถสร้าง file ชื่อ .gitlab-ci.yml แล้วเขียน pipeline script เข้าไปได้เลย สามารถดูเอกสารเพิ่มเติมได้ที่นี่

ภาพแสดงตัวอย่าง pipeline script
ภาพแสดงตัวอย่าง 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 ทั้งหมด ดังภาพ
รายละเอียดประวัติการทำงานของ Pipelines
รายละเอียดประวัติการทำงานของ Pipelines
  • กดปุ่ม Run piplines > Run pipeline หลังจากนั้นก็รอผลการทำงานได้เลยไม่จำเป็นต้องเป็น web browser ทิ้งไว้

สำหรับท่านใดที่ลองทำตามแล้วไม่ได้ หรือว่าติดขัดอย่างไรสามารถเข้ามาพูดคุยแลกเปลี่ยนกันได้ที่ หน้า page facebook : pnpsolution หรือ web site : www.pnpsw.com ได้ครับ

--

--