MS Teams 和 Jenkins 之间的电子邮件集成问题

Python and Groovy

探索电子邮件传送问题

将 Jenkins 与 Microsoft Teams 集成时,Webhooks 通常允许用户接收有关作业状态(例如启动和失败)的更新。事实证明,这种直接通知系统对于团队内部的实时沟通非常有效。目前,正在探索一项附加功能,通过电子邮件附件将测试报告直接发送到 Teams 渠道,以增强这种通信。

然而,尽管 Webhook 通知取得了成功,但尝试通过电子邮件发送这些报告时仍存在重大障碍;电子邮件不会到达 Teams 频道。虽然个人和工作电子邮件地址接收消息没有问题,但团队通道特定地址似乎无法接收来自 Jenkins 的任何电子邮件,这对在团队成员之间有效分发测试结果构成了挑战。

命令 描述
smtplib.SMTP() 初始化与用于发送电子邮件的 SMTP 服务器的连接。
server.starttls() 将 SMTP 连接升级为使用 TLS 的安全连接。
msg.attach() 将某些部分附加到电子邮件中,例如纯文本或文件。
httpRequest() 将 HTTP 请求从 Jenkins 发送到指定的 URL,此处用于将数据发送到 MS Teams Webhook。
pipeline 定义 Jenkins 管道脚本结构,指定构建过程的阶段顺序。
echo 将消息打印到 Jenkins 控制台日志,对于调试和跟踪管道执行非常有用。

了解电子邮件和通知集成的脚本函数

第一个脚本示例使用 Python 和 库来建立 SMTP 连接以发送电子邮件。该脚本主要旨在允许 Jenkins 将测试报告作为电子邮件附件直接发送到 Microsoft Teams 渠道。这 命令启动此连接,同时 使用 TLS 加密确保连接安全。电子邮件消息的组成和结构使用 MIMEMultipart 和 类,哪里 对于添加电子邮件正文和附件至关重要。

第二个脚本示例是 Jenkins 管道中使用的 Groovy 脚本。它利用 Jenkins 管道语法来定义 Jenkins 将执行的一系列操作(阶段)。值得注意的是, 命令用于通过 Webhook URL 与 Microsoft Teams 进行通信。每当作业状态发生变化时,此命令都会向 Teams 通道发送 POST 请求,这允许团队成员直接在 Teams 中接收有关作业启动、成功或失败的即时更新。指某东西的用途 阶段内有助于记录管道每个步骤的进度和结果。

增强 Jenkins 和 MS Teams 之间的电子邮件通信

使用 Jenkins API 和 SMTP 在 Python 中实现

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!")

在 Jenkins 中为 MS Teams 通知配置 Webhook

Jenkins 管道的 Groovy 脚本

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"}')
                }
            }
        }
    }
}

集成 Jenkins 和 MS Team 以增强沟通

将 Jenkins 与 Microsoft Teams 集成的一个关键方面(尚未涉及)涉及安全和权限配置。当 Jenkins 尝试向 MS Teams 渠道发送电子邮件时,电子邮件网关和 Teams 渠道设置允许此类通信至关重要。这涉及配置 Teams 通道以接受来自外部源的电子邮件,在本例中为 Jenkins 服务器。如果此设置配置不正确,则可以解释为什么即使从 Jenkins 成功发送电子邮件,也无法收到电子邮件。

此外,解决此类问题可能需要检查 Teams 服务中的垃圾邮件过滤器和电子邮件路由设置,以确保来自 Jenkins 的消息不会被自动过滤掉。还值得验证 Jenkins 使用的电子邮件地址格式是否正确并被 Teams 渠道电子邮件系统接受,因为轻微的配置错误可能会导致发送失败。

  1. 为什么 MS Teams 渠道收不到 Jenkins 电子邮件?
  2. 检查 MS Teams 通道是否配置为接受来自外部电子邮件地址的电子邮件,并确保没有垃圾邮件过滤器阻止这些邮件。
  3. 如何配置 Jenkins 发送电子邮件?
  4. 您需要在 Jenkins 配置中设置 SMTP 服务器并使用 用于身份验证。
  5. 在 Jenkins 中设置电子邮件通知时常见的错误有哪些?
  6. 常见错误包括不正确的电子邮件服务器设置、错误的收件人电子邮件格式或不正确的 Jenkins 作业配置。
  7. Jenkins 可以向多个收件人发送电子邮件通知吗?
  8. 是的,Jenkins 可以配置为通过在作业的构建后操作中指定多个收件人来将电子邮件发送给多个收件人。
  9. 如何验证 Jenkins 的电子邮件通知设置是否正确?
  10. 通过手动触发作业并检查是否正确接收电子邮件来测试配置。另外,请查看 Jenkins 服务器日志中是否有任何错误消息。

成功地将 Jenkins 与 Microsoft Teams 集成以进行电子邮件通知涉及几个详细步骤。确保两个系统正确配置以进行通信至关重要。这包括为 Jenkins 设置 SMTP 以及调整 Microsoft Teams 设置以接受来自 Jenkins 的消息。当这些配置一致时,通过电子邮件发送作业通知和测试报告的过程变得无缝,从而增强团队协作和效率。