We are not waiting for future, We create the future

Tags


ติดตั้ง Gitlab-runner ไว้ใช้เอง

21st April 2019

หลังจากที่ทีมผมเริ่มใช้งาน Gitlab มาปีกว่าๆ ทีมก็เริ่มใหญ่ขึ้น มีหลายโปรเจ็คที่เข้ามาให้ทำมากมาย และมีการใช้งาน Pipeline เยอะมากๆ จนเกินกำหนดที่ทาง Gitlab ให้เราใช้ฟรี

2,000 นาทีในการใช้งาน Pipeline

ซึ่งการใช้งาน Pipeline หากครบ 2,000 นาทีต่อเดือนแล้ว ตัว CI/CD ของเราก็จะไม่สามารถใช้งานได้ โดยใน Pipeline เราจะขึ้น Stuck สีส้มแบบนี้

Pipeline ติด Stuck ทำงานไม่ได้

หากอยากใช้งานต่อก็คงต้องสมัครแบบ Silver ซึ่งเขาคิดอยู่ที่ 19$ ต่อคน และเราจะได้ 10,000 นาทีต่อเดือนมา

Gitlab pricing

ผมก็ยังมองว่าแพงอยู่ดี T.T แถม Runner ที่เราใช้ก็เป็นแบบ Shared runners ด้วยนะ ก็คือเราใช้ Runner ร่วมกับคนอื่นๆ ในโลก บ้างครั้งที่ผมเคยเจอก็มีอาการแบบช้า หรือติดสถานะ Pending ตั้งนานทำให้ Pipeline ไม่ยอมเริ่มทำงานสักที วิธีแก้ไขก็คือทำ Gitlab runner server เองก็แล้วกัน

Gitlab runner คืออะไร?

บ่นมาตั้งยาว บ้างคนอาจสงสัยว่า Gitlab runner มันคืออะไร มันก็คือ Server ที่ไว้ทำงานพวก Pipeline ทั้งหมด โดยมันจะทำการ Run jobs และส่งค่ากลับมาที่ Gitlab

Gitlab diagram

ติดตั้ง Gitlab runner

ผมขอเลือกวิธีการติดตั้ง Gitlab runner บน Digital ocean นะเพราะมันง่ายดี

สร้าง Droplet

ให้เราสร้าง droplet แล้วติดตั้ง docker มาด้วยเลย

สร้าง 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 ของเรา

เมื่อติดตั้งเรียบร้อยแล้ว เราจะต้องทำการ Register gitlab runner เข้ากับ Gitlab server ของเราก่อน โดยเราสามารถ Register ไว้กับ Group หรือ Project ก็ได้แต่ผมแนะนำให้ Register ไว้กับ Group ดีสุดเพราะทำให้ Project ที่อยู่ภายใน Group นั้นสามารถใช้งาน Runner server ตัวนี้ได้

ให้ไป Group ที่เราต้องการจากนั้นไปที่เมนู Settings > CI/CD แล้วเปิดข้อมูล Runner ขึ้นมา

Runner ใน Group 

ให้เราดูในส่วนข้อ 3 registration token ไว้

Copy registration token

กลับมายัง Runner server ของเราต่อให้พิมพ์คำสั่ง

$ sudo gitlab-runner register

ใส่ข้อมูลดังนี้

  • Please enter the gitlab-ci coordinator URL: ใส่ https://gitlab.com
  • Please enter the gitlab-ci token for this runner: ใส่ Registration token ที่ได้มา
  • Please enter the gitlab-ci description for this runner: ใส่รายละเอียดของ Runner ตัวนี้ โดยมันจะไปแสดงบน Gitlab
  • Please enter the gitlab-ci tags for this runner: ใส่ชื่อ tags เพื่อจะเป็นตัวที่จะไปเรียกใช้งานบน .gitlab-ci.yml เช่น twin-runner-test
  • Please enter the executor: ใส่ docker
  • Please enter the default Docker image: ใส่ docker ก็ได้ครับ หรือใครจะกำหนดให้ docker image เริ่มต้นเป็นของอะไรก็ใส่ไป

เราสามารถตรวจสอบรายละเอียดได้โดยการพิมพ์คำสั่ง

$ sudo gitlab-runner list

เมื่อใส่ครบหมดแล้ว ให้เรากลับไปดูที่ Gitlab server อีกครั้งในหน้าเดิม เราก็จะเจอ Runner ที่เรา Register เข้ามาแล้ว

Gitlab runner ที่ regis เข้ามา

วิธีการเรียกใช้งาน

คราวนี้เรามาดูวิธีการเรียกใช้งาน 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

IT manager & DevOps @Twin Synergy Co.,Ltd

View Comments