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:效果: