Facebook Pixel

Hướng dẫn Cài đặt Self-hosted Runners cho Github Actions

25 Sep, 2024

Ở bài này, mình sẽ hướng dẫn các bạn setup một self-hosted runners để tổ chức tận dụng tối đa sức mạnh của cơ sở hạ tầng nội bộ

Hướng dẫn Cài đặt Self-hosted Runners cho Github Actions

Mục Lục

Thay vì bị giới hạn bởi các tài nguyên và mức sử dụng miễn phí của các runners được cung cấp sẵn (GitHub Actions, GitLab, ...), Self-hosted Runners cho phép các tổ chức tận dụng tối đa sức mạnh của cơ sở hạ tầng nội bộ.

Với Self-hosted Runners bạn có thể tự quản lý và tùy chỉnh môi trường chạy workflow theo nhu cầu riêng của dự án, tối ưu tài nguyên, và cải thiện hiệu suất so với khi sử dụng cloud-hosted runners mặc định. Nếu bạn đang gặp khó khăn với việc cài đặt và sử dụng Self-hosted Runners, hãy cùng mình đi qua bài viết này để hiểu rõ hơn nhé.

1. Runners là gì?

Runners là những "người hùng thầm lặng" trong GitHub Actions, chịu trách nhiệm thực thi các jobs trong quy trình CI/CD. Bạn có thể hiểu đơn giản, runners là các máy chủ hoặc máy ảo mà trên đó các tác vụ được chạy. GitHub cung cấp hai loại runners để bạn lựa chọn: GitHub-hosted runners Self-hosted runners (thiết lập của riêng bạn).

  • GitHub-hosted runners: Đây là các runners được GitHub cung cấp sẵn, được quản lý và bảo trì bởi chính GitHub, hỗ trợ nhiều cấu hình và hệ điều hành khác nhau, giúp bạn dễ dàng bắt đầu mà không cần lo lắng về việc thiết lập hay bảo trì.
  • Self-hosted runners: Là các máy chủ hoặc agent được thiết lập và quản lý bởi người dùng nhằm phục vụ cho việc chạy các workflow CI/CD trên cơ sở hạ tầng của riêng họ, thay vì sử dụng các runner do nền tảng như GitHub Actions hay GitLab cung cấp

Với Self-hosted runners bạn sẽ nắm quyền chủ động hoàn toàn, giúp biến môi trường CI/CD trở nên hoàn hảo và phù hợp nhất với từng dự án của bạn.

2. Cài đặt Self-hosted Runners

Trước khi bắt tay vào cài đặt Self-hosted Runners, bạn cần phải có một server riêng để chạy runners.

Việc runners sử dụng hệ điều hành gì thì tuỳ thuộc vào nhu cầu và yêu cầu project của các bạn. Ví dụ, nếu bạn cần build ứng dụng iOS, bạn bắt buộc phải sử dụng macOS. Trong phần này, mình chọn sử dụng Linux làm hệ điều hành (Operating System - OS).

Hãy cùng mình đi vào các bước chi tiết để cài đặt Self-hosted Runners.

server

Tiếp theo, chúng ta sẽ cài đặt runner cho GitHub Actions.

  1. Truy cập vào GitHub Repository - nơi bạn đã lưu mã nguồn bài trước.
  2. Chọn tab Settings => Actions => Runners => New Self-hosted Runner.
  3. Chọn OS mà bạn muốn cài đặt cho runner. Ở đây, mình sẽ chọn Linux.

Ở bước này thì các bạn chỉ cần chạy theo những script đã được hiển thị trên màn hình là có thể khởi chạy rồi.

  1. Download: tạo thư mục cho runner, tải gói runner mới nhất và giải nén.
  2. Configure: cấu hình runner bằng cách chạy lệnh được cung cấp. Thông tin về URL và token để kết nối với repository sẽ được hiển thị tại bước này (lưu ý bảo mật thông tin token).
  3. Run: Khởi động runner bằng cách chạy script ./run.sh.

Lưu ý: Mình đã ẩn một số thông tin nhạy cảm trong quá trình minh họa cho các bạn xem. Bạn phải cẩn thận với các thông tin bảo mật khi thao tác.

config
Config Runners

Đến bước Config cho runner mình để tất cả các tùy chọn ở chế độ mặc định (default). Tuy nhiên, bạn có thể tùy chỉnh theo ý muốn để phù hợp với dự án của bạn.

runner-success
Runner success

Tới đây, bạn đã cài đặt thành công Self-hosted Runners. Với runner này, bạn đã có thể chạy các workflow của GitHub Actions ngay trên server của mình, giúp tối ưu hóa quy trình làm việc và tận dụng tốt các tài nguyên có sẵn.

Ngoài ra, bạn có thể thiết lập nhiều runners cùng lúc, cài đặt nhiều runners giúp bạn dễ dàng mở rộng quy mô và xử lý các workflow song song, đảm bảo quy trình CI/CD của bạn luôn hoạt động hiệu quả.

3. Sử dụng Self-hosted Runners

Bây giờ, mình sẽ sử dụng Self-hosted Runners vào trong dự án NextJS. Để làm được điều này:

Bước 1: Bạn quay lại source code của dự án và cập nhật file deploy.yml

Bước 2: Tìm đến dòng cấu hình

Yaml
runs-on: ubuntu-latest

thay đổi thành

Yaml
runs-on: self-hosted

Việc thay đổi này sẽ chỉ định rằng workflow của bạn sẽ chạy trên Self-hosted Runner thay vì sử dụng runners mặc định của GitHub.

Bước 3: Sau khi chỉnh sửa xong, hãy commit và push code lên repository. Cuối cùng, thực hiện release ứng dụng.

Nếu bạn chưa có nội dung chi tiết của file config này, bạn có thể tham khảo hoặc lấy mẫu tại đây.

error

Tại bước này, mình gặp phải lỗi do sử dụng Action SSH Remote Commands từ GitHub Marketplace. Nguyên nhân là Action này yêu cầu Docker để hoạt động và chỉ hỗ trợ các container Linux.

Để khắc phục vấn đề này, bạn cần cài đặt Docker trên Self-hosted Runners để đảm bảo Action có thể chạy mượt mà.

Bash
curl -fsSL https://get.docker.com/ | sh
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run
sudo usermod -aG docker $(whoami)
Bash
sudo reboot
runner-docker
Runner docker

Sau khi chạy các lệnh trên, đợi đến khi server lên lại, khởi động lại runner là có thể sử dụng:

Bash
cd actions-runner && ./run.sh

Giờ thì hãy retry các jobs đã fail trên GitHub Actions.

action-running
Action running
runner-running
Runner running

Như bạn có thể thấy trong hình, Self-hosted Runners đã đang chạy.

run-success
Run success

Đến đây, CICD của mình đã hoạt động. Để đảm bảo mọi thứ đã được thiết lập đúng, nên kiểm tra lại một lần nữa để chắc chắn hệ thống hoạt động như mong đợi.

Cập nhật lại file app.tsx như bên dưới.

TSX
export default function Home() {
  return (
    <main>
        <h1>Welcome to 200lab</h1>
        <h2>This page deployed by Self-hosted Runners</h2>
    </main>
  );
}

Release lại lần nữa và chờ kết quả.

4. Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua các bước cài đặt, cấu hình và sử dụng Self-hosted Runners trong dự án NextJS. Từ việc hiểu rõ vai trò của Runners đến cài đặt Docker để khắc phục lỗi, bạn đã có thể tự tin triển khai và quản lý Self-hosted Runners trên hệ thống của mình.

Các bài viết liên quan:

Bài viết liên quan

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab