如何导出Jenkins Pipeline控制台输出至.txt或.xlsx文件?
解决方案:将Jenkins Pipeline控制台输出导出为.txt或.xlsx
当然可行,以下是针对两种文件类型的具体实现方案:
导出为.txt文件
方法1:直接捕获SQL脚本输出
在运行SQL脚本时,将标准输出和错误输出重定向到本地文件,再通过Jenkins归档功能保存:
pipeline { agent any stages { stage('执行SQL脚本') { steps { sh ''' # 示例:以PostgreSQL为例,运行脚本并输出到文件 psql -U 用户名 -d 数据库名 -f 你的脚本.sql > console_output.txt 2>&1 ''' } } } post { always { // 归档文件,构建完成后可在页面下载 archiveArtifacts artifacts: 'console_output.txt', fingerprint: true } } }
方法2:捕获整个Pipeline控制台日志
如果需要完整的流水线日志,可通过Jenkins API获取当前构建的纯文本日志并保存:
pipeline { agent any stages { stage('执行SQL脚本') { steps { // 你的SQL执行步骤 } } stage('导出完整控制台日志') { steps { script { def buildUrl = env.BUILD_URL def logFile = 'full_console_log.txt' sh "curl -s '${buildUrl}consoleText' > ${logFile}" } } } } post { always { archiveArtifacts artifacts: 'full_console_log.txt', fingerprint: true } } }
注意:需确保Jenkins节点能访问自身API,且当前构建用户有足够权限。
导出为.xlsx文件
需要先将控制台输出(或SQL结果)转换为结构化数据,再生成Excel文件,以下是两种常用方式:
方法1:Python脚本转换
利用pandas库将结构化文本(如TSV/CSV)转为Excel,需先在Jenkins节点安装依赖:
pip install pandas openpyxl
Pipeline代码示例:
pipeline { agent any stages { stage('执行SQL并导出结构化文本') { steps { sh ''' # 输出制表符分隔的结构化结果 psql -U 用户名 -d 数据库名 -F $'\t' -A -f 你的脚本.sql > sql_results.tsv ''' } } stage('转换为Excel') { steps { sh ''' python3 -c " import pandas as pd df = pd.read_csv('sql_results.tsv', sep='\\t') df.to_excel('sql_results.xlsx', index=False) " ''' } } } post { always { archiveArtifacts artifacts: 'sql_results.xlsx', fingerprint: true } } }
如果是非结构化控制台输出,需先添加文本清洗逻辑,提取需要的内容后再转换。
方法2:Groovy直接生成Excel
通过Apache POI库在Pipeline中直接编写代码生成Excel,适合输出格式固定的场景:
@Grab('org.apache.poi:poi-ooxml:5.2.3') import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.ss.usermodel.Row import org.apache.poi.ss.usermodel.Cell pipeline { agent any stages { stage('执行SQL并生成Excel') { steps { script { // 捕获SQL脚本输出 def sqlOutput = sh(script: 'psql -U 用户名 -d 数据库名 -f 你的脚本.sql', returnStdout: true).trim() def lines = sqlOutput.split('\n') // 创建Excel工作簿 def workbook = new XSSFWorkbook() def sheet = workbook.createSheet('SQL执行结果') // 逐行写入Excel(需根据实际输出调整分割符) lines.eachWithIndex { line, index -> Row row = sheet.createRow(index) def cells = line.split(/\s+/) // 按空格分割,可替换为逗号等 cells.eachWithIndex { cellValue, cellIndex -> Cell cell = row.createCell(cellIndex) cell.setCellValue(cellValue) } } // 保存文件 def outputFile = new File('sql_results.xlsx') def fos = new FileOutputStream(outputFile) workbook.write(fos) fos.close() workbook.close() } } } } post { always { archiveArtifacts artifacts: 'sql_results.xlsx', fingerprint: true } } }
内容的提问来源于stack exchange,提问作者DanT96
相关产品推荐
相关产品推荐

