JavaScript + Jenkins = Winning!

Eric Wendelin
Eric WendelinPrincipal Engineer at Gradle Inc.
© 2011 @eriwen
Eric Wendelin
Blog: eriwen.com
Twitter: @eriwen
Code: git.io/eric
(      °□°                ɐpuǝƃV

• Tools that help your JS not suck
• How to create a build for your client-side
  code
• Automation with Jenkins
• The hard part
• Unicorns
The Situation
Programmers are expensive

Must prevent them from doing
 things below their pay grade
How do you do that?

Automate tasks that don't
require mental participation
Programmers are clever

 Must force them to write
code for the next engineer
Better for the next engineer?

Must enforce conventions
 that make the code more
      understandable
?
First things first

We need automation tools
Static Analysis
JavaScript + Jenkins = Winning!
JSHint


jshint file.js --config config.json




          jshint.org
CSSLint


csslint --rules=rule,rule2 file.css




          csslint.net
Testing
Unit-testing

• Jasmine (pivotal.github.com/jasmine)
• QUnit (docs.jquery.com/QUnit)
• YUI Test (yuilibrary.com/yui/docs/test)
• Mocha (visionmedia.github.com/mocha)
• Lots of others...
PhantomJS


phantomjs your-runner.js file.html




        phantomjs.org
Xvfb
JsTestDriver


java -jar JsTestDriver.jar --tests all




code.google.com/p/js-test-driver/
Functional testing

• Selenium (seleniumhq.org)
• CasperJS (github.com/n1k0/casperjs)
• zombie.js (zombie.labnotes.org)
Documentation
jsduck


jsduck src/js --output target/docs




github.com/senchalabs/jsduck
Page Speed
Closure Compiler

 java -jar compiler.jar --js file.js
     --js_output_file file.min.js



code.google.com/closure/compiler
YUI Compressor

     java -jar yuicompressor.jar -o
         '.css$:-min.css' *.css



developer.yahoo.com/yui/compressor
Combine and gzip

cat file1.js file2.js >> combined.js
gzip combined.js
mv combined.js{.gz,}
?
The Build
Build Steps

• Static Analysis
• File Optimization (for production)
• Automated Testing
• Documentation
• Report Results
Gradle
Don't have a build?
html5boilerplate.com
Introducing the Gradle
      Web Suite
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!
git.io/gradlejs
git.io/gradlecss
git.io/gradlehtml
jenkins-ci.org
Crazy Simple Setup

wget http://mirrors.jenkins-
ci.org/war/latest/jenkins.war


java -jar jenkins.war
Source Control Plugins
• Git
• Mercurial
• Bazaar
• Subversion
• CVS
• Lots more...
Build System Plugins

• Gradle
• Maven
• Ant
• Rake
• Lots more...
Runs pretty much
       everything
• Ruby
• Python
• NodeJS
• Groovy
• Shell
• Lots more...
Build Health Plugins

• Violations Plugin
• Selenium Plugin
• Cobertura Plugin
• Task Scanner Plugin
• ...and, of course, Chuck Norris Plugin
The really hard part
5 Stages of JS CI
• No build server
• Pulls from source control and runs metrics
• Runs unit tests and fails build if necessary.
  One button push to staging/production env
• Unit and acceptance tests run. Metrics
  affect build stability
• Code deployed on every push that passes
  the build
Helpful Tweeters
@ariyahidayat works on #phantomjs
@gseguin helped me with QUnit/Phantom
@builddoctor general CI advocate/guru
@jfroma does cool #jsci on Windows
@jamescarr could've given this talk well
One more thing...
JavaScript + Jenkins = Winning!
LCOV to Cobertura converter


     git.io/ltc
JavaScript + Jenkins = Winning!
Code at: git.io/eric

Blog: eriwen.com
Twitter: @eriwen
1 of 55

More Related Content

What's hot(20)

Source Code Analysis with SASTSource Code Analysis with SAST
Source Code Analysis with SAST
Blueinfy Solutions2.8K views
JunitJunit
Junit
FAROOK Samath6.9K views
Manual testing pptManual testing ppt
Manual testing ppt
Santosh Maranabasari35.8K views
JUnit- A Unit Testing FrameworkJUnit- A Unit Testing Framework
JUnit- A Unit Testing Framework
Onkar Deshpande7.6K views
Writing and using Hamcrest MatchersWriting and using Hamcrest Matchers
Writing and using Hamcrest Matchers
Shai Yallin47.8K views
WebGL and three.jsWebGL and three.js
WebGL and three.js
Anton Narusberg3.8K views
Unit Testing in JavaUnit Testing in Java
Unit Testing in Java
Ahmed M. Gomaa1.9K views
Selenium DemoSelenium Demo
Selenium Demo
ankitslide5.5K views
DVWA BruCON WorkshopDVWA BruCON Workshop
DVWA BruCON Workshop
testuser1223890 views
Testing web applicationTesting web application
Testing web application
jayashreesaravanan19.3K views
The Cross Site Scripting GuideThe Cross Site Scripting Guide
The Cross Site Scripting Guide
Daisuke_Dan2.3K views
Vue.js で XSSVue.js で XSS
Vue.js で XSS
tobaru_yuta7.2K views
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話
ushiboy22.4K views
Selenium ConceptsSelenium Concepts
Selenium Concepts
Swati Bansal13.1K views
2. Softare QA roles and responsibilities2. Softare QA roles and responsibilities
2. Softare QA roles and responsibilities
Chandra Maddigapu2.2K views
Json vs Gson vs JacksonJson vs Gson vs Jackson
Json vs Gson vs Jackson
Vinaykumar Hebballi19.1K views

Similar to JavaScript + Jenkins = Winning!(20)

2015 jcconf-h2s-devops-practice2015 jcconf-h2s-devops-practice
2015 jcconf-h2s-devops-practice
Hochi Chuang470 views
Quick start with AngularJSQuick start with AngularJS
Quick start with AngularJS
Iuliia Baranova800 views
Testing with CodeceptionTesting with Codeception
Testing with Codeception
Jeremy Coates20.6K views
Guides To Analyzing WebKit PerformanceGuides To Analyzing WebKit Performance
Guides To Analyzing WebKit Performance
National Cheng Kung University6.5K views
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN Stack
Troy Miles2.2K views
Static Code Analysis PHP[tek] 2023Static Code Analysis PHP[tek] 2023
Static Code Analysis PHP[tek] 2023
Scott Keck-Warren694 views
Selenium practicalSelenium practical
Selenium practical
Ruslan Strazhnyk2.6K views
Angular 2 overviewAngular 2 overview
Angular 2 overview
Jesse Warden3.8K views
Spring insight   what just happenedSpring insight   what just happened
Spring insight what just happened
Boulder Java User's Group2.2K views
Continuous Delivery, Continuous Integration Continuous Delivery, Continuous Integration
Continuous Delivery, Continuous Integration
Amazon Web Services3.6K views
Let's run JavaScript EverywhereLet's run JavaScript Everywhere
Let's run JavaScript Everywhere
Tom Croucher3.5K views
Behat Workshop at WeLovePHPBehat Workshop at WeLovePHP
Behat Workshop at WeLovePHP
Marcos Quesada4K views

More from Eric Wendelin(10)

What's new in Gradle 4.0What's new in Gradle 4.0
What's new in Gradle 4.0
Eric Wendelin1.9K views
Building the Web with GradleBuilding the Web with Gradle
Building the Web with Gradle
Eric Wendelin617 views
Gradle by ExampleGradle by Example
Gradle by Example
Eric Wendelin1.6K views
Gradle 3.0: Unleash the Daemon!Gradle 3.0: Unleash the Daemon!
Gradle 3.0: Unleash the Daemon!
Eric Wendelin2.8K views
Test your Javascript! v1.1Test your Javascript! v1.1
Test your Javascript! v1.1
Eric Wendelin10.7K views
Intro to HadoopIntro to Hadoop
Intro to Hadoop
Eric Wendelin3K views
Javascript Stacktrace IgniteJavascript Stacktrace Ignite
Javascript Stacktrace Ignite
Eric Wendelin1.2K views
Apache Avro and YouApache Avro and You
Apache Avro and You
Eric Wendelin4.2K views
Testing Hadoop jobs with MRUnitTesting Hadoop jobs with MRUnit
Testing Hadoop jobs with MRUnit
Eric Wendelin11.6K views

Recently uploaded(20)

METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...
METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...
Prity Khastgir IPR Strategic India Patent Attorney Amplify Innovation24 views
[2023] Putting the R! in R&D.pdf[2023] Putting the R! in R&D.pdf
[2023] Putting the R! in R&D.pdf
Eleanor McHugh36 views
Web Dev - 1 PPT.pdfWeb Dev - 1 PPT.pdf
Web Dev - 1 PPT.pdf
gdsczhcet49 views

JavaScript + Jenkins = Winning!