开发一个jenkins插件

问题背景

在使用jenkins打包时,经常会遇到打包失败的问题,大多数情况下是代码编译错误。

但是现在很多大项目有非常多的插件,输出的日志也非常多,直接查看console非常费时间;现在需要将出错的日志筛选出来,并通知到开发,需要怎么办呢?

现有方案

问题很明确了,先看看jenkins是否已经有了这种功能呢?如果有了,咱们直接用起来就很美滋滋~

很快呀,就发现有个TextFinder插件,jenkins本身已经安装了,直接用起来就行

TextFinder

使用很简单,在任务配置里添加 构建后任务

然后添加筛选匹配规则即可,支持正则表达式

但是很快遇到了问题,如果有多个同样的匹配结果,仅输出第一条日志,马虎一点也能算解决了问题,但是本着知其所以然的精神,看了下源码 确实在搜索console日志时如果匹配到了就会快速返回结果!

arduino 复制代码
private static boolean checkPattern(
            Reader r, Pattern pattern, PrintStream logger, String header, boolean isConsoleLog) throws IOException {
        boolean logFilename = true;
        boolean foundText = false;
        try (BufferedReader reader = new BufferedReader(r)) {
            // Assume default encoding and text files
            String line;
            while ((line = reader.readLine()) != null) {
                /*
                 * Strip console logs of their console notes before searching; otherwise, we might
                 * accidentally match the search string in the encoded console note.
                 */
                if (isConsoleLog) {
                    line = ConsoleNote.removeNotes(line);
                }
                Matcher matcher = pattern.matcher(line);
                if (matcher.find()) {
                    if (logFilename) { // first occurrence
                        if (header != null) {
                            logger.println(header);
                        }
                        logFilename = false;
                    }
                    logger.println(line);
                    foundText = true;
                    /*
                     * When searching console output, return immediately as soon as the first hit is
                     * found; otherwise, we'll loop forever.
                     */
                    if (isConsoleLog) {
                        return true;
                    }
                }
            }
        }
        return foundText;
    }

另外的主要问题是想通知开发这个结果,也做不到,插件只会把匹配结果输出到console,另外还能标记成功或者失败,不能满足最初的设想功能。

那只能借鉴copy它来改一改了。

jenkins插件开发

直接参考官网文档即可,这里不做过多介绍了,主要分享实现的功能和大概思路。

  • 去掉仅匹配一次的限制,这个很简单,新建工程复制源码改下逻辑即可
  • 添加一个RunAction2来展示匹配的日志,能直接看到出错日志,减少搜索出错日志的时间
  • 将筛选出来的日志存到指定文件,添加shell脚本来读取文件并发通知给触发这次构建的开发同学(企微api)

遇到的问题

  • 如果导入demo工程出现问题,可以直接新建一个空的jenkins插件工程
  • 文件读写使用FilePath,可以看下jenkins的结构,因为插件是以服务的形式存在的,可能部署到不同节点,直接使用File在本地测试还行,部署到线上就不行了。
相关推荐
庚昀◟4 小时前
腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南(python、flask实现简单计算器)
python·ci/cd·docker·flask·jenkins
牛奶咖啡136 小时前
CI/CD——使用Jenkins实现自动化部署与持续集成
ci/cd·jenkins·jenkins是什么?有啥用·jenkins有哪些适用场景·jenkins的优缺点·jenkins的安装部署·jenkins安装必备环境
测试那点事儿1 天前
第10章 零基础接口自动化到 Jenkins 持续集成【定时监控与邮件告警完整落地】
ci/cd·自动化·jenkins
a***72891 天前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
摇滚侠2 天前
黑马 Elasticsearch 全套教程,黑马旅游网案例
大数据·elasticsearch·jenkins
身如柳絮随风扬2 天前
使用 Docker 部署 Jenkins 并实现自动化部署 —— 从零到一的 CI/CD 实践指南
docker·自动化·jenkins
醉颜凉2 天前
Elasticsearch高阶聚合实战:Pipeline Aggregation 用法详解与典型场景全攻略
大数据·elasticsearch·jenkins
测试那点事儿3 天前
第2章零基础接口自动化到 Jenkins 持续集成【本地环境准备与首次跑通】
ci/cd·自动化·jenkins
测试那点事儿3 天前
第1章 零基础接口自动化到 Jenkins 持续集成【看懂接口自动化框架全景】
ci/cd·自动化·jenkins
测试那点事儿3 天前
第4章 零基础接口自动化到 Jenkins 持续集成【写第一个 YAML 接口测试用例】
ci/cd·自动化·jenkins