Background
I am trying to use the BUILD_LOG_REGEX
environment variable, which is provided by the emailext plugin, to filter a build log. My regular expression is suppose to match everything between the “init:” and “Total time” strings. My regular expression is as follows init:(.*?)Totalstime
The Jenkins emailext code is as follows
emailext( body: "${BUILD_LOG_REGEX, regex="init:(.*?)Total\stime", maxMatches=10000000, showTruncatedLines=false, escapeHtml=true}", subject: 'Test Subject', mimeType: 'text/html', to: 'noname@gmail.com' )
The build log is as follows
Started by user Chris Maggiulli Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline [Pipeline] node Running on EC2 (sis-account) - java-build-11 (sir-2viyb9qh) in /home/ec2-user/workspace/z_test/email-build-log [Pipeline] { [Pipeline] stage (checkout) Using the ‘stage’ step without a block argument is deprecated Entering stage checkout Proceeding [Pipeline] checkout Using sole credentials awsjobs/****** (awsjobs-AD-User) in realm ‘<https://svn.int.excelsior.edu:443> Private’ Updating https://svn.int.excelsior.edu/svn/sis_dev2 at revision '2021-08-10T13:18:37.454 +0000' --quiet [Pipeline] stage (build) Using the ‘stage’ step without a block argument is deprecated Entering stage build Proceeding At revision 27558 [Pipeline] dir Running in /home/ec2-user/workspace/z_test/email-build-log/sis [Pipeline] { [Pipeline] sh + ant -Dsis.root=.. -Djava.home=/usr/lib/jvm/java-11-amazon-corretto.x86_64 -Djava.exec=/usr/lib/jvm/java-11-amazon-corretto.x86_64/bin/java make Buildfile: /home/ec2-user/workspace/z_test/email-build-log/sis/build.xml init: compileSis: [copy] Copying 1 file to /home/ec2-user/workspace/z_test/email-build-log/sis/sis/WEB-INF/classes [copy] Copying 9 files to /home/ec2-user/workspace/z_test/email-build-log/sis/sis/WEB-INF/classes [javac] /home/ec2-user/workspace/z_test/email-build-log/sis/build.xml:108: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 3372 source files to /home/ec2-user/workspace/z_test/email-build-log/sis/sis/WEB-INF/classes [javac] warning: [options] bootstrap class path not set in conjunction with -source 7 [javac] Note: Some input files use or override a deprecated API. [javac] Note: Recompile with -Xlint:deprecation for details. [javac] Note: Some input files use unchecked or unsafe operations. [javac] Note: Recompile with -Xlint:unchecked for details. [javac] 1 warning createSisWar: [delete] Deleting: /home/ec2-user/workspace/z_test/email-build-log/deploy/tomcat/sis.war [war] Building war: /home/ec2-user/workspace/z_test/email-build-log/deploy/tomcat/sis.war FullSisBuild: make: [echo] build complete. BUILD SUCCESSFUL Total time: 25 seconds [Pipeline] } [Pipeline] // dir [Pipeline] stage (email) Using the ‘stage’ step without a block argument is deprecated Entering stage email Proceeding [Pipeline] emailext Sending email to: noname@gmail.com [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
While this works in almost all online regex testers it does not work in Jenkins. I believe this is related to how the BUILD_LOG_REGEX
macro implements dotall but I can’t get it to match across multiple lines. I realize that BUILD_LOG_REGEX
is implemented using java.util.regex.Pattern
. Can someone assist me with this?
Attempts
I’ve also tried the following regex init:(?s:.*)Totalstime
as well as attempting to use the BUILD_LOG_MULTILINE_REGEX ( with both regular expressions ) but both return no matches.
Advertisement
Answer
Solution BUILD_LOG_EXCERPT
I found a roundabout solution using the BUILD_LOG_EXCERPT token. The following code sample gives the results I am looking for using this token.
emailext( subject: "compile-check failed for $APP", body: "${BUILD_LOG_EXCERPT, start="init:.*", end="Total\stime.*"}", replyTo: '$DEFAULT_REPLYTO', mimeType: 'text/html', recipientProviders: [culprits()], to: 'noone@gmail.com' )
The unescaped string is ${BUILD_LOG_EXCERPT, start="init:.*", end="Totalstime.*"}
I am still interested in a solution using BUILD_LOG_REGEX
or BUILD_LOG_MULTILINE_REGEX