Sự cố tích hợp email giữa MS Teams và Jenkins

Sự cố tích hợp email giữa MS Teams và Jenkins
Python and Groovy

Khám phá các vấn đề gửi email

Khi tích hợp Jenkins với Microsoft Teams, webhook thường cho phép người dùng nhận thông tin cập nhật về trạng thái công việc, chẳng hạn như số lần bắt đầu và lỗi. Hệ thống thông báo trực tiếp này tỏ ra hiệu quả trong việc liên lạc theo thời gian thực trong nhóm. Hiện tại, một chức năng bổ sung đang được khám phá để tăng cường khả năng liên lạc này bằng cách gửi báo cáo thử nghiệm trực tiếp đến kênh Teams qua tệp đính kèm email.

Tuy nhiên, mặc dù thông báo webhook thành công nhưng vẫn có một trở ngại đáng kể khi cố gắng gửi những báo cáo này qua email; các email không đến được kênh Nhóm. Mặc dù địa chỉ email cá nhân và công việc nhận được tin nhắn mà không gặp vấn đề gì, nhưng có vẻ như địa chỉ cụ thể của kênh Nhóm không nhận được bất kỳ email nào từ Jenkins, đặt ra thách thức trong việc phân phối kết quả kiểm tra một cách hiệu quả giữa các thành viên trong nhóm.

Yêu cầu Sự miêu tả
smtplib.SMTP() Khởi tạo kết nối tới máy chủ SMTP được sử dụng để gửi email.
server.starttls() Nâng cấp kết nối SMTP lên kết nối an toàn bằng TLS.
msg.attach() Đính kèm các phần vào email, chẳng hạn như văn bản thuần túy hoặc tệp.
httpRequest() Gửi yêu cầu HTTP từ Jenkins đến một URL được chỉ định, được sử dụng ở đây để gửi dữ liệu tới webhook của MS Teams.
pipeline Xác định cấu trúc tập lệnh quy trình Jenkins, chỉ định trình tự các giai đoạn cho quá trình xây dựng.
echo In thông báo tới nhật ký bảng điều khiển Jenkins, hữu ích cho việc gỡ lỗi và theo dõi quá trình thực hiện quy trình.

Hiểu các chức năng tập lệnh để tích hợp email và thông báo

Ví dụ tập lệnh đầu tiên sử dụng Python với smtplib thư viện để thiết lập kết nối SMTP để gửi email. Tập lệnh này được thiết kế chủ yếu để cho phép Jenkins gửi báo cáo thử nghiệm dưới dạng tệp đính kèm email trực tiếp tới kênh Microsoft Teams. Các smtplib.SMTP() lệnh bắt đầu kết nối này, trong khi server.starttls() đảm bảo kết nối được an toàn bằng mã hóa TLS. Thông điệp email được soạn thảo và cấu trúc bằng cách sử dụng MIMEMultipartMIMEText lớp học ở đâu msg.attach() là rất quan trọng để thêm cả nội dung email và tệp đính kèm.

Ví dụ tập lệnh thứ hai là tập lệnh Groovy được sử dụng trong quy trình của Jenkins. Nó tận dụng cú pháp đường ống của Jenkins để xác định một chuỗi các hoạt động (giai đoạn) mà Jenkins sẽ thực hiện. Đáng chú ý là, httpRequest lệnh được sử dụng để liên lạc với Microsoft Teams thông qua URL webhook. Lệnh này sẽ gửi yêu cầu POST tới kênh Nhóm bất cứ khi nào trạng thái công việc thay đổi, cho phép các thành viên trong nhóm nhận được cập nhật ngay lập tức về việc bắt đầu công việc, thành công hoặc thất bại trực tiếp trong Nhóm. Việc sử dụng echo trong các giai đoạn giúp ghi lại tiến trình và kết quả ở mỗi bước của quy trình.

Tăng cường liên lạc qua email giữa Jenkins và nhóm MS

Triển khai bằng Python với API Jenkins và SMTP

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from jenkinsapi.jenkins import Jenkins
def send_email(report, recipient):
    mail_server = "smtp.example.com"
    mail_server_port = 587
    sender_email = "jenkins@example.com"
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = recipient
    msg['Subject'] = "Jenkins Test Report"
    body = "Please find attached the latest test report."
    msg.attach(MIMEText(body, 'plain'))
    attachment = MIMEText(report)
    attachment.add_header('Content-Disposition', 'attachment; filename="test_report.txt"')
    msg.attach(attachment)
    with smtplib.SMTP(mail_server, mail_server_port) as server:
        server.starttls()
        server.login(sender_email, "your_password")
        server.send_message(msg)
        print("Email sent!")

Định cấu hình Webhooks trong Jenkins cho Thông báo của Nhóm MS

Tập lệnh Groovy cho Đường ống Jenkins

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
        stage('Test') {
            steps {
                script {
                    def response = httpRequest(url: 'https://outlook.office.com/webhook/your_webhook_url_here',
                                               method: 'POST',
                                               contentType: 'APPLICATION_JSON',
                                               requestBody: '{"text": "Build started"}')
                    if (response.status != 200) {
                        echo "Failed to send Teams notification"
                    }
                }
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
        post {
            success {
                script {
                    httpRequest(url: 'https://outlook.office.com/webhook/your_webhook_url_here',
                                method: 'POST',
                                contentType: 'APPLICATION_JSON',
                                requestBody: '{"text": "Build successful"}')
                }
            }
            failure {
                script {
                    httpRequest(url: 'https://outlook.office.com/webhook/your_webhook_url_here',
                                method: 'POST',
                                contentType: 'APPLICATION_JSON',
                                requestBody: '{"text": "Build failed"}')
                }
            }
        }
    }
}

Tích hợp nhóm Jenkins và MS để nâng cao khả năng giao tiếp

Một khía cạnh quan trọng của việc tích hợp Jenkins với Microsoft Teams chưa được đề cập đến liên quan đến cấu hình quyền và bảo mật. Khi Jenkins cố gắng gửi email đến kênh MS Teams, điều cần thiết là cổng email và cài đặt kênh Teams phải cho phép những liên lạc như vậy. Điều này liên quan đến việc định cấu hình kênh Nhóm để chấp nhận email từ các nguồn bên ngoài, trong trường hợp này là máy chủ Jenkins. Nếu cài đặt này không được định cấu hình chính xác, điều này có thể giải thích tại sao không nhận được email ngay cả khi chúng được gửi thành công từ Jenkins.

Ngoài ra, việc khắc phục sự cố như vậy có thể liên quan đến việc kiểm tra bộ lọc thư rác và cài đặt định tuyến email trong dịch vụ Nhóm để đảm bảo rằng thư từ Jenkins không bị lọc tự động. Cũng cần xác minh rằng địa chỉ email mà Jenkins sử dụng có được định dạng chính xác và chấp nhận bởi hệ thống email kênh của Nhóm hay không, vì những cấu hình sai nhỏ có thể dẫn đến lỗi gửi.

Câu hỏi thường gặp cần thiết về tích hợp email của Jenkins và MS Teams

  1. Tại sao kênh MS Teams không nhận được email của Jenkins?
  2. Kiểm tra xem kênh MS Teams có được định cấu hình để chấp nhận email từ các địa chỉ email bên ngoài hay không và đảm bảo không có bộ lọc thư rác nào chặn những thư này.
  3. Làm cách nào để định cấu hình Jenkins để gửi email?
  4. Bạn cần thiết lập máy chủ SMTP trong cấu hình Jenkins và sử dụng số 8 để xác thực.
  5. Những lỗi phổ biến khi thiết lập thông báo email trong Jenkins là gì?
  6. Các lỗi phổ biến bao gồm cài đặt máy chủ email không chính xác, định dạng email người nhận sai hoặc cấu hình công việc Jenkins không đúng.
  7. Jenkins có thể gửi thông báo qua email cho nhiều người nhận không?
  8. Có, Jenkins có thể được định cấu hình để gửi email đến nhiều người nhận bằng cách chỉ định chúng trong các hành động sau xây dựng của công việc.
  9. Làm cách nào để xác minh rằng thông báo email của Jenkins được thiết lập chính xác?
  10. Kiểm tra cấu hình bằng cách kích hoạt công việc theo cách thủ công và kiểm tra xem email có được nhận chính xác hay không. Ngoài ra, hãy xem lại nhật ký máy chủ Jenkins để tìm bất kỳ thông báo lỗi nào.

Kết thúc hướng dẫn tích hợp của chúng tôi

Việc tích hợp thành công Jenkins với Microsoft Teams để nhận thông báo qua email bao gồm một số bước chi tiết. Đảm bảo rằng cả hai hệ thống được cấu hình chính xác để liên lạc là rất quan trọng. Điều này bao gồm thiết lập SMTP cho Jenkins và điều chỉnh cài đặt Microsoft Teams để chấp nhận tin nhắn từ Jenkins. Khi các cấu hình này được căn chỉnh, quá trình gửi thông báo công việc và báo cáo thử nghiệm qua email sẽ trở nên liền mạch, nâng cao hiệu quả và cộng tác của nhóm.