Hướng Dẫn Cấu Hình Thông Báo Email Tự Động Trong Jenkins

Cài Đặt và Điều Chỉnh Hệ Thống Báo Cáo Mail Cho Pipeline

1. Kích Hoạt Plugin Xử Lý Thư Điện Tử

Truy cập dashboard chính của Jenkins, di chuyển tới Manage JenkinsPlugins. Chuyển sang tab Available, nhập cụm từ khóa Email Extension Plugin vào thanh tìm kiếm. Chọn mục phù hợp và nhấn Install. Đợi hệ thống tải về và khởi động lại các thành phần liên quan (nếu có yêu cầu).

2. Thiết Lập Kết Nối SMTP Toàn Cục

Quay lại menu Manage JenkinsConfigure System. Kéo xuống vùng E-mail Notification và điền các tham số kết nối máy chủ:

  • SMTP Server: Địa chỉ host (ví dụ: smtp.gmail.com, smtp.mail.com.vn)
  • SMTP Port: Cổng bảo mật thường dùng (587 cho STARTTLS, 465 cho SSL)
  • User Name / Password: Tài khoản gửi và mật khẩu ứng dụng (App Password) được tạo từ nhà cung cấp dịch vụ email.

Nhấn Test Configuration để xác thực đầu ra. Lưu ý quan trọng: Ngay phía dưới là khối Extended E-mail Notification. Khu vực này quy định template mặc định, địa chỉ admin, và đường dẫn lưu trữ bản ghi. Khi khai báo tại đây, mọi job khác trong hệ thống sẽ tự kế thừa mà không cần thiết lập lặp lại.

Xác Thực Tài Khoản Dịch Vụ Mail

Các nền tảng email hiện đại yêu cầu tắt mật khẩu gốc và thay bằng mã ứng dụng riêng để đảm bảo bảo mật. Quy trình chuẩn gồm:

  1. Vào cài đặt tài khoản → tìm mục POP3/SMTP/IMAP → bật trạng thái hoạt động.
  2. Tạo App Password hoặc mã xác thực đặc biệt. Sao chép chính xác chuỗi ký tự này để dán vào trường Password tại Jenkins.

3. Liên Kết Thông Báo Với Từng Dự Án

Mở trang cấu hình của một Job mong muốn. Tại section Post-build Actions, chọn Add post-build action rồi pick Editable Email Notification.

Giao diện cho phép bạn ghi đè hoặc giữ nguyên cài đặt toàn cục. Các trường chính bao gồm:

  • Recipients: Danh sách người nhận phân tách bằng dấu phẩy.
  • Subject: Dòng tiêu đề xuất hiện trong hộp thư đến.
  • Content Type: Chọn Plain Text hoặc HTML.
  • Body: Vùng chứa mã template và tokens nhúng dữ liệu runtime.

4. Tùy Biến Template HTML và Quản Lý Tokens

Hệ thống biến tự động (Jenkins Tokens) giúp lấy dữ liệu động từ quá trình build. Bảng tổng hợp cú pháp cơ bản:

  • ${BUILD_STATUS}: Trạng thái (SUCCESS, FAILURE, ABORTED, UNSTABLE)
  • ${PROJECT_NAME} / $JOB_NAME: Tên dự án
  • $BUILD_NUMBER: Chuỗi số tự tăng mỗi lần trigger
  • $JOB_DESCRIPTION: Phần mô tả trong cấu hình Job
  • ${CAUSE}: Nguồn kích hoạt (User, Poll SCM, Cron, v.v.)
  • ${BUILD_URL}console: URL truy cập raw log

Mẫu 1: Giao Diện Trực Quan Theo Dõi Trạng Thái

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <style>
        body { font-family: system-ui, sans-serif; line-height: 1.5; color: #2c3e50; }
        .report-box { background: #fff; border: 1px solid #e1e4e8; border-radius: 6px; padding: 16px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
        .status-badge { display: inline-block; padding: 4px 8px; border-radius: 12px; font-size: 12px; font-weight: 600; color: #fff; }
        .pass { background-color: #28a745; }
        .fail { background-color: #dc3545; }
        .link-block { margin-top: 8px; }
        a { color: #005fcc; text-decoration: none; }
        a:hover { text-decoration: underline; }
    </style>
</head>
<body>
    <div class="report-box">
        <h2 style="margin-bottom: 10px;">Báo Cáo Xây Dựng: ${PROJECT_NAME}</h2>
        <p><b>Số lượt chạy:</b> #$BUILD_NUMBER</p>
        <p><b>Kết quả:</b> ${BUILD_STATUS == 'SUCCESS' ? '<span class="status-badge pass">HÒAN THÀNH</span>' : '<span class="status-badge fail">THẤT BẠI</span>'}</p>
        <p><b>Lý Do Trigger:</b> ${CAUSE}</p>
        <div class="link-block">
            <a href="${BUILD_URL}console">→ Xem Console Log</a> | 
            <a href="$PROJECT_URL">→ Mở Trang Dự Án</a>
        </div>
    </div>
    <hr style="border-top: 1px dashed #ccc;" />
    <p style="color: #6c757d; font-size: 11px;">Thư này do hệ thống CI tự động phát sinh, vui lòng không phản hồi trực tiếp.</p>
</body>
</html>

Mẫu 2: Bảng Tham Số Kết Hợp Bản Ghi Thay Đổi Và Đoạn Log

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Automation Report - $JOB_NAME</title>
    <style>
        table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; }
        th, td { padding: 10px 12px; border-bottom: 1px solid #dee2e6; text-align: left; }
        th { background-color: #f8f9fa; color: #495057; font-weight: 500; }
        .log-pre { background: #1e1e1e; color: #d4d4d4; padding: 10px; border-radius: 4px; overflow-x: auto; font-family: monospace; font-size: 12px; }
    </style>
</head>
<body>
    <h3>Chi Tiết Run ID: $JOB_NAME (&#35;$BUILD_NUMBER)</h3>
    <table>
        <tr><th>Thuộc Tính</th><th>Giá Trị</th></tr>
        <tr><td>State</td><td>${BUILD_STATUS}</td></tr>
        <tr><td>Cause</td><td>${CAUSE}</td></tr>
        <tr><td>Console</td><td><a href="${BUILD_URL}console">Link Truy Cập</a></td></tr>
        <tr><td>Workspace</td><td><a href="${PROJECT_URL}">Project Root</a></td></tr>
    </table>

    <h4>Danh Sách Commit Mới (So Với Lần Thành Công Cuối Cùng)</h4>
    <div style="border: 1px solid #ced4da; padding: 8px; background: #fdfdfd;">
        ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="<div style="margin-bottom:6px;"><b>%c</b><br>%m</div>", showPaths=true}
    </div>

    <h4>Snippet Log (Giới Hạn 50 Dòng)</h4>
    <pre class="log-pre">${BUILD_LOG, maxLines=50}</pre>
</body>
</html>

Thẻ: Jenkins email-extension-plugin ci-cd-pipeline smtp-configuration devops-automation

Đăng vào ngày 4 tháng 9 lúc 09:39