Woodpecker CI: Khi Jenkins quá “ngốn” tài nguyên so với nhu cầu
Nếu bạn đang vận hành một con VPS cấu hình khiêm tốn (ví dụ 2 vCPU và 2GB RAM), việc cài đặt Jenkins chẳng khác nào một cơn ác mộng. Jenkins chạy trên Java thường chiếm dụng ít nhất 1GB RAM ngay khi vừa khởi động. Với các dự án nhỏ, chỉ cần build Docker image hoặc deploy web tĩnh, Woodpecker CI là lựa chọn thay thế thông minh hơn nhiều. Mình đã chạy Fedora Server cho các dự án cá nhân hơn 2 năm và nhận thấy Woodpecker CI chính là mảnh ghép còn thiếu để tối ưu quy trình DevOps.
Woodpecker kế thừa những gì tốt nhất từ Drone CI thời còn mã nguồn mở hoàn toàn. Viết bằng ngôn ngữ Go, hệ thống này hoạt động cực kỳ mượt mà dưới dạng container và có khả năng “bắt cặp” rất nhanh với Gitea.
So sánh thực tế: Tại sao nên chọn Woodpecker?
Trước khi bắt tay vào cấu hình, hãy nhìn vào con số thực tế để thấy sự khác biệt giữa các công cụ phổ biến:
- Jenkins: Đầy đủ tính năng nhưng nặng nề. Yêu cầu tối thiểu 2GB RAM để chạy ổn định. Cấu hình Groovy Pipeline khá phức tạp với người mới.
- GitLab CI: Tuyệt vời nhưng đi kèm với bộ source GitLab khổng lồ. Nếu tự host, bạn cần ít nhất 4GB-8GB RAM cho cả hệ thống.
- GitHub Actions: Tiện lợi nhưng phụ thuộc hoàn toàn vào cloud. Bạn sẽ gặp khó khăn nếu muốn triển khai on-premise để bảo mật code nội bộ.
- Woodpecker CI: Sử dụng YAML (tương tự GitHub Actions). Woodpecker Server chỉ tiêu tốn khoảng 100MB – 200MB RAM. Đây là con số cực kỳ lý tưởng cho server cấu hình thấp.
Ưu và nhược điểm cần lưu ý
Điểm cộng:
- Khởi động gần như tức thì.
- Mã nguồn mở hoàn toàn (Apache 2.0), không lo bị giới hạn tính năng trả phí.
- Cấu hình Pipeline qua file
.woodpecker.ymlrất trực quan. - Hỗ trợ tốt cho Gitea, Forgejo, GitHub và GitLab.
Hạn chế:
- Số lượng plugin ít hơn Jenkins. Tuy nhiên, nó vẫn đáp ứng tốt 95% nhu cầu build/deploy thông thường.
- Cộng đồng hỗ trợ tại Việt Nam chưa đông đảo.
Sức mạnh khi kết hợp Fedora Server và Woodpecker
Fedora Server luôn đi đầu với Kernel mới và tích hợp sẵn Podman. Thay vì dùng Docker, Podman trên Fedora mang lại cơ chế bảo mật tốt hơn thông qua SELinux. Khi triển khai Woodpecker trên nền tảng này, bạn sẽ tận dụng được sự ổn định của các bản build container mới nhất mà không cần tốn công tinh chỉnh quá nhiều.
Bước 1: Thiết lập OAuth Application trên Gitea
Để Woodpecker có thể truy cập vào repository, bạn cần tạo một cầu nối bảo mật trên Gitea:
- Truy cập Gitea, vào Settings -> Applications.
- Tại mục Manage OAuth2 Applications, đặt tên ứng dụng là
Woodpecker CI. - Redirect URI: Nhập địa chỉ server của bạn theo định dạng:
https://ci.yourdomain.com/authorize. - Sau khi nhấn Create Application, hãy copy Client ID và Client Secret vào một file note. Chúng ta sẽ cần chúng ở bước cấu hình server.
Bước 2: Chuẩn bị môi trường Podman trên Fedora
Fedora Server đã có sẵn Podman, nhưng chúng ta cần thêm podman-compose và kích hoạt socket để Agent có thể giao tiếp với hệ thống.
sudo dnf update -y
sudo dnf install podman podman-compose -y
# Kích hoạt socket để Woodpecker Agent có quyền tạo container build
sudo systemctl enable --now podman.socket
Kiểm tra trạng thái socket bằng lệnh: ls -al /run/podman/podman.sock. Nếu thấy file socket xuất hiện là bạn đã thành công.
Bước 3: Triển khai Woodpecker bằng Podman Compose
Chúng ta sẽ gom cả Server và Agent vào một file duy nhất để dễ quản lý. Hãy tạo thư mục làm việc:
mkdir ~/woodpecker && cd ~/woodpecker
nano docker-compose.yml
Dán nội dung cấu hình sau vào file. Lưu ý thay đổi các biến môi trường cho đúng với thông tin OAuth bạn vừa khởi tạo:
version: '3'
services:
woodpecker-server:
image: woodpeckerci/woodpecker-server:latest
volumes:
- ./woodpecker-data:/var/lib/woodpecker/
environment:
- WOODPECKER_GITEA=true
- WOODPECKER_GITEA_URL=https://git.yourdomain.com
- WOODPECKER_GITEA_CLIENT=YOUR_CLIENT_ID
- WOODPECKER_GITEA_SECRET=YOUR_CLIENT_SECRET
- WOODPECKER_SERVER_ADDR=:8000
- WOODPECKER_AGENT_SECRET=chuoi_random_bao_mat_cua_ban
ports:
- 8000:8000
restart: always
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:latest
command: agent
volumes:
- /run/podman/podman.sock:/var/run/docker.sock
environment:
- WOODPECKER_SERVER=woodpecker-server:9000
- WOODPECKER_AGENT_SECRET=chuoi_random_bao_mat_cua_ban
- WOODPECKER_BACKEND=docker
restart: always
depends_on:
- woodpecker-server
Mẹo nhỏ về SELinux: Fedora rất nghiêm ngặt về quyền truy cập socket. Nếu gặp lỗi Permission Denied, hãy chạy lệnh sau để cho phép container quản lý cgroup:
sudo setsebool -P container_manage_cgroup on
Kích hoạt hệ thống bằng lệnh: podman-compose up -d.
Bước 4: Kích hoạt Pipeline cho dự án
Mở trình duyệt và truy cập vào cổng 8000 của server. Đăng nhập thông qua tài khoản Gitea của bạn. Tại giao diện điều khiển, bạn sẽ thấy toàn bộ repository hiện có.
Chỉ cần nhấn Enable tại repo mong muốn. Woodpecker sẽ tự động thiết lập Webhook phía Gitea. Từ giây phút này, mỗi khi bạn push code, một quy trình build sẽ tự động bắt đầu.
Bước 5: Tạo file định nghĩa Pipeline mẫu
Hãy tạo file .woodpecker.yml tại thư mục gốc của project Node.js để kiểm tra tính năng:
pipeline:
test:
image: node:18-alpine
commands:
- npm install
- npm test
build-image:
image: plugins/docker
settings:
repo: registry.yourdomain.com/my-app
registry: registry.yourdomain.com
username:
from_secret: docker_user
password:
from_secret: docker_pass
when:
event: push
branch: main
Khi đẩy file này lên nhánh main, Woodpecker Agent sẽ tự động kéo image Node.js về để chạy test. Nếu mọi thứ ổn định, nó sẽ tiếp tục build và đẩy image lên registry của bạn.
Kinh nghiệm vận hành thực tế
Sau một thời gian sử dụng Woodpecker trên Fedora, mình đúc kết được 3 lưu ý quan trọng:
- Giải phóng ổ cứng: Các container build thường để lại image thừa. Bạn nên đặt cronjob chạy
podman image prune -fhàng tuần để tránh đầy bộ nhớ. - Bảo mật Secret: Tuyệt đối không ghi mật khẩu trực tiếp vào file YAML. Hãy sử dụng tính năng Secrets trong phần cài đặt Repo trên giao diện Web của Woodpecker.
- Tăng tốc build bằng Cache: Với các dự án lớn, hãy sử dụng plugin cache để lưu lại thư mục
node_moduleshoặcvendor. Việc này có thể giảm thời gian build từ 5 phút xuống còn chưa đầy 1 phút.
Sự kết hợp giữa Woodpecker CI và Fedora Server mang lại một môi trường DevOps cực kỳ chuyên nghiệp với chi phí vận hành gần như bằng không. Chúc các bạn cài đặt thành công!

