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 và 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.
Tiếp theo, chúng ta sẽ cài đặt runner cho GitHub Actions.
- Truy cập vào GitHub Repository - nơi bạn đã lưu mã nguồn bài trước.
- Chọn tab Settings => Actions => Runners => New Self-hosted Runner.
- 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.
- Download: tạo thư mục cho runner, tải gói runner mới nhất và giải nén.
- 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).
- 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.
Đế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.
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
runs-on: ubuntu-latest
thay đổi thành
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.
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à.
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)
sudo reboot
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:
cd actions-runner && ./run.sh
Giờ thì hãy retry các jobs đã fail trên GitHub Actions.
Như bạn có thể thấy trong hình, Self-hosted Runners đã đang chạy.
Đế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.
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
Grafana Loki là gì? So sánh Loki và Elasticsearch
Nov 16, 2024 • 6 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
ELK là gì? So sánh hiệu suất giữa ELK và PLG
Nov 06, 2024 • 9 min read
Docker Best Practices: Tối ưu Dung lượng Docker Image
Oct 30, 2024 • 8 min read
SQL Injection là gì? Những cách phòng ngừa SQL Injection
Oct 25, 2024 • 10 min read