+2

Series Jenkins #2: Đưa bác quản gia về nhà & Giải mã bí ẩn Master - Node

Chào anh em đã quay lại với series "Từ Zero đến Hero với Jenkins". Ở Bài 1, chúng ta đã hiểu tại sao phải dùng Jenkins để thoát khỏi cảnh "deploy tay" đầy rủi ro.

Hôm nay, chúng ta sẽ xắn tay áo lên để "rước" bác quản gia này về nhà. Nhưng trước khi gõ những dòng lệnh cài đặt đầu tiên, tôi muốn anh em hiểu rõ cách bộ não của Jenkins hoạt động. Đừng vội bỏ qua phần này, vì hiểu được kiến trúc của Jenkins sẽ cứu anh em khỏi những pha "bảo trì hệ thống" khóc đứng khóc ngồi sau này.

1. Giải mã kiến trúc Master - Node (Controller - Agent)

Nhiều người mới học thường cài Jenkins lên một con server, sau đó bắt nó làm mọi thứ: từ build code Node.js, compile code Golang, chạy test, cho đến deploy.

Giai đoạn đầu thì không sao, nhưng khi dự án lớn lên, team có 10 người cùng push code một lúc. Jenkins sẽ phải ôm đồm quá nhiều việc, dẫn đến server quá tải (hết RAM, CPU 100%), rớt mạng, và... bùm! Dây chuyền CI/CD đứt đoạn.

Đó là lý do Jenkins được thiết kế theo kiến trúc Master - Node (hiện nay Jenkins gọi chuẩn là Controller - Agent).

Hãy tưởng tượng như thế này cho dễ hiểu:

  • Jenkins Master (Controller): Là "Bộ não" hay "Trưởng phòng". Ông này không trực tiếp làm việc nặng. Nhiệm vụ của ông là: cung cấp giao diện web (UI) để anh em thao tác, quản lý các cấu hình, nhận lịch trình (khi nào có code mới), và giao việc cho lính.
  • Jenkins Node (Agent): Là những anh "Công nhân" mẫn cán. Master bảo build code Node.js? Anh Node A có cài sẵn Node.js sẽ nhận việc. Master bảo build Docker image? Anh Node B có cấu hình Docker sẽ đứng ra làm.

Lợi ích của kiến trúc này là gì?

  1. Phân tải (Load Balancing): Master không bao giờ bị quá tải vì việc nặng đã đẩy hết cho Node.
  2. Đa dạng môi trường: Bạn có thể có Node chạy Linux để build backend, Node chạy Windows để build app C# WPF, và Node chạy macOS để build iOS app. Rất linh hoạt!

Trong khuôn khổ series cho người mới, chúng ta sẽ bắt đầu bằng việc cài đặt Jenkins đóng vai trò làm cả Master và "tự xử" luôn (Built-in Node). Khi anh em đã cứng tay, chúng ta sẽ tách Node ra sau nhé.

2. Thực hành: Cài đặt Jenkins bằng Docker

Có rất nhiều cách để cài Jenkins (cài trực tiếp file .war, dùng apt-get trên Ubuntu...). Nhưng là những kỹ sư hiện đại, tôi khuyên anh em nên dùng Docker. Nó giúp môi trường máy tính của anh em cực kỳ "sạch sẽ", muốn xóa thì chỉ cần 1 câu lệnh là bay màu, không để lại rác.

Bước 1: Chuẩn bị file Docker Compose

Tạo một thư mục mới cho Jenkins, ví dụ jenkins-server, sau đó tạo một file có tên docker-compose.yml với nội dung sau:

version: '3.8'

services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: my_jenkins
    privileged: true
    user: root
    ports:
      - "8080:8080" # Port để truy cập giao diện web của Jenkins
      - "50000:50000" # Port để Master giao tiếp với các Node (Agent)
    volumes:
      - ./jenkins_data:/var/jenkins_home # Mount volume để lưu trữ dữ liệu
      - /var/run/docker.sock:/var/run/docker.sock # Cho phép Jenkins gọi Docker bên ngoài
    restart: always

Lưu ý nhỏ từ người từng trải: Cái dòng volumes: ./jenkins_data:/var/jenkins_home cực kỳ quan trọng. Nó giúp toàn bộ cấu hình, lịch sử build của anh em được lưu lại ở thư mục jenkins_data trên máy thật. Nếu container Jenkins có bị xóa, tạo lại nó vẫn không mất dữ liệu.

Bước 2: Khởi động Jenkins

Mở Terminal (hoặc Command Prompt/PowerShell) tại thư mục chứa file docker-compose.yml và gõ:

docker-compose up -d

Lệnh này sẽ tải image Jenkins phiên bản ổn định nhất (LTS) về và chạy ngầm.

Bước 3: Mở khóa bác quản gia (Unlock Jenkins)

Bây giờ, anh em mở trình duyệt và truy cập vào: http://localhost:8080. Jenkins sẽ yêu cầu một cái mật khẩu khởi tạo (Administrator password) để chứng minh bạn là chủ của server này.

Để lấy mật khẩu, quay lại Terminal và gõ lệnh xem log của container:

docker logs my_jenkins

Anh em cuộn lên một chút sẽ thấy một đoạn mã dài ngoằng nằm giữa 2 hàng sao (***), dạng như 4a3b7c8d9e.... Hãy copy đoạn mã đó, dán vào ô mật khẩu trên trình duyệt và nhấn Continue.

Bước 4: Cài đặt Plugin cơ bản

Màn hình tiếp theo, Jenkins sẽ hỏi bạn muốn cài plugin nào. Anh em cứ mạnh dạn chọn "Install suggested plugins" (Cài các plugin được đề xuất). Jenkins sẽ tự động tải về các công cụ cần thiết nhất như Git, Pipeline, SSH,... Quá trình này mất khoảng 2-5 phút tùy mạng nhà anh em.

Bước 5: Tạo tài khoản Admin

Sau khi cài plugin xong, Jenkins sẽ yêu cầu bạn tạo tài khoản quản trị viên đầu tiên. Điền đầy đủ thông tin: Username, Password, Full name, Email.

Nhấn Save and Continue, xác nhận lại URL mặc định (http://localhost:8080), và nhấn Finish.

Bùm! Giao diện trang chủ (Dashboard) huyền thoại của Jenkins đã hiện ra.

Tổng kết Bài 2

Hôm nay anh em đã nắm được lý thuyết cốt lõi về Master - Node (bí quyết để Jenkins vận hành trong các dự án lớn) và tự tay thiết lập thành công server Jenkins đầu tiên của mình qua Docker.

Máy móc đã sẵn sàng, quản gia đã vào vị trí. Ở Bài 3, chúng ta sẽ không nói lý thuyết suông nữa. Tôi sẽ hướng dẫn anh em tạo Job đầu tiên (Freestyle Project) để tự động hóa một tác vụ cơ bản nhất, mở đầu cho kỷ nguyên rảnh tay của chúng ta.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí