Jenkins + Valgrind 进行代码检查

MuYusen 于 2023-10-08 发布 本文总阅读量

参考

Jenkins 插件安装

Valgrind Plug-in (插件有点老)

新建Pipeline项目,编写Pipeline script

node('cm_22.04') {
   stage('Checkout') {
      git 'https://github.com/eXistence/ValgrindTest.git'
   }
   stage('Build') {
      sh 'sh build.sh'
   }
   stage('Valgrind') {
        runValgrind (
          childSilentAfterFork: true,
          excludePattern: '',
          generateSuppressions: true,
          ignoreExitCode: true,
          includePattern: 'bin/test_leak',
          outputDirectory: '',
          outputFileEnding: '.memcheck',
          programOptions: '',
          removeOldReports: true,
          suppressionFiles: '',
          tool: [$class: 'ValgrindToolMemcheck',
            leakCheckLevel: 'full',
            showReachable: true,
            trackOrigins: true,
            undefinedValueErrors: true],
          traceChildren: true,
          valgrindExecutable: '',
          valgrindOptions: '',
          workingDirectory: ''
        )

        publishValgrind (
          failBuildOnInvalidReports: false,
          failBuildOnMissingReports: false,
          failThresholdDefinitelyLost: '',
          failThresholdInvalidReadWrite: '',
          failThresholdTotal: '',
          pattern: '*.memcheck',
          publishResultsForAbortedBuilds: false,
          publishResultsForFailedBuilds: false,
          sourceSubstitutionPaths: '',
          unstableThresholdDefinitelyLost: '',
          unstableThresholdInvalidReadWrite: '',
          unstableThresholdTotal: ''
        )
   }
}

pipeline中并行MemcheckHelgrind

目的是想在一个Pipeline任务中并行分析MemcheckHelgrind

结果显示有问题,不建议,最好还是放在不同的任务中

node('cm_22.04') {
   stage('Checkout') {
      git 'https://github.com/eXistence/ValgrindTest.git'
   }
   stage('Build') {
      sh 'sh build.sh'
   }
   parallel Memcheck:{
       stage('Memcheck') {
            runValgrind (
              childSilentAfterFork: true,
              excludePattern: '',
              generateSuppressions: true,
              ignoreExitCode: true,
              includePattern: 'bin/test_leak',
              outputDirectory: '',
              outputFileEnding: '.memcheck',
              programOptions: '',
              removeOldReports: true,
              suppressionFiles: '',
              tool: [$class: 'ValgrindToolMemcheck',
                leakCheckLevel: 'full',
                showReachable: true,
                trackOrigins: true,
                undefinedValueErrors: true],
              traceChildren: true,
              valgrindExecutable: '',
              valgrindOptions: '',
              workingDirectory: ''
            )

            publishValgrind (
              failBuildOnInvalidReports: false,
              failBuildOnMissingReports: false,
              failThresholdDefinitelyLost: '',
              failThresholdInvalidReadWrite: '',
              failThresholdTotal: '',
              pattern: '*.memcheck',
              publishResultsForAbortedBuilds: false,
              publishResultsForFailedBuilds: false,
              sourceSubstitutionPaths: '',
              unstableThresholdDefinitelyLost: '',
              unstableThresholdInvalidReadWrite: '',
              unstableThresholdTotal: ''
            )
       }
    },Helgrind:{
       stage('Helgrind') {
            runValgrind (
              childSilentAfterFork: true,
              excludePattern: '',
              generateSuppressions: true,
              ignoreExitCode: true,
              includePattern: 'bin/test_leak',
              outputDirectory: '',
              outputFileEnding: '.helgrind',
              programOptions: '',
              removeOldReports: true,
              suppressionFiles: '',
              tool: [$class: 'ValgrindToolHelgrind',
                leakCheckLevel: 'full',
                showReachable: true,
                trackOrigins: true,
                undefinedValueErrors: true],
              traceChildren: true,
              valgrindExecutable: '',
              valgrindOptions: '',
              workingDirectory: ''
            )

            publishValgrind (
              failBuildOnInvalidReports: false,
              failBuildOnMissingReports: false,
              failThresholdDefinitelyLost: '',
              failThresholdInvalidReadWrite: '',
              failThresholdTotal: '',
              pattern: '*.helgrind',
              publishResultsForAbortedBuilds: false,
              publishResultsForFailedBuilds: false,
              sourceSubstitutionPaths: '',
              unstableThresholdDefinitelyLost: '',
              unstableThresholdInvalidReadWrite: '',
              unstableThresholdTotal: ''
            )
       }
    }
}