You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jenkins每日发送Confluence报告与JIRA仪表板邮件

用Jenkins实现JIRA/Confluence数据抓取与每日状态报告自动发送

完全可以用Jenkins搞定这个需求,靠它的插件生态和脚本能力,不用做复杂定制开发。下面是具体的落地步骤:

1. 安装必备插件

Jenkins本身不自带JIRA/Confluence集成能力,先装这些核心插件:

  • JIRA相关:JIRA Steps或JIRA Plugin,用来调用JIRA API抓取仪表板数据(比如当前迭代的任务进度、待办项、阻塞项)
  • Confluence相关:Confluence Publisher或者直接用HTTP请求插件调用Confluence REST API,提取页面关键更新(比如文档变更、会议纪要要点)
  • 定时触发:用Jenkins自带的定时任务(配合Build Timestamper插件更方便),设置每日固定执行时间
  • 邮件发送:Email Extension Plugin,支持自定义收件人列表和邮件模板
  • 流程串联:Pipeline Plugin(必备),用Groovy脚本把抓取、生成报告、发邮件全流程串起来

2. 配置JIRA/Confluence连接权限

在Jenkins系统设置里,添加JIRA和Confluence的服务器配置:

  • 填入平台地址,使用平台生成的API令牌(不要用账号密码,安全性更高)
  • 测试连接,确保Jenkins能正常访问两个平台

3. 编写Pipeline脚本串联流程

下面是简化版的Groovy Pipeline脚本,整合了数据抓取、报告生成、邮件发送全流程:

pipeline {
    agent any
    // 工作日早9点自动执行,可根据需求修改Cron表达式
    triggers {
        cron('0 9 * * 1-5')
    }
    stages {
        stage('抓取JIRA数据') {
            steps {
                script {
                    // 用JQL查询最近一天状态变化的迭代任务,可自定义JQL适配需求
                    def jiraIssues = jiraSearch(jql: 'project = "PROJ" AND sprint in openSprints() AND status changed during("-1d")')
                    // 统计各类任务数量
                    def completedCount = jiraIssues.count { it.status.name == 'Done' }
                    def todoCount = jiraIssues.count { it.status.name == 'To Do' }
                    def blockedCount = jiraIssues.count { it.status.name == 'Blocked' }
                    env.JIRA_SUMMARY = "JIRA进度:已完成${completedCount}项,待办${todoCount}项,阻塞${blockedCount}项"
                }
            }
        }
        stage('抓取Confluence数据') {
            steps {
                script {
                    // 根据页面ID抓取Confluence页面内容,提取最近更新段落(可自定义匹配规则)
                    def confluencePage = confluenceGetPage(pageId: '123456')
                    def recentUpdates = confluencePage.body.storage.value =~ /<p>最近更新:(.+?)<\/p>/
                    env.CONFLUENCE_SUMMARY = recentUpdates ? "Confluence更新:${recentUpdates[0][1]}" : "无最新更新"
                }
            }
        }
        stage('生成每日状态报告') {
            steps {
                script {
                    // 生成Markdown格式的报告内容
                    def reportContent = """
# 每日项目状态报告(${new Date().format('yyyy-MM-dd')})

## JIRA进度
${env.JIRA_SUMMARY}

## Confluence更新
${env.CONFLUENCE_SUMMARY}

## 备注
如有问题请联系项目负责人
                    """.trim()
                    // 将报告写入本地文件
                    writeFile(file: 'daily-report.md', text: reportContent)
                }
            }
        }
        stage('发送邮件给指定收件人') {
            steps {
                emailext(
                    to: 'team@example.com, manager@example.com',
                    subject: "【每日状态】项目进度报告 ${new Date().format('yyyy-MM-dd')}",
                    body: readFile('daily-report.md'),
                    mimeType: 'text/html' // 支持Markdown转HTML格式显示
                )
            }
        }
    }
}

实际使用时,可根据需求调整JQL查询语句、Confluence数据提取规则,比如抓取更详细的任务列表、文档链接等。

4. 调整定时触发规则

脚本中的cron('0 9 * * 1-5')表示工作日早9点执行,若需其他时间,修改Cron表达式即可,比如0 18 * * *代表每天下午6点执行。

5. 优化邮件格式

如果需要更美观的邮件样式,可使用Email Extension Plugin的自定义HTML模板,将Markdown内容转换为HTML,或直接编写HTML模板嵌入动态数据。

注意事项

  • 权限配置:确保Jenkins使用的账号在JIRA和Confluence中拥有对应内容的查看权限
  • 错误处理:可在脚本中添加try-catch块,抓取数据失败时发送告警邮件,避免任务中断
  • API调用优化:若数据量较大,可考虑缓存查询结果,减少JIRA/Confluence API调用频率

内容的提问来源于stack exchange,提问作者Rag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:10:30