jenkins 获取管道字节码大小

vnzz0bqm  于 2023-08-03  发布在  Jenkins
关注(0)|答案(1)|浏览(99)

我们有很多使用“混合”语法的复杂管道。我们将它们作为基于开源MPL项目的共享库分发。
我称之为'混合'语法,因为我们有一些逻辑优先声明

MPLpipeline{
   node('blablah'){
    do_some_init_()
   }
   pipeline{...}
}

字符串
我们得到“方法太长”错误的情况下,我们添加了大量的代码到declerative节。这是一个已知的Java限制,每个方法65 kb,似乎管道{}中的所有内容都被认为是一个方法)
我想运行一些测试/脚本,它将通过我们拥有的所有管道,并编译它们,包括所有需要的共享库(基本上这个共享库也使用另一个),并测量字节码的大小。
基本上,我需要一些逻辑,将检测管道是否超过限制大小或不之前,我们合并到主分支。
有谁知道做这件事的好方法吗?如果可能的话?

qxgroojn

qxgroojn1#

据我所知,这是不可能的。但你可以像这样创建管道

// workaround to check method too large error in pipelines
void isPipelineCompiles(def body) {
  Boolean foundCompileError = false
  try {
    try {
      try {
        // 5 seconds should be enough to detect compile error
        timeout(time: 5, unit: "SECONDS") {
          body()
        }
      } catch (hudson.AbortException e) {
        println("abort exeption - all good, pipeline compiles")
      }
    } catch (org.jenkinsci.plugins.workflow.cps.CpsCompilationErrorsException e) {
      println("Compile error found")
      foundCompileError = true
      throw e
    }

  } catch (ex) {
    println("global exception ${ex}")
    // we intested only in compile errors for now
    if (foundCompileError) {
      throw ex
    }
  }
}

pipeline {
  agent any
  stages {
    stage("init-library") {
      steps {
        script {
          def branch
          if (env.BRANCH_NAME ==~ /^MR-[0-9]+.*/ ) {
            branch = env.CHANGE_BRANCH
          } else {
            branch = env.BRANCH_NAME
          }
          // init library
          library "your-library-name@${branch}"
        }
      }
    }
    stage("testing-compile") {
      parallel {
        stage("check pipeline one") {
          steps {
            script {
              isPipelineCompiles() {
                // pipeline from your-library-name library, vars folder
                PipelineOne{}
              }
            }
          }
        }
        stage("check pipeline two") {
          steps {
            script {
              isPipelineCompiles() {
                // pipeline from your-library-name library, vars folder
                PipelineTwo{}
              }
            }
          }
        }
      }
    }
  }
}

字符串
library "your-library-name@${branch}"-分支变量可以被删除,这是为多分支管道做的,当你有功能分支并做了一些代码,在合并之前测试它是否工作。从jenkins全局配置加载库
Pipeline{}您从vars/文件夹管道
如果方法错误太大,则该流水线将失败

相关问题