jenkins---通过groovy把控制台日志筛选出来发送到企业微信机器人

jenkins执行完以后,控制台的输出太多了,有时候我们只想要关键信息,然后发送到企业微信群内,通知这次的执行是否成功,我们可以通过groovy来执行

1:安装groovy插件,jenkins安装插件可以看看我之前的博客,安装好后是如下图

 

2:在build Steps(增加构建步骤)添加步骤,选择Execute system Groovy script,详细代码如下:  要注意日志文件路劲,最好到部署jenkins的服务器上去找一下
我是对 进程两个字进行正则搜索,可以看自己的需要

 

import groovy.json.JsonOutput
import java.net.HttpURLConnection
import java.net.URL

def build = Thread.currentThread().executable
def workspace = build.workspace.toString()

// 获取当前构建的项目名称和构建编号
def jobName = build.project.name
def buildNumber = build.number

// 动态构建日志文件路径
def logFile = new File("/var/lib/jenkins/jobs/${jobName}/builds/${buildNumber}/log")

// 打印日志文件的绝对路径
println("Log file path: ${logFile.absolutePath}")

def logContent = ""
def matches = [] // 定义 matches,确保即使没有匹配内容也能避免异常

if (logFile.exists() && logFile.length() > 0) {
    // 读取整个日志文件内容
    logContent = logFile.text

    // 使用正则表达式处理日志内容
    def pattern = ~/.*进程.*/

    matches = logContent.readLines().findAll { line ->
        line.matches(pattern)
    }

    // 打印提取到的信息
    if (matches) {
        println("匹配到的进程信息:")
        matches.each { println(it) }
    } else {
        println("没有匹配到任何进程信息。")
    }
} else {
    println("Log file does not exist or is empty.")
}

// 构建 JSON 数据
def jsonContent = "执行结果:\n${matches.join("\n")}"
def jsonInputString = JsonOutput.toJson([
    msgtype: "markdown",
    markdown: [
        content: jsonContent
    ]
])
println("JSON to send: ${jsonInputString}") // 调试输出

// 发送 HTTP POST 请求
def url = new URL("你的企业微信机器人webhook")
def connection = url.openConnection() as HttpURLConnection
connection.setRequestMethod("POST")
connection.setRequestProperty("Content-Type", "application/json")
connection.setDoOutput(true)

// 发送请求数据
connection.getOutputStream().write(jsonInputString.getBytes("UTF-8"))
connection.connect()

// 获取响应
def responseCode = connection.responseCode
println("Response Code: ${responseCode}")

if (responseCode == HttpURLConnection.HTTP_OK) {
    def response = connection.inputStream.text
    println("Response: ${response}")
} else {
    println("Request failed: ${connection.responseMessage}")
}

connection.disconnect()

 

3:写好脚本以后,记得批准,这里漏了,可以在manage Jenkins页面里面的script console里面批准,保存执行即可

 

 

4:注意这个步骤的执行位置最好在执行完服务器的脚本后,这样才能拿到完整的日志

 

5:效果:

 

posted @ 2024-11-21 18:39  Hiro-D  阅读(33)  评论(0编辑  收藏  举报