0

Series Jenkins Docker Hub #4: Cảnh giới tối cao – Tự động hóa Jenkins với JCasC & Plugin Manager

1. Nỗi đau của việc cài Plugin thủ công và Giải pháp

Trong môi trường container, nguyên tắc số một là: Tính bất biến (Immutable). Nghĩa là cái hộp Docker Image khi build ra phải có sẵn mọi thứ để chạy được ngay lập tức, không cần con người vào cấu hình thêm.

Để giải quyết việc cài plugin thủ công, Image jenkins/jenkins bản chính thức có cung cấp sẵn một công cụ cực hay mang tên jenkins-plugin-cli.

Cách làm: Đầu tiên, anh em tạo một file text có tên là plugins.txt nằm cùng thư mục với Dockerfile ở Bài 2. Ghi danh sách các plugin anh em cần vào đây:

# File: plugins.txt
git:latest
workflow-aggregator:latest
docker-workflow:latest
ssh-agent:latest
configuration-as-code:latest

Tiếp theo, anh em mở cái Dockerfile "đột biến" của chúng ta ở Bài 2 ra, và nạp thêm 2 dòng này vào trước dòng USER jenkins cuối cùng:

# ... (Các bước cài Docker CLI ở bài trước giữ nguyên) ...

# 1. Copy file danh sách plugin vào container
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt

# 2. Chạy lệnh tự động tải và cài đặt plugin
RUN jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt

# 3. Trả lại quyền cho user jenkins
USER jenkins

Bây giờ, mỗi lần anh em gõ docker build, Jenkins sẽ tự động kết nối Internet, kéo toàn bộ đống plugin này về và nhúng sẵn vào trong Image. Khởi động container lên là có đồ chơi xài ngay!

2. JCasC (Jenkins Configuration as Code) là gì?

Cài xong plugin thì tới phần cấu hình. Làm sao để Jenkins tự biết thông tin kết nối, tự set up phân quyền mà không cần ta phải qua bước "Unlock Jenkins" phiền phức trên giao diện web?

Đó là lúc chúng ta dùng đến plugin Configuration as Code (JCasC).

Thay vì click chuột, anh em sẽ định nghĩa toàn bộ cấu hình của Jenkins vào một file định dạng YAML. Khi Jenkins khởi động, nó sẽ đọc file YAML này và tự động set up mọi thứ.

Thực hành tạo file jenkins.yaml: Tạo một file jenkins.yaml với nội dung cơ bản sau:

# File: jenkins.yaml
jenkins:
  systemMessage: "Chào mừng đến với Trung tâm CI/CD tự động của hệ thống AFC!"
  numExecutors: 2
  mode: NORMAL
  scmCheckoutRetryCount: 2

# Cấu hình đường dẫn URL gốc của Jenkins
unclassified:
  location:
    url: "http://my-jenkins-server:8080/"

# Tự động tạo sẵn Credentials (Két sắt)
credentials:
  system:
    domainCredentials:
      - credentials:
          - usernamePassword:
              scope: GLOBAL
              id: "docker-hub-creds"
              username: "my-docker-user"
              password: "my-super-secret-password"
              description: "Tài khoản Docker Hub để push Image"

3. Ghép nối các mảnh ghép vào Docker Compose

Để hệ thống chạy mượt mà và dễ quản lý, thay vì gõ lệnh docker run dài loằng ngoằng, chúng ta sẽ đưa tất cả vào file docker-compose.yml.

Để Jenkins biết file jenkins.yaml nằm ở đâu, ta cần truyền cho nó một biến môi trường tên là CASC_JENKINS_CONFIG.

Anh em viết file docker-compose.yml như sau:

# File: docker-compose.yml
version: '3.8'

services:
  jenkins:
    build: . # Build Image từ Dockerfile hiện tại thay vì kéo từ Hub
    container_name: jenkins-master
    privileged: true
    user: root
    ports:
      - "8080:8080"
      - "50000:50000"
    environment:
      # Báo cho Jenkins biết chỗ đọc file cấu hình JCasC
      - CASC_JENKINS_CONFIG=/var/jenkins_home/jenkins.yaml 
      # Bỏ qua màn hình Setup Wizard (Unlock Jenkins) lúc mới cài
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false
    volumes:
      - ./jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      # Map file cấu hình từ máy thật vào trong container
      - ./jenkins.yaml:/var/jenkins_home/jenkins.yaml 
    restart: always

4. Tận hưởng thành quả của sự Tự động hóa hoàn toàn

Bây giờ, hệ thống của anh em đã đạt đến cảnh giới tối cao của tính bất biến. Hãy gõ lệnh:

docker-compose up -d --build

Chỉ cần đi pha một ly cà phê, Docker sẽ tự động:

  1. Build một bản Jenkins tùy chỉnh.
  2. Cài sẵn Docker CLI (DooD).
  3. Tải và cài sẵn toàn bộ Plugins cần thiết.
  4. Bỏ qua màn hình thiết lập phiền phức ban đầu.

Đọc file YAML để hiện lời chào mừng và nạp sẵn mật khẩu Docker Hub vào két sắt.

Vào localhost:8080, anh em sẽ thấy mọi thứ đã sẵn sàng để chiến đấu ngay lập tức! Dù server có cháy, anh em chỉ cần bê thư mục chứa 4 file (Dockerfile, plugins.txt, jenkins.yaml, docker-compose.yml) sang server mới, gõ 1 lệnh là toàn bộ đế chế CI/CD của hệ thống AFC sống lại y như cũ.

Chúng ta đã đi qua 4 bài học cực kỳ chuyên sâu về việc "thuần hóa" bản phân phối Jenkins từ Docker Hub. Hệ thống giờ đã ổn định, tự động cấu hình và có sức mạnh biên dịch mạnh mẽ.


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í