หลังจากที่ทีมผมเริ่มใช้งาน Gitlab มาปีกว่าๆ ทีมก็เริ่มใหญ่ขึ้น มีหลายโปรเจ็คที่เข้ามาให้ทำมากมาย และมีการใช้งาน Pipeline เยอะมากๆ จนเกินกำหนดที่ทาง Gitlab ให้เราใช้ฟรี
ซึ่งการใช้งาน Pipeline หากครบ 2,000 นาทีต่อเดือนแล้ว ตัว CI/CD ของเราก็จะไม่สามารถใช้งานได้ โดยใน Pipeline เราจะขึ้น Stuck
สีส้มแบบนี้
หากอยากใช้งานต่อก็คงต้องสมัครแบบ Silver ซึ่งเขาคิดอยู่ที่ 19$ ต่อคน และเราจะได้ 10,000 นาทีต่อเดือนมา
ผมก็ยังมองว่าแพงอยู่ดี T.T แถม Runner ที่เราใช้ก็เป็นแบบ Shared runners ด้วยนะ ก็คือเราใช้ Runner ร่วมกับคนอื่นๆ ในโลก บ้างครั้งที่ผมเคยเจอก็มีอาการแบบช้า หรือติดสถานะ Pending ตั้งนานทำให้ Pipeline ไม่ยอมเริ่มทำงานสักที วิธีแก้ไขก็คือทำ Gitlab runner server เองก็แล้วกัน
บ่นมาตั้งยาว บ้างคนอาจสงสัยว่า Gitlab runner มันคืออะไร มันก็คือ Server ที่ไว้ทำงานพวก Pipeline ทั้งหมด โดยมันจะทำการ Run jobs และส่งค่ากลับมาที่ Gitlab
ผมขอเลือกวิธีการติดตั้ง Gitlab runner บน Digital ocean นะเพราะมันง่ายดี
ให้เราสร้าง droplet แล้วติดตั้ง docker มาด้วยเลย
ติดตั้ง Gitlab runner
หลังจากที่เรา ssh เข้ามายัง server ที่สร้างแล้ว ลองทดสอบ docker สักหน่อยว่ามีไหม
$ docker info
เราจะเจอข้อมูล docker ต่างๆ ก็เป็นอันว่าสำเร็จมี docker ไว้ใช้งานละ
จากนั้นก็ติดตั้ง Gitlab runner ได้เลย
$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
$ sudo apt-get install gitlab-runner
ติดตั้งเรียบร้อยแล้วก็ตรวจสอบสักหน่อย
$ gitlab-runner --version
Version: 11.10.0
Git revision: 3001a600
Git branch: 11-10-stable
GO version: go1.8.7
Built: 2019-04-19T09:48:55+0000
OS/Arch: linux/amd64
หากขึ้นข้อมูลเวอร์ชั่นก็เป็นอันว่าใช้งานได้
เมื่อติดตั้งเรียบร้อยแล้ว เราจะต้องทำการ Register gitlab runner เข้ากับ Gitlab server ของเราก่อน โดยเราสามารถ Register ไว้กับ Group หรือ Project ก็ได้แต่ผมแนะนำให้ Register ไว้กับ Group ดีสุดเพราะทำให้ Project ที่อยู่ภายใน Group นั้นสามารถใช้งาน Runner server ตัวนี้ได้
ให้ไป Group ที่เราต้องการจากนั้นไปที่เมนู Settings > CI/CD แล้วเปิดข้อมูล Runner ขึ้นมา
ให้เราดูในส่วนข้อ 3 registration token
ไว้
กลับมายัง Runner server ของเราต่อให้พิมพ์คำสั่ง
$ sudo gitlab-runner register
ใส่ข้อมูลดังนี้
Please enter the gitlab-ci coordinator URL:
ใส่ https://gitlab.comPlease enter the gitlab-ci token for this runner:
ใส่ Registration token ที่ได้มาPlease enter the gitlab-ci description for this runner:
ใส่รายละเอียดของ Runner ตัวนี้ โดยมันจะไปแสดงบน GitlabPlease enter the gitlab-ci tags for this runner:
ใส่ชื่อ tags เพื่อจะเป็นตัวที่จะไปเรียกใช้งานบน .gitlab-ci.yml เช่น twin-runner-testPlease enter the executor:
ใส่ dockerPlease enter the default Docker image:
ใส่ docker ก็ได้ครับ หรือใครจะกำหนดให้ docker image เริ่มต้นเป็นของอะไรก็ใส่ไปเราสามารถตรวจสอบรายละเอียดได้โดยการพิมพ์คำสั่ง
$ sudo gitlab-runner list
เมื่อใส่ครบหมดแล้ว ให้เรากลับไปดูที่ Gitlab server อีกครั้งในหน้าเดิม เราก็จะเจอ Runner ที่เรา Register เข้ามาแล้ว
คราวนี้เรามาดูวิธีการเรียกใช้งาน Gitlab runner ของเราในไฟล์ .gitlab-ci.yml
กัน โดยให้เพิ่ม
tags:
- twin-runner-test
ลงไปที่ Job ที่เราต้องการให้มันไปใช้ Runner ตัวไหน เช่น
composer:
stage: build
image: twinsynergy/phpfpm:7
script:
- composer install
cache:
key: cache-composer-vendor
paths:
- vendor/
policy: push
only:
- dev-release
- staging-release
tags:
- twin-runner-test
เพียงเท่านี้ Job นี้ก็จะไปใช้งานบน Gitlab-runner ของเราแล้ว ซึ่งค่าใช้จ่ายที่เพิ่มขึ้นมาก็คือค่า Gitlab runner server ที่อยู่บน Digital ocean มันก็ยังถูกกว่าไปจ่ายให้กับ Gitlab เองอยู่ดี
ใครยังไม่มี Account Digital ocean ไว้ใช้งาน คลิกได้เลย https://m.do.co/c/e4b9021fb0a7
Ref:
https://about.gitlab.com/2016/04/19/how-to-set-up-gitlab-runner-on-digitalocean/
https://docs.gitlab.com/ee/ci/yaml/README.html#tags