Upon David request here's our Jenkinsfile example, it's not all files should be enough to give a good idea of my current setup.
Note (the email-ext email content stop working between 2.51 and 2.54
Jenkins update, since the absolute path can not be found anymore, I may
have to transfer the file back to the master node or something similar).
- The concept is to have Jenkinsfile alone into it's own mercurial repos.
- Then as sub repos (JenkinsBuildHelperScripts) I have many
template/helper scripts.
- The LocalSettings.groovy only exist on each node if some
installation/properties are special on a particular node.
This is the basic idea, the build system is configured to take 2 parameter:
- PIPELINE_REPOS
- PIPELINE_BRANCH_NAME
the default value are set for mostly used script but can be change for
testing or if a dev want to check it's own branch or want to compile with
another compiler (VS2013, VS2015, VS2017 config branch exist for example)
1. The master checkout the Jenkinsfile repos (along with it's sub repos
since this is a Mercurial behavior).
2. Kick in the appropriate node
3. *stage('Init Node')* The node checkout Jenkinsfile sub repos again
into it's tmp (avoid double checkout into workspace) to get access to build
helper scripts (could have been transfer from master to node but checkout
is simpler to make sure I got everything). It also make sure the proper env
settings are used and it sellect the proper MSBuild/Qt version installed on
the node.
4. *stage('Checkout') *The actual code checkout
5. *stage('Clean')* clean up previous build
6. *stage('Build')* launch msbuild compilation for the whole solution
7. *stage('Build Unit Tests')* compile the unit tests (google C++ tests)
8. *stage('Run Unit Tests') * I have a python script that help run every
.exe of unit test with ADmonitoring, then I collect the core dump and tests
results. I also rerun failed tests into html mode, where I can collect the
awaited/results comparaison of our tests function and I publish them so
user can see what is wrong (we do a lot of 3D, so WebGL with simple
geometry can be render with our tests output).
9. *stage('Benchmark') *some of our tests output benchmarks, I also have
a script that convert the output and log the data between build so I can
monitor the algo performance between build.
10. *stage('Qml Syntax Checker') * the Qml syntax checker, run qmlint on
each files (output is console parsed later since we can only do it once).
11. *stage('Qml Inspection')* same inspect valid Qml structure, qmldir
entry
12. *stage('VcxProj Inspection')* make sure a dev didn't forget some
Optimization into the code and other in house settings. This is the last
place where we concat the .txt for the rules and do a single console
parsing.
13. *stage('Doxygen Generation')* we then generate the doxygen
14. Send the email with templates based on the build results. This is
broken into 2.54 (was working into 2.51): Jelly file
[c:/Jenkins/workspace/CAD_CPP/CAD_CPP_ContinuousBuild@tmp/email_template_file.jelly]
was not found in $JENKINS_HOME/email-templates.
This is not perfect at all, but it give a good idea of what is possible for
us. I haven't play with the declarative pipeline yet.
What I wish I had:
1. I would like to have stage that run no matter what (even if previous
stage failed)
2. Easy to express which stage are linear and which can be done into
parallel (on same node)
3. Multiple Console parsing per stage output (super slow since it have
to parse the whole output which is totally unnecessary.
4. email-ext that can take the absolute path template on node again!
5. Programming language that is 100% compatible with Groovy language so
we can test outside Jenkins our scripts. My best fallback is to develop
Python and use groovy only to launch those script which remove a lot of
pain (predictable, testable, stand alone development...).
--
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/11abcfed-5e2f-422e-b539-0c87007ec33a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Jenkinsfile
Description: Binary data
error /^SCRIPT NOT FOUND: (?!external)/ info /^SCRIPT NOT FOUND: external/ warning /^Script file not listed into qmldir: (?!external)/ info /^Script file not listed into qmldir: external/ error /^Module not found: (?!(QtQuick|QtQml|BuildSystemTools))/ info /^Module not found: (QtQuick|QtQml|BuildSystemTools)/
error /^FI\s+ERROR/ warning /^FI\s+WARNING/ info /^FI\s+INFO/
PipelineXUnitTests.template
Description: Binary data
PipelineArtifacts.template
Description: Binary data
PipelineFooter.template
Description: Binary data
PipelineHeader.template
Description: Binary data
BcadFunctions.groovy
Description: Binary data
JenkinsBuildVariables.groovy
Description: Binary data
JenkinsEmailVariables.groovy
Description: Binary data
LocalSettings.groovy
Description: Binary data
