On Sunday, July 31, 2016 at 1:26:58 AM UTC+2, Jesse Farinacci wrote:
>
> Hi, 
>
> On Sat, Jul 30, 2016 at 2:39 PM, khmarbaise <[email protected] 
> <javascript:>> wrote: 
> > so have you really measured the time you are "wasting" ? Furthermore 
> which 
> > Maven version and plugin versions do you use? Are you using freestyle or 
> > Maven job type... 
>
>
> Yes, we have measured. Both with the Tesla Maven Profiler, but also 
> even just crudely. The profiler led us to remove a lot of stuff that 
> we had attached to the build lifecycle and have now pushed into 
> dedicated jobs (e.g. pathological but necessary m-enforcer-p 
> enforcement, other stuff). So for example, running a clean install and 
> skipping all tests on a typical project versus clean install yields 
> about 10-20% reduction in wall clock execution time. 


Skipping Test will of course reduce the time (Do you know how long the 
tests alone take?) 
but I wanted to know the exact "wasted" time you have mentioned by 
compile/resources? 

So running a linear (single thread) mvn clean install vs. mvn install (in 
both cases with skipping tests at all)...

If you always do a clean than Maven (plugins) can't identify things which 
have already been done cause they are not there...so yes in this case you 
are wasting time...

 

> That, to me, 
> means we are repeating about 80-90% of "stuff" when we execute it 
> again 



Based on the usage of "clean" ...

 

> but just to run the integration tests and again for acceptance 
> tests. Those timings were found on my development machine. 
>
> We do not run the Maven job type anymore, I used to be a big fan of 
> it, but in order to get supremely fast flow, we abandoned it. A lot of 
> the nice stuff where Maven integrates with Jenkins just isn't all 
> useful enough for the cost. I realize that is a sensitive topic, and I 
> don't want to get into it more,


As others and me too say Maven Job Type is evil ...cause it influences a 
Maven Build in many ways...

 

> and all the research that I performed 
> is at least a year old, I'm not looking to start a discussion on this, 
> and I'm certainly not willing to go through another round of research. 
> We use Freestyle, and that is unlikely to change unless someone else 
> can demonstrate very sizable performance wins. 
>
> We always run the latest Maven version, 3.3.9 currently, all 
> dependencies and plugins are up to date (thank you 
> versions:display-{dependency,plugin}-updates mojo which we run weekly 
> and then perform updates). 


very good...
 

> Finally, most developers in our area use 
> --threads 2.0C but on Jenkins we do not because we strictly control 
> the number of slaves per real machine, and do not like to get 
> surprised about how much usage a slave is actually going to cost. 
> Though, since we did move to RHEL 7 with systemd and cgroups, this 
> probably isn't an actual issue anymore and we should revisit it. But 
> for simplicity, -T1 is used for all slaves. 
>
>
> > On Saturday, July 30, 2016 at 8:13:14 PM UTC+2, Jesse Farinacci wrote: 
> >> 
> >> My team faces similar challenges, and I agree with almost everything 
> >> said so far. I definitely echo the sentiment that it feels like there 
> >> is a lot of wasted repetition when invoking discrete phases 
> >> separately. We currently do this via separate jobs now, which often 
> >> run at different frequencies. However, we have been able to configure 
> >> Maven such that we really only have two repetitious phases, across 
> >> these multiple jobs, which luckily are not costly for us. Maven 
> >> generate-resources and compile phases, as we can skip over tests and 
> >> deployments which are not part of the logical unit being executed. In 
> >> the end, even though we know we are wasting some execution time, it 
> >> turns out not to be all that much at all.. and isn't yet worthy of any 
> >> kind of optimization or special attention. 
> >> 
> >> So right now our (~2min) compile+unit test runs every commit and only 
> >> runs Junit tests. 
> > 
> > 2 Minutes..Ok how many time is "wasted"  (timestamper plugin and the 
> mojo 
> > execution in Jenkins if you you are using maven job type can help here) 
> > BTW: How many modules does you project contains of? 
>
>
> Please see above for timing calculation process and results. A typical 
> project for us has 25 Maven modules. 
>
>
> >> Our (~8min) compile+integration test runs almost 
> > 
> > You might run jobs in parallel ? 
>
>
> It would be kind of crummy if we burned 8 minutes on integration test 
> if a 2 minute unit test would have aborted the build pipeline 
> previously. Our integration tests do not run the unit tests. Our user 
> acceptance tests do not run either the integration or unit tests. We 
> basically check out the project, update the version to be 
> 1.0.$BUILD_NUMBER, run the unit tests, and if they pass we push the 
> branch to GitLab. That kicks off a ton of compliance jobs, all in 
> parallel (yaay!) And then after those all pass, we go to integration 
> test stage. This stage is just running our Arquillian tests, and given 
> how costly this phase and the phases after it is in time and 
> resources, we go back down to blocking pipeline on this job. 
>
>
> >> Our (~15min) compile+user acceptance test runs 
> >> every day and only runs Selenium tests. Then we have lots of on the 
> >> side jobs which ensure legal compliance, code coverage, file encoding 
> >> fixes, code style fixes, static analysis, etc etc, which run hourly, 
> >> daily, or weekly, and are mostly fast (<5min). 
> >> 
> >> We are exploring Jenkins Pipeline in order to chain, both sequential 
> >> where necessary and then parallel where it makes sense, these discrete 
> >> jobs in such a way that we will have a continuous delivery available 
> >> at the end which has run the full gauntlet of all our testing and best 
> >> practices verification for every commit without doing unnecessary and 
> >> expensive steps, failing the pipeline as soon as possible. Each commit 
> >> triggers a build which triggers a new git branch which is passed to 
> >> subsequent phases, 
> >> 
> >> if any stage fails, the branch is deleted and makes 
> >> no further progress. Additionally, we are trying to leverage separate 
> >> Jenkins jobs for each discrete job so that we can trigger it on demand 
> >> in order to do some quick checking, we also find that we can get 
> >> easier cross-project reuse using that technique. We're using Git, 
> >> Apache Maven, Jenkins CI, Jacoco, Arquillian, SonarQube, Checkstyle, 
> >> PMD, FindBugs, and many others. 
> >> 
> >> There are only two critiques we can find with this style: 1) the 
> >> aforementioned modest amount of wasted generate-resources and compile 
> >> phases across multiple jobs in the same pipeline, 
> >> and 2) each phase is 
> >> producing artifacts to be tested and not reusing the ones built and 
> >> verified at previous stages, thus there may be a hypothetical 
> >> difference between what different stages are actually testing, though 
> >> we think the risk of this is not consequential. 
> > 
> > 
> > You could create in Jenkins Maven repositories to provided the artifacts 
> to 
> > other steps...Or can package them by Jenkins an give them to the next 
> > step... 
> > So it sounds you don't trust your version control ? If you checkout the 
> same 
> > sha1 you will get always the same state? And if you build from that you 
> will 
> > always get the same result didn't you ? Or I could say you don't trust 
> the 
> > build system to create the same result from the same source state ? 
>
>
> I like the idea, I would also consider using the archive and unarchive 
> options of Jenkins Pipeline. The problem to me seems to be how to run 
> unit and integration tests on previously built .jar files. Like, skip 
> the compile phase for src/main/java and just run src/test/java and 
> src/it/java against some Jenkins' archived version of the previously 
> compiled .jar. It didn't seem possible to me. We could definitely skip 
> packaging the web applications which are used for the user acceptance 
> tests using Selenium, but we don't use Docker as it isn't actually 
> available on our target platform. 
>
>
> >> This technique 
> >> otherwise seems like a holy grail to me and the team. I welcome ideas 
> >> about it. 
> > 
> > If it is already the hole grail I can't say anything about it... 
>
> :-D 
>

-- 
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/cf76735f-df42-4b5f-a05e-ba6e1400c22d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to