如何让Jenkins读取Confluence页面中的表格内容并打印?
实现Jenkins读取Confluence表格并打印的方案参考
核心思路
基于你的Jenkins基础,通过Jenkins插件+Confluence API组合实现,核心是获取Confluence页面的HTML内容后解析表格。
具体实现方案
1. 使用Jenkins Confluence API插件(快速落地)
- 先在Jenkins插件市场安装
Confluence API Plugin - 全局配置Confluence站点:进入Jenkins「系统管理」→「全局配置」,添加你的Confluence站点信息,填入Base URL、账号+API Token(推荐用API Token替代密码,更安全)
- Pipeline脚本示例:
pipeline { agent any stages { stage('读取并打印Confluence表格') { steps { script { // 调用插件获取页面内容 def confluenceSite = Jenkins.instance.getDescriptorByType(com.atlassian.jenkins.plugins.confluence.ConfluenceSite.DescriptorImpl).getSiteByName("你的Confluence站点名称") def pageHtml = confluenceSite.getPageContent("页面空间Key", "页面标题") // 用Jsoup解析HTML表格(需确保Jenkins环境已引入Jsoup依赖) def parser = org.jsoup.Jsoup.parse(pageHtml) def tables = parser.select("table") // 遍历打印所有表格 tables.eachWithIndex { table, idx -> println "=== 第${idx+1}个表格 ===" table.select("tr").each { row -> def cells = row.select("td, th").collect { it.text() }.join("\t") println cells } } } } } } }
- 补充:若Jenkins未内置Jsoup,可在Pipeline开头添加依赖引入:
@Grab('org.jsoup:jsoup:1.17.2')
2. 直接调用Confluence REST API(自定义灵活性高)
无需插件,用Groovy原生工具或curl请求API:
pipeline { agent any stages { stage('调用API读取表格') { steps { script { // 配置参数 def confluenceDomain = "你的Confluence域名" def pageId = "目标页面ID" // 从页面URL的pageId参数获取 def authToken = "账号:API_TOKEN".bytes.encodeBase64().toString() // 请求API获取页面内容 def apiUrl = "https://${confluenceDomain}/rest/api/content/${pageId}?expand=body.storage" def response = sh(script: "curl -s -H 'Authorization: Basic ${authToken}' ${apiUrl}", returnStdout: true) def jsonData = new groovy.json.JsonSlurper().parseText(response) def pageHtml = jsonData.body.storage.value // 解析并打印表格 def parser = org.jsoup.Jsoup.parse(pageHtml) parser.select("table").each { table -> table.select("tr").each { row -> println row.select("td, th").text().replaceAll("\\s+", "\t") } } } } } } }
关键知识点参考
- Jenkins Pipeline:掌握
script块Groovy代码编写、插件配置逻辑 - Confluence REST API:重点熟悉
/rest/api/content/{pageId}接口的参数与返回结构 - HTML解析:Jsoup基本选择器用法(如
select("table")、select("tr"))
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

