This post will explain how to use valgrind memcheck in cmake/ctest and publish the result in jenkins.
Jenkins requirements: Hudson CMake plugin and Vagrind plugin
First, you have to setup cmake to use valgrind when launching tests; the valgrind jenkins plugin requires the XML output format, so you have to told valgrind to use it:
option(MYPROJECT_ENABLE_MEMCHECK "enable valgrind memcheck report" false)
if(MYPROJECT_ENABLE_MEMCHECK)
find_program( CTEST_MEMORYCHECK_COMMAND valgrind )
set( CTEST_MEMORYCHECK_COMMAND_OPTIONS
"--trace-children=yes --leak-check=full --xml=yes --xml-file=valgrind-%p.xml" )
function(add_test name binary)
set(memcheck_command "${CTEST_MEMORYCHECK_COMMAND} ${CTEST_MEMORYCHECK_COMMAND_OPTIONS}")
separate_arguments(memcheck_command)
_add_test(${name}_memcheck ${memcheck_command} ${binary} ${ARGN})
endfunction(add_test)
function(set_memcheck_test_properties name)
set_tests_properties(${name}_memcheck ${ARGN})
endfunction(set_memcheck_test_properties)
endif(MYPROJECT_ENABLE_MEMCHECK)
enable_testing()
Now, in your jenkins project, you should configure cmake to use the memcheck variable: -DMYPROJECT_ENABLE_MEMCHECK=ON
Then add a Publish valgrind results action in the post build action section. Configure the Report Pattern to **/valgrind-*.xml
That’s all. Now each build will include a Valgrind results section.
