<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog blog("Baptiste Wicht"); (Posts about Continuous Integration)</title><link>https://baptiste-wicht.com/</link><description></description><atom:link href="https://baptiste-wicht.com/categories/continuous-integration.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Sun, 15 Feb 2026 06:57:39 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Jenkins Tip: Send notifications on fixed builds in declarative pipeline</title><link>https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html</link><dc:creator>Baptiste Wicht</dc:creator><description>&lt;p&gt;In &lt;a class="reference external" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html"&gt;my previous post&lt;/a&gt;, I presented a few news about Jenkins and about the fact that I switched to declarative pipelines and Github Organization support for my projects.&lt;/p&gt;
&lt;p&gt;The main issue I had with this system is that I lost the ability to get
notifications on build that recover. Normally, I would get an email indicating
that build X was back to normal, but I haven't found a way to solve that for
declarative pipeline.&lt;/p&gt;
&lt;p&gt;By following a few posts on StackOverflow, I now have the solution and it is the
same problem that was already present in scripted pipelines. Namely, the status
of the current build is not set early enough for the notification.  Basically,
you have to set the notification yourself. Here is what a declarative pipeline
looks like:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code groovy"&gt;&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-1" name="rest_code_94fba423c460431890fa2a45951108d3-1" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-1"&gt;&lt;/a&gt;&lt;span class="n"&gt;pipeline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-2" name="rest_code_94fba423c460431890fa2a45951108d3-2" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-3" name="rest_code_94fba423c460431890fa2a45951108d3-3" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-4" name="rest_code_94fba423c460431890fa2a45951108d3-4" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;stages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-5" name="rest_code_94fba423c460431890fa2a45951108d3-5" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-6" name="rest_code_94fba423c460431890fa2a45951108d3-6" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Normal Stages&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-7" name="rest_code_94fba423c460431890fa2a45951108d3-7" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-8" name="rest_code_94fba423c460431890fa2a45951108d3-8" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'success'&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-9" name="rest_code_94fba423c460431890fa2a45951108d3-9" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-10" name="rest_code_94fba423c460431890fa2a45951108d3-10" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-11" name="rest_code_94fba423c460431890fa2a45951108d3-11" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;currentBuild&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'SUCCESS'&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-12" name="rest_code_94fba423c460431890fa2a45951108d3-12" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-13" name="rest_code_94fba423c460431890fa2a45951108d3-13" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-14" name="rest_code_94fba423c460431890fa2a45951108d3-14" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-15" name="rest_code_94fba423c460431890fa2a45951108d3-15" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-16" name="rest_code_94fba423c460431890fa2a45951108d3-16" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-16"&gt;&lt;/a&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-17" name="rest_code_94fba423c460431890fa2a45951108d3-17" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-18" name="rest_code_94fba423c460431890fa2a45951108d3-18" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;failure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-19" name="rest_code_94fba423c460431890fa2a45951108d3-19" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-20" name="rest_code_94fba423c460431890fa2a45951108d3-20" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;currentBuild&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'FAILURE'&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-21" name="rest_code_94fba423c460431890fa2a45951108d3-21" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-22" name="rest_code_94fba423c460431890fa2a45951108d3-22" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-23" name="rest_code_94fba423c460431890fa2a45951108d3-23" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-23"&gt;&lt;/a&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-24" name="rest_code_94fba423c460431890fa2a45951108d3-24" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;always&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-25" name="rest_code_94fba423c460431890fa2a45951108d3-25" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="n"&gt;$class&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'Mailer'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-26" name="rest_code_94fba423c460431890fa2a45951108d3-26" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nl"&gt;notifyEveryUnstableBuild:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-27" name="rest_code_94fba423c460431890fa2a45951108d3-27" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nl"&gt;recipients:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"baptiste.wicht@gmail.com"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-28" name="rest_code_94fba423c460431890fa2a45951108d3-28" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nl"&gt;sendToIndividuals:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-29" name="rest_code_94fba423c460431890fa2a45951108d3-29" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-29"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-30" name="rest_code_94fba423c460431890fa2a45951108d3-30" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-30"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_94fba423c460431890fa2a45951108d3-31" name="rest_code_94fba423c460431890fa2a45951108d3-31" href="https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html#rest_code_94fba423c460431890fa2a45951108d3-31"&gt;&lt;/a&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There are two important things here. First, a new stage (success) is added that
simply set the result of the current build to SUCCESS once it is done. It must
be the last stage on the pipeline. This could also be added as the last step of
the last stage instead of adding a new stage, but I think it's clearer like
this. The second thing is the failure block in which the result of the current
build is set to FAILURE. With these two things, the Mailer plugin now sends
notification when a build has been fixed.&lt;/p&gt;
&lt;p&gt;I hope that will help some of you. I personally think that it should be much
easier than that. All this boilerplate is polluting the pipeline that should be
kept more maintainable, but for now it seems, it's the nicest way to achieve
that, short of handling all conditions in the post block and sending mail
directly there, but that would result in even more boilerplate code.&lt;/p&gt;</description><category>Continuous Integration</category><category>Jenkins</category><category>Tools</category><guid>https://baptiste-wicht.com/posts/2017/06/jenkins-tip-send-notifications-fixed-builds-declarative-pipeline.html</guid><pubDate>Wed, 07 Jun 2017 07:52:57 GMT</pubDate></item><item><title>Jenkins Declarative Pipeline and Awesome Github Integration</title><link>https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html</link><dc:creator>Baptiste Wicht</dc:creator><description>&lt;p&gt;This post is about some news about Jenkins and how I've updated my Jenkins
usage. This may be a bit of an enthusiastic post ;)&lt;/p&gt;
&lt;p&gt;At the beginning of Jenkins, the best way to define the commands to be executed
for your builds was simply to write the commands in the Jenkins interface. This
worked quite well. Later on, Jenkins introduced the notion of Pipeline. Instead
of a single set of commands to be executed, the build was defined in
multi-stages pipeline of commands. This is defined as a Groovy script. One big
advantage of this is that all the code for creating the build is inside the
repository. This has the advantage that each build is reproducible. This enabled
to define complex pipelines of commands for your builds. Moreover, this also
allows to have a clean view of which steps are failing and which steps are
taking how much of the time of the build. For instance, here it's a view of the
pipeline steps for my DLL project:&lt;/p&gt;
&lt;img alt="Jenkins stage view for DLL pipeline." class="align-center" src="https://baptiste-wicht.com/images/jenkins_pipeline_dll.png"&gt;
&lt;p&gt;I think that's pretty cool :)&lt;/p&gt;
&lt;p&gt;They recently added a new feature, the declarative pipelines. Instead of
scripting the Pipeline in Groovy, the new system uses its own syntax, completely
declarative, to put blocks together and add ways of doing actions at specific
points and setting environment and so on. I think the new syntax is much nicer
than the Groovy scripted Pipeline way, so I started converting my scripts. I'll
give an example in a few paragraphs. But first, I'd like to talk about Github
integration. Before, every time I created a new project, I add to add it to
Jenkins by creating a new project, updating the link to the Github project and
a few things in order to add it. This is not so bad but what if you want to
build on several branches and keep track of the status of the branches and maybe
of the Pull Requests as well. All of this is now very simple. You can now
declare the Github organizations (and users) you are of building projects from
and the projects inside the organization will be automatically detected as long
as they have a Jenkinsfile inside. That means that you'll never have to create
a project yourself or handle branches. Indeed, all the created projects can now
handle multiples. For instance, here is the status of the two current branches
of my dll project:&lt;/p&gt;
&lt;img alt="Jenkins branches for DLL Github project" class="align-center" src="https://baptiste-wicht.com/images/jenkins_github_branches.png"&gt;
&lt;p&gt;It's maybe not the best example since one branch is failing and the other is
unstable, but you can see that you can track the builds for each branch in
a nice way.&lt;/p&gt;
&lt;p&gt;A very good feature of this integration is that Jenkins will now automatically
marks commits on your Github with the status of your builds at no cost! For
instance, here is the status on my ETL project after I configured on Jenkins and
made the first builds:&lt;/p&gt;
&lt;img alt="Jenkins marking commits in Github" class="align-center" src="https://baptiste-wicht.com/images/jenkins_github_integration_marks.png"&gt;
&lt;p&gt;Pretty cool I think :)&lt;/p&gt;
&lt;p&gt;Another nice thing in Jenkins is the Blue Ocean interface. This is an
alternative interface, especially well-suited for multi-branch projects and
pipelines. It looks much more modern and I think it's quite good. Here are a few
views of it:&lt;/p&gt;
&lt;p&gt;The Activity view for the last events of the project:&lt;/p&gt;
&lt;img alt="Jenkins Blue Ocean Activity view for DLL project" class="align-center" src="https://baptiste-wicht.com/images/jenkins_blue_ocean_dll_activity.png"&gt;
&lt;p&gt;The Branches view for the status of each branch:&lt;/p&gt;
&lt;img alt="Jenkins Blue Ocean Branches view for DLL project" class="align-center" src="https://baptiste-wicht.com/images/jenkins_blue_ocean_dll_branches.png"&gt;
&lt;p&gt;The view of the status of a build:&lt;/p&gt;
&lt;img alt="Jenkins Blue Ocean view of a build for DLL project" class="align-center" src="https://baptiste-wicht.com/images/jenkins_blue_ocean_dll_build.png"&gt;
&lt;p&gt;The status of the tests for a given build:&lt;/p&gt;
&lt;img alt="Jenkins Blue Ocean view of a build tests for DLL project" class="align-center" src="https://baptiste-wicht.com/images/jenkins_blue_ocean_dll_build_tests.png"&gt;
&lt;p&gt;It's likely that it won't appeal to everyone, but I think it's pretty nice.&lt;/p&gt;
&lt;p&gt;If we get back to the declarative Pipeline, here is the declarative pipeline for
my Expression Templates Library (ETL) project:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code groovy"&gt;&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-1" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-1" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-1"&gt;&lt;/a&gt;&lt;span class="n"&gt;pipeline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-2" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-2" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-3" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-3" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-4" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-4" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-5" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-5" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;CXX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"g++-4.9.4"&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-6" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-6" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;LD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"g++-4.9.4"&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-7" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-7" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;ETL_MKL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'true'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-8" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-8" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-9" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-9" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-10" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-10" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;stages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-11" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-11" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'git'&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-12" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-12" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-13" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-13" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;checkout&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-14" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-14" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;$class&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'GitSCM'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-15" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-15" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nl"&gt;branches:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-16" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-16" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nl"&gt;doGenerateSubmoduleConfigurations:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-17" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-17" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nl"&gt;extensions:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="n"&gt;$class&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'SubmoduleOption'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;disableSubmodules:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;recursiveSubmodules:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;reference:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;trackingSubmodules:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;]],&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-18" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-18" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nl"&gt;submoduleCfg:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[],&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-19" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-19" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="nl"&gt;userRemoteConfigs:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;userRemoteConfigs&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-20" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-20" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-21" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-21" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-22" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-22" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-22"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-23" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-23" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'pre-analysis'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-24" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-24" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-25" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-25" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'cppcheck --xml-version=2 -j3 --enable=all --std=c++11 `git ls-files "*.hpp" "*.cpp"` 2&amp;gt; cppcheck_report.xml'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-26" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-26" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'sloccount --duplicates --wide --details include/etl test workbench &amp;gt; sloccount.sc'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-27" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-27" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'cccc include/etl/*.hpp test/*.cpp workbench/*.cpp || true'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-28" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-28" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-29" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-29" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-29"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-30" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-30" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-30"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-31" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-31" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-31"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'build'&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-32" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-32" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-33" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-33" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-33"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'make clean'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-34" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-34" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-34"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'make -j6 release'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-35" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-35" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-35"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-36" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-36" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-36"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-37" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-37" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-37"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-38" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-38" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-38"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'test'&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-39" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-39" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-39"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-40" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-40" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-40"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'ETL_THREADS=-j6 ETL_GPP=g++-4.9.4 LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/opt/intel/mkl/lib/intel64:/opt/intel/lib/intel64\" ./scripts/test_runner.sh'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-41" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-41" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-41"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;archive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'catch_report.xml'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-42" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-42" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-42"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;junit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'catch_report.xml'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-43" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-43" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-43"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-44" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-44" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-44"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-45" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-45" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-45"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-46" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-46" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-46"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sonar-master'&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-47" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-47" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-47"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-48" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-48" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-48"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;branch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'master'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-49" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-49" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-49"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-50" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-50" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-50"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-51" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-51" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-51"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/opt/sonar-runner/bin/sonar-runner"&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-52" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-52" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-52"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-53" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-53" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-53"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-54" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-54" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-54"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-55" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-55" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-55"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sonar-branch'&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-56" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-56" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-56"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-57" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-57" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-57"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-58" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-58" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-58"&gt;&lt;/a&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;branch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'master'&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-59" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-59" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-59"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-60" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-60" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-60"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-61" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-61" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-61"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-62" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-62" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-62"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/opt/sonar-runner/bin/sonar-runner -Dsonar.branch=${env.BRANCH_NAME}"&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-63" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-63" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-63"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-64" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-64" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-64"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-65" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-65" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-65"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-66" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-66" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-66"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'bench'&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-67" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-67" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-67"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-68" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-68" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-68"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;job:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'etl - benchmark'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;wait:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-69" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-69" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-69"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-70" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-70" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-70"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-71" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-71" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-71"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-72" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-72" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-72"&gt;&lt;/a&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-73" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-73" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-73"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-74" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-74" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-74"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;always&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-75" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-75" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-75"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="n"&gt;$class&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'Mailer'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-76" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-76" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-76"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nl"&gt;notifyEveryUnstableBuild:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-77" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-77" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-77"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nl"&gt;recipients:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"baptiste.wicht@gmail.com"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-78" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-78" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-78"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nl"&gt;sendToIndividuals:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-79" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-79" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-79"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-80" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-80" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-80"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2b9f82b278df4b9683d6b62e7548f533-81" name="rest_code_2b9f82b278df4b9683d6b62e7548f533-81" href="https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html#rest_code_2b9f82b278df4b9683d6b62e7548f533-81"&gt;&lt;/a&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There is nothing really fancy about, it's probably average. Moreover, since I'm
not an expert on pipelines and I've just discovered declarative pipelines, it
may not be optimal, but it works. As you'll see there are some problems
I haven't been able to fix.&lt;/p&gt;
&lt;p&gt;The first part declares the environment variables for the build. Then, the
multiple build stages are listed. The first stage checkout the code from the
SCM. This ugly piece of code is here to allow to checkout the submodules. It is
the only solution I have found so far. It's very ugly but it works. The second
steps is simply some basic static analysis. The next step is the classical build
step. Then, the tests are run. In that case, I'm using a script because the
tests are compiled with several different sets of options and it was much easier
to put that in a script that in the Pipeline. Moreover, that also means I can
run them standalone. The variables in the line to run the script is another
problem I haven't been able to fix so far. If I declare these variables in an
environment block, they are not passed to the script for some reason, so I had
to use this ugly line. The next two blocks are for Sonar analysis. If you start
with Sonar, you can simply the second block that passed the branch information
to Sonar. Unfortunately, Sonar is very limited in terms of Git branches. Each
branch is considered as another totally different project. That means the false
positives defined in the master branch will not be used in the second branch.
Therefore, I kept a clean master and several different projects for the other
branches. Once Sonar improves this branch handling stuff, if they ever do, I'll
be able to get rid of one of these conditional stages. The last stage is simple
running the benchmark job. Finally, the post block is using the Mailer plugin to
send failed builds information. Again, there is a problem here since this does
not send "Back to normal" information as it used to do before. I've asked this
question on StackOverflow, but haven't received an answer so far. I'll post
a better solution on this blog once I have one. If any of you have some
solutions to these problems, don't hesitate to post in the comments below or to
contact me on Github.&lt;/p&gt;
&lt;p&gt;Here it is. I really think Jenkins is getting even greater now with all this
cool stuff and I advice you to try it out!&lt;/p&gt;</description><category>Continuous Integration</category><category>Jenkins</category><category>Tools</category><guid>https://baptiste-wicht.com/posts/2017/06/jenkins-declarative-pipeline-and-awesome-github-integration.html</guid><pubDate>Sun, 04 Jun 2017 18:52:10 GMT</pubDate></item></channel></rss>