If this may help someone, here's my finding so far (I must admit I found
Groovy inside Jenkins to be painful and by far one of my less favorite
scripting language so far, especially loosing my head with a few things.
Here's some traps I found:
- the .each fct bug that iterating only once (work inside all groovy
console except into Jenkins project file
- Editing the pipline script of a pipleine project (when not into from
SCM) doesn't show the script box, just right click on the Script tag and
inspect content and search for the html tag div
class="workflow-editor-wrapper" and uncheck display: none from the CSS
property.
- importing tools file is not funny and I still cannot println() into
them so far, the output doesn't display for some reason I don't known.
- "." path is Jenkins home and not the current workspace, you need to
use pwd() to access the workspace
- printing env options is nearly impossible don't waste your time on
this, search for for the available value on google
- uncheck the sandbox, else you pretty much cannot use anything even
basic stuff (regex, string, match)
If anybody want to import a tools file that can be used into multiple
JenkinsFile or project, here's an example:
My Jenkinsfile stage look like this
stage 'VcxProj Inspection'
GroovyObject bcadTools = (GroovyObject) (new
GroovyClassLoader(getClass().getClassLoader()).parseClass(new File(pwd() +
"\\Tools.groovy"))).newInstance();
for(String l : bcadTools.findIntoFiles(true, pwd(), ~/.*\.vcxproj/,
~/Optimization/))
{
println(l)
}
// Clean up to avoid CPS problems
errorLines = null
bcadTools = null
My Tools.groovy look like this:
/*!
* \warning Copyright (c) 2016 Laboratoires Bodycad inc., All rights
reserved
*
* \date 2016-07-13
* \author Jerome Godbout
*
* \file Tools.groovy
* \info This is common function to use with JenkinsFile or other
groovy scripts
*
*/
import static groovy.io.FileType.*
import java.util.regex.Pattern
class BCadTools
{
/* Find pattern into files from src path that will recursively search
* \param isError, print error or warning
* \param path, path to recursively search for file. Ex: "MyPath\\SubDir"
* \param extension, the file extension to check for. Ex: ~/.*\.vcxproj$/
* \param content, the content regex to seek. Ex: /Optimization/
* \return the match list for each files
*/
def findIntoFiles(boolean isError, String path, Pattern fileFilter, Pattern
lineExp)
{
def rv = []
def srcDir = new File(path)
def levelStr = (isError ? "ERROR" : "WARNING")
srcDir.traverse(type: FILES, nameFilter: fileFilter)
{
def fileName = it.path
if(!(fileName =~ /[\\\\\/]+\.hg[\\\\\/]+/) &&
!(fileName =~ /[\\\\\/]+external[\\\\\/]+/))
{
def fileCheck = new File(fileName)
def lineNumber = 0
fileCheck.eachLine
{
def matches = it =~ lineExp
if(matches.count > 0)
{
rv.push("FI " + levelStr + " : " + fileName + " at line " + lineNumber + "
: " + it)
}
++lineNumber
}
}
}
return rv
}
}
I should be able to parse the console output to make warning or error with
this. I have yet figure out if I can split the consle parsed output results
from each stage into different output, but that's something else.
I hope there's a better way to acheive all this, but it already took me way
too much time to do this simple thing. Just hope it may help people to
start with.
Jerome
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/adf87754-86cb-4ded-8d42-7d258d9f6d7c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.