How Build Infrastructure Powers the Node.js Foundation

How Build Infrastructure Powers the
Node.js Foundation
Gibson Fahnestock, IBM
Me
• Gibson Fahnestock, @gibfahn
• Node team at IBM Runtimes
• Node.js core collaborator
• @nodejs/{Build,Release,Moderation,CitGM…}
• gibfahn @gibfahn IRC: gibfahn ✉️ gibfahn@gmail.com
The Plan
1. How do we do things today?
2. What are we working towards?
3. How you can get involved?
1
The Plan
Johan Bergström
@jbergstroem
João Reis
@joaocgreis
Rod Vagg
@rvagg
Gibson Fahnestock
@gibfahn
Refael Ackermann
@refack
Phillip Johnsen
@phillipj
Rich Trott
@trott
Myles Borins
@thealphanerd
Kunal Pathak
@kunalspathak
Michele Capra
@piccoloaiutante
Hans Kristian Flaatten
@Starefossen
Michael Dawson
@mhdawson
Wyatt Preul
@geek
George Adams
@gdams
Johan Bergström
@jbergstroem
João Reis
@joaocgreis
Rod Vagg
@rvagg
Gibson Fahnestock
@gibfahn
Refael Ackermann
@refack
Phillip Johnsen
@phillipj
Rich Trott
@trott
Myles Borins
@thealphanerd
Kunal Pathak
@kunalspathak
Michele Capra
@piccoloaiutante
Hans Kristian Flaatten
@Starefossen
Michael Dawson
@mhdawson
Wyatt Preul
@geek
George Adams
@gdams
Johan Bergström
@jbergstroem
João Reis
@joaocgreis
Rod Vagg
@rvagg
Gibson Fahnestock
@gibfahn
Refael Ackermann
@refack
Phillip Johnsen
@phillipj
Rich Trott
@trott
Myles Borins
@thealphanerd
Kunal Pathak
@kunalspathak
Michele Capra
@piccoloaiutante
Hans Kristian Flaatten
@Starefossen
Michael Dawson
@mhdawson
Wyatt Preul
@geek
George Adams
@gdams
• Support for Node.js and other projects.
• Which requires:
• Wide platform coverage
• High availability of build farms.
• Automation and documentation to reduce bus factor
• We have no 24/7 on-call staff!
The Mission
• Build
• Test
• Benchmark
• Release
• Host
A message to our sponsors
Community
Contributions:
Community
Contributions:
Community Contributions:
Platform coverage
• 166 machines
• 99 x86_64
• 54 ARM (arm6, arm7, arm8)
• 19 Power (BE and LE) and z
• Breadth of OS coverage
• Linux, Win, macOS
• AIX, SmartOS, FreeBSD
• node-test-commit runs on 44
platforms
Platform coverage
• 166 machines
• 99 x86_64
• 54 ARM (arm6, arm7, arm8)
• 19 Power (BE and LE) and z
• Breadth of OS coverage
• Linux, Win, macOS
• AIX, SmartOS, FreeBSD
• node-test-commit runs on 44
platforms
Platform coverage
• Easy for collaborators to
get started.
Tech we use
• Jenkins
• Cloud provisioning (e.g. OpenStack)
• Ansible
jenkins.io
Tech we use
• Jenkins
• Cloud provisioning (e.g. OpenStack)
• Ansible
jenkins.io
Tech we use
• Jenkins
• Cloud provisioning (e.g. OpenStack)
• Ansible
jenkins.io
Tech we use
• Jenkins
• Cloud provisioning (e.g. OpenStack)
• Ansible
jenkins.io
Tech we use
• Jenkins
• Cloud provisioning (e.g. OpenStack)
• Ansible
jenkins.io
Tech we use
• Jenkins
• Cloud provisioning (e.g. OpenStack)
• Ansible
Tech we use
• Jenkins
• Cloud provisioning (e.g. OpenStack)
• Ansible
Jenkins
• Public test CI:
• https://ci.nodejs.org
• Restricted release CI:
• https://ci-release.nodejs.org
• Material design theme!!!
Jenkins - teams
• Access controlled by Github teams
• Per-job accesses
• Core, ChakraCore, Libuv, CitGM
• Streams, Llnode, node-report
30 minute builds
• Build and test on all platforms in 30 minutes.
• Easier on a LinuxOne server than a Raspberry Pi!
• Problem: need fast builds
• Solutions:
• File caching
• ccache
• Fanning
30 minute builds
• Build and test on all platforms in 30 minutes.
• Easier on a LinuxOne server than a Raspberry Pi!
• Problem: need fast builds
• Solutions:
• File caching
• ccache
• Fanning
30 minute builds
• Build and test on all platforms in 30 minutes.
• Easier on a LinuxOne server than a Raspberry Pi!
• Problem: need fast builds
• Solutions:
• File caching
• ccache
• Fanning
30 minute builds
• Build and test on all platforms in 30 minutes.
• Easier on a LinuxOne server than a Raspberry Pi!
• Problem: need fast builds
• Solutions:
• File caching
• ccache
• Fanning
Ansible
• One command to set up any new machine
• Define our own scripts that others can rely on
• Want to build node? Go to:
• https://github.com/nodejs/build/tree/master/ansible
2. The Quest
•Make Build more accessible
2
Jenkins pipelines
• Some of our jobs are a little…
Jenkins pipelines
… complex
• Problem: Few people have access,
hard to review
Jenkins pipelines
• Problem: Few people have access,
hard to review
• Solution:
• Use pipelines!
Jenkins pipelines
• Case study: what is wrong with this code?
Jenkins pipelines
• Case study: what is wrong with this code?
6.0.0 -> 6
10.0.0 -> 1
Jenkins pipelines
• Problem: we don’t have many pipeline experts
• Solution: amazing people from the community show up to help
out!
• Great way to get involved (nodejs/build#838).
The mistake of the machine
• Mysterious build failures
The mistake of the machine
The Dream
• Problem: How do we give people the confidence to fix
machines, in architectures they’re unfamiliar with?
• Solution: One-click “destroy and reprovision machine”
Fix Everything
Sponsors page
• Currently acknowledged on the Build WG README.
• Want to do something like
https://adoptopenjdk.net/sponsors.html
• Only basic html knowledge required! nodejs/nodejs.org#1257
• Get involved!
3
The Dream: sponsors page
Current challenges
• macOS – automating the setup
• Ansible – platform support and testing
• Jenkins– moving to pipelines
• Come get involved!
Questions?
1 of 42

Recommended

Node.js what's next (Index 2018) by
Node.js what's next (Index 2018)Node.js what's next (Index 2018)
Node.js what's next (Index 2018)Gibson Fahnestock
2.2K views32 slides
Continuous Delivery with Jenkins and Wildfly (2014) by
Continuous Delivery with Jenkins and Wildfly (2014)Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Tracy Kennedy
41.1K views61 slides
Git and GitHub for Documentation by
Git and GitHub for DocumentationGit and GitHub for Documentation
Git and GitHub for DocumentationAnne Gentle
57.5K views39 slides
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston... by
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...Puppet
1.7K views32 slides
Master Continuous Delivery with CloudBees Jenkins Platform by
Master Continuous Delivery with CloudBees Jenkins PlatformMaster Continuous Delivery with CloudBees Jenkins Platform
Master Continuous Delivery with CloudBees Jenkins Platformdcjuengst
32.3K views60 slides
The Evolution of Glance API: On the Way From v1 to v3 by
The Evolution of Glance API: On the Way From v1 to v3The Evolution of Glance API: On the Way From v1 to v3
The Evolution of Glance API: On the Way From v1 to v3Brian Rosmaita
530 views52 slides

More Related Content

What's hot

JHipster Conf 2019 English keynote by
JHipster Conf 2019 English keynoteJHipster Conf 2019 English keynote
JHipster Conf 2019 English keynoteJulien Dubois
1.7K views24 slides
Devops For Drupal by
Devops  For DrupalDevops  For Drupal
Devops For DrupalKris Buytaert
10.6K views43 slides
Introduction to DevOps by
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOpsJulien Pivotto
3.8K views68 slides
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 by
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 Tikal Knowledge
2.5K views79 slides
Evolution of NuGet by
Evolution of NuGetEvolution of NuGet
Evolution of NuGetJeff Handley
305 views34 slides
Building and Deploying MediaSalsa, a drupal-based DAM as a Service by
Building and Deploying MediaSalsa, a drupal-based DAM as a ServiceBuilding and Deploying MediaSalsa, a drupal-based DAM as a Service
Building and Deploying MediaSalsa, a drupal-based DAM as a ServiceJulien Pivotto
4.8K views32 slides

What's hot(20)

JHipster Conf 2019 English keynote by Julien Dubois
JHipster Conf 2019 English keynoteJHipster Conf 2019 English keynote
JHipster Conf 2019 English keynote
Julien Dubois1.7K views
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 by Tikal Knowledge
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
Tikal Knowledge2.5K views
Building and Deploying MediaSalsa, a drupal-based DAM as a Service by Julien Pivotto
Building and Deploying MediaSalsa, a drupal-based DAM as a ServiceBuilding and Deploying MediaSalsa, a drupal-based DAM as a Service
Building and Deploying MediaSalsa, a drupal-based DAM as a Service
Julien Pivotto4.8K views
Create great cncf user base from lessons learned from other open source com... by Krishna-Kumar
Create great cncf user base from   lessons learned from other open source com...Create great cncf user base from   lessons learned from other open source com...
Create great cncf user base from lessons learned from other open source com...
Krishna-Kumar 247 views
LASUG Online: Introduction to Docker and Docker Tools by Vasiliy Fomichev
LASUG Online: Introduction to Docker and Docker ToolsLASUG Online: Introduction to Docker and Docker Tools
LASUG Online: Introduction to Docker and Docker Tools
Vasiliy Fomichev991 views
SUGCON 2015: Docker Containers and Sitecore by Vasiliy Fomichev
SUGCON 2015: Docker Containers and Sitecore SUGCON 2015: Docker Containers and Sitecore
SUGCON 2015: Docker Containers and Sitecore
Vasiliy Fomichev2.4K views
Deploying Apps on OpenStack by Anne Gentle
Deploying Apps on OpenStackDeploying Apps on OpenStack
Deploying Apps on OpenStack
Anne Gentle2.5K views
Smarter deployments with octopus deploy by Thibaud Gravrand
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deploy
Thibaud Gravrand1.7K views
Provisioning environments. A simplistic approach by Eder Roger Souza
Provisioning  environments. A simplistic approachProvisioning  environments. A simplistic approach
Provisioning environments. A simplistic approach
Eder Roger Souza1.6K views
PuppetConf 2016: Keynote: Pulling the Strings to Containerize Your Life - Sco... by Puppet
PuppetConf 2016: Keynote: Pulling the Strings to Containerize Your Life - Sco...PuppetConf 2016: Keynote: Pulling the Strings to Containerize Your Life - Sco...
PuppetConf 2016: Keynote: Pulling the Strings to Containerize Your Life - Sco...
Puppet403 views
Why Git Sucks and you'll use it anyways by Carlos Taborda
Why Git Sucks and you'll use it anywaysWhy Git Sucks and you'll use it anyways
Why Git Sucks and you'll use it anyways
Carlos Taborda8.9K views
Using Grunt with Drupal by arithmetric
Using Grunt with DrupalUsing Grunt with Drupal
Using Grunt with Drupal
arithmetric1.4K views
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code by Brian Dawson
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-CodeSD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code
Brian Dawson3.1K views

Similar to How Build Infrastructure Powers the Node.js Foundation

Who *is* Jenkins? by
Who *is* Jenkins?Who *is* Jenkins?
Who *is* Jenkins?Andrew Bayer
1.9K views47 slides
Freifunk Munich - How to scale Jitsi by
Freifunk Munich - How to scale JitsiFreifunk Munich - How to scale Jitsi
Freifunk Munich - How to scale JitsiAnnika Wickert
4.6K views16 slides
Stash – Taking Expedia to New Heights - David Williams and Christopher Pepe by
Stash – Taking Expedia to New Heights - David Williams and Christopher PepeStash – Taking Expedia to New Heights - David Williams and Christopher Pepe
Stash – Taking Expedia to New Heights - David Williams and Christopher PepeAtlassian
1.5K views38 slides
OpenStack Doc Overview for Boot Camp by
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampAnne Gentle
7.6K views32 slides
Dibi Conference 2012 by
Dibi Conference 2012Dibi Conference 2012
Dibi Conference 2012Scott Rutherford
2.1K views66 slides
Sonian, Open Source and Sensu by
Sonian, Open Source and SensuSonian, Open Source and Sensu
Sonian, Open Source and SensuPete Cheslock
1.3K views9 slides

Similar to How Build Infrastructure Powers the Node.js Foundation(20)

Who *is* Jenkins? by Andrew Bayer
Who *is* Jenkins?Who *is* Jenkins?
Who *is* Jenkins?
Andrew Bayer1.9K views
Freifunk Munich - How to scale Jitsi by Annika Wickert
Freifunk Munich - How to scale JitsiFreifunk Munich - How to scale Jitsi
Freifunk Munich - How to scale Jitsi
Annika Wickert4.6K views
Stash – Taking Expedia to New Heights - David Williams and Christopher Pepe by Atlassian
Stash – Taking Expedia to New Heights - David Williams and Christopher PepeStash – Taking Expedia to New Heights - David Williams and Christopher Pepe
Stash – Taking Expedia to New Heights - David Williams and Christopher Pepe
Atlassian1.5K views
OpenStack Doc Overview for Boot Camp by Anne Gentle
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot Camp
Anne Gentle7.6K views
Sonian, Open Source and Sensu by Pete Cheslock
Sonian, Open Source and SensuSonian, Open Source and Sensu
Sonian, Open Source and Sensu
Pete Cheslock1.3K views
Dev ops lessons learned - Michael Collins by Devopsdays
Dev ops lessons learned  - Michael CollinsDev ops lessons learned  - Michael Collins
Dev ops lessons learned - Michael Collins
Devopsdays2.9K views
Everyone wants (someone else) to do it: writing documentation for open source... by Jody Garnett
Everyone wants (someone else) to do it: writing documentation for open source...Everyone wants (someone else) to do it: writing documentation for open source...
Everyone wants (someone else) to do it: writing documentation for open source...
Jody Garnett925 views
Tooling for the JavaScript Era by martinlippert
Tooling for the JavaScript EraTooling for the JavaScript Era
Tooling for the JavaScript Era
martinlippert619 views
PHP Unconference Continuous Integration by Nils Hofmeister
PHP Unconference Continuous IntegrationPHP Unconference Continuous Integration
PHP Unconference Continuous Integration
Nils Hofmeister792 views
DevOpsCon 2015 - DevOps in Mobile Games by Andreas Katzig
DevOpsCon 2015 - DevOps in Mobile GamesDevOpsCon 2015 - DevOps in Mobile Games
DevOpsCon 2015 - DevOps in Mobile Games
Andreas Katzig190 views
Building Your App SDK with Swift by Jordan Yaker
Building Your App SDK with SwiftBuilding Your App SDK with Swift
Building Your App SDK with Swift
Jordan Yaker433 views
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench by Howard Greenberg
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg220 views
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno... by DevDay.org
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
DevDay.org391 views
OSDC 2013 | Introduction into Chef by Andy Hawkins by NETWAYS
OSDC 2013 | Introduction into Chef by Andy HawkinsOSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy Hawkins
NETWAYS28 views
Don't get blamed for your choices - Techorama 2019 by Hannes Lowette
Don't get blamed for your choices - Techorama 2019Don't get blamed for your choices - Techorama 2019
Don't get blamed for your choices - Techorama 2019
Hannes Lowette466 views
Greenfield Java 2013 by Will Iverson
Greenfield Java 2013Greenfield Java 2013
Greenfield Java 2013
Will Iverson1.7K views
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER by Indrajit Poddar
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERContinuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar1K views
Build software like a bag of marbles, not a castle of LEGO® by Hannes Lowette
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette142 views

Recently uploaded

360 graden fabriek by
360 graden fabriek360 graden fabriek
360 graden fabriekinfo33492
165 views25 slides
predicting-m3-devopsconMunich-2023.pptx by
predicting-m3-devopsconMunich-2023.pptxpredicting-m3-devopsconMunich-2023.pptx
predicting-m3-devopsconMunich-2023.pptxTier1 app
8 views24 slides
EV Charging App Case by
EV Charging App Case EV Charging App Case
EV Charging App Case iCoderz Solutions
9 views1 slide
ADDO_2022_CICID_Tom_Halpin.pdf by
ADDO_2022_CICID_Tom_Halpin.pdfADDO_2022_CICID_Tom_Halpin.pdf
ADDO_2022_CICID_Tom_Halpin.pdfTomHalpin9
5 views33 slides
Introduction to Maven by
Introduction to MavenIntroduction to Maven
Introduction to MavenJohn Valentino
6 views10 slides
Quality Engineer: A Day in the Life by
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the LifeJohn Valentino
7 views18 slides

Recently uploaded(20)

360 graden fabriek by info33492
360 graden fabriek360 graden fabriek
360 graden fabriek
info33492165 views
predicting-m3-devopsconMunich-2023.pptx by Tier1 app
predicting-m3-devopsconMunich-2023.pptxpredicting-m3-devopsconMunich-2023.pptx
predicting-m3-devopsconMunich-2023.pptx
Tier1 app8 views
ADDO_2022_CICID_Tom_Halpin.pdf by TomHalpin9
ADDO_2022_CICID_Tom_Halpin.pdfADDO_2022_CICID_Tom_Halpin.pdf
ADDO_2022_CICID_Tom_Halpin.pdf
TomHalpin95 views
Quality Engineer: A Day in the Life by John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino7 views
Top-5-production-devconMunich-2023-v2.pptx by Tier1 app
Top-5-production-devconMunich-2023-v2.pptxTop-5-production-devconMunich-2023-v2.pptx
Top-5-production-devconMunich-2023-v2.pptx
Tier1 app8 views
JioEngage_Presentation.pptx by admin125455
JioEngage_Presentation.pptxJioEngage_Presentation.pptx
JioEngage_Presentation.pptx
admin1254558 views
Bootstrapping vs Venture Capital.pptx by Zeljko Svedic
Bootstrapping vs Venture Capital.pptxBootstrapping vs Venture Capital.pptx
Bootstrapping vs Venture Capital.pptx
Zeljko Svedic15 views
Introduction to Git Source Control by John Valentino
Introduction to Git Source ControlIntroduction to Git Source Control
Introduction to Git Source Control
John Valentino7 views
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P... by NimaTorabi2
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
NimaTorabi216 views
Transport Management System - Shipment & Container Tracking by Freightoscope
Transport Management System - Shipment & Container TrackingTransport Management System - Shipment & Container Tracking
Transport Management System - Shipment & Container Tracking
Freightoscope 5 views
Automated Testing of Microsoft Power BI Reports by RTTS
Automated Testing of Microsoft Power BI ReportsAutomated Testing of Microsoft Power BI Reports
Automated Testing of Microsoft Power BI Reports
RTTS10 views
How Workforce Management Software Empowers SMEs | TraQSuite by TraQSuite
How Workforce Management Software Empowers SMEs | TraQSuiteHow Workforce Management Software Empowers SMEs | TraQSuite
How Workforce Management Software Empowers SMEs | TraQSuite
TraQSuite6 views
FOSSLight Community Day 2023-11-30 by Shane Coughlan
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30
Shane Coughlan7 views
Electronic AWB - Electronic Air Waybill by Freightoscope
Electronic AWB - Electronic Air Waybill Electronic AWB - Electronic Air Waybill
Electronic AWB - Electronic Air Waybill
Freightoscope 5 views

How Build Infrastructure Powers the Node.js Foundation

  • 1. How Build Infrastructure Powers the Node.js Foundation Gibson Fahnestock, IBM
  • 2. Me • Gibson Fahnestock, @gibfahn • Node team at IBM Runtimes • Node.js core collaborator • @nodejs/{Build,Release,Moderation,CitGM…} • gibfahn @gibfahn IRC: gibfahn ✉️ gibfahn@gmail.com
  • 3. The Plan 1. How do we do things today? 2. What are we working towards? 3. How you can get involved? 1
  • 5. Johan Bergström @jbergstroem João Reis @joaocgreis Rod Vagg @rvagg Gibson Fahnestock @gibfahn Refael Ackermann @refack Phillip Johnsen @phillipj Rich Trott @trott Myles Borins @thealphanerd Kunal Pathak @kunalspathak Michele Capra @piccoloaiutante Hans Kristian Flaatten @Starefossen Michael Dawson @mhdawson Wyatt Preul @geek George Adams @gdams
  • 6. Johan Bergström @jbergstroem João Reis @joaocgreis Rod Vagg @rvagg Gibson Fahnestock @gibfahn Refael Ackermann @refack Phillip Johnsen @phillipj Rich Trott @trott Myles Borins @thealphanerd Kunal Pathak @kunalspathak Michele Capra @piccoloaiutante Hans Kristian Flaatten @Starefossen Michael Dawson @mhdawson Wyatt Preul @geek George Adams @gdams
  • 7. Johan Bergström @jbergstroem João Reis @joaocgreis Rod Vagg @rvagg Gibson Fahnestock @gibfahn Refael Ackermann @refack Phillip Johnsen @phillipj Rich Trott @trott Myles Borins @thealphanerd Kunal Pathak @kunalspathak Michele Capra @piccoloaiutante Hans Kristian Flaatten @Starefossen Michael Dawson @mhdawson Wyatt Preul @geek George Adams @gdams
  • 8. • Support for Node.js and other projects. • Which requires: • Wide platform coverage • High availability of build farms. • Automation and documentation to reduce bus factor • We have no 24/7 on-call staff! The Mission • Build • Test • Benchmark • Release • Host
  • 9. A message to our sponsors
  • 12. Platform coverage • 166 machines • 99 x86_64 • 54 ARM (arm6, arm7, arm8) • 19 Power (BE and LE) and z • Breadth of OS coverage • Linux, Win, macOS • AIX, SmartOS, FreeBSD • node-test-commit runs on 44 platforms
  • 13. Platform coverage • 166 machines • 99 x86_64 • 54 ARM (arm6, arm7, arm8) • 19 Power (BE and LE) and z • Breadth of OS coverage • Linux, Win, macOS • AIX, SmartOS, FreeBSD • node-test-commit runs on 44 platforms
  • 14. Platform coverage • Easy for collaborators to get started.
  • 15. Tech we use • Jenkins • Cloud provisioning (e.g. OpenStack) • Ansible jenkins.io
  • 16. Tech we use • Jenkins • Cloud provisioning (e.g. OpenStack) • Ansible jenkins.io
  • 17. Tech we use • Jenkins • Cloud provisioning (e.g. OpenStack) • Ansible jenkins.io
  • 18. Tech we use • Jenkins • Cloud provisioning (e.g. OpenStack) • Ansible jenkins.io
  • 19. Tech we use • Jenkins • Cloud provisioning (e.g. OpenStack) • Ansible jenkins.io
  • 20. Tech we use • Jenkins • Cloud provisioning (e.g. OpenStack) • Ansible
  • 21. Tech we use • Jenkins • Cloud provisioning (e.g. OpenStack) • Ansible
  • 22. Jenkins • Public test CI: • https://ci.nodejs.org • Restricted release CI: • https://ci-release.nodejs.org • Material design theme!!!
  • 23. Jenkins - teams • Access controlled by Github teams • Per-job accesses • Core, ChakraCore, Libuv, CitGM • Streams, Llnode, node-report
  • 24. 30 minute builds • Build and test on all platforms in 30 minutes. • Easier on a LinuxOne server than a Raspberry Pi! • Problem: need fast builds • Solutions: • File caching • ccache • Fanning
  • 25. 30 minute builds • Build and test on all platforms in 30 minutes. • Easier on a LinuxOne server than a Raspberry Pi! • Problem: need fast builds • Solutions: • File caching • ccache • Fanning
  • 26. 30 minute builds • Build and test on all platforms in 30 minutes. • Easier on a LinuxOne server than a Raspberry Pi! • Problem: need fast builds • Solutions: • File caching • ccache • Fanning
  • 27. 30 minute builds • Build and test on all platforms in 30 minutes. • Easier on a LinuxOne server than a Raspberry Pi! • Problem: need fast builds • Solutions: • File caching • ccache • Fanning
  • 28. Ansible • One command to set up any new machine • Define our own scripts that others can rely on • Want to build node? Go to: • https://github.com/nodejs/build/tree/master/ansible
  • 29. 2. The Quest •Make Build more accessible 2
  • 30. Jenkins pipelines • Some of our jobs are a little…
  • 31. Jenkins pipelines … complex • Problem: Few people have access, hard to review
  • 32. Jenkins pipelines • Problem: Few people have access, hard to review • Solution: • Use pipelines!
  • 33. Jenkins pipelines • Case study: what is wrong with this code?
  • 34. Jenkins pipelines • Case study: what is wrong with this code? 6.0.0 -> 6 10.0.0 -> 1
  • 35. Jenkins pipelines • Problem: we don’t have many pipeline experts • Solution: amazing people from the community show up to help out! • Great way to get involved (nodejs/build#838).
  • 36. The mistake of the machine • Mysterious build failures
  • 37. The mistake of the machine
  • 38. The Dream • Problem: How do we give people the confidence to fix machines, in architectures they’re unfamiliar with? • Solution: One-click “destroy and reprovision machine” Fix Everything
  • 39. Sponsors page • Currently acknowledged on the Build WG README. • Want to do something like https://adoptopenjdk.net/sponsors.html • Only basic html knowledge required! nodejs/nodejs.org#1257 • Get involved! 3
  • 41. Current challenges • macOS – automating the setup • Ansible – platform support and testing • Jenkins– moving to pipelines • Come get involved!

Editor's Notes

  1. Hey everyone, My name is Gibson, and today I’m going to talk about the Node Build Working Group. Where we are today, where we’re trying to get to, and how you can help. If you have any questions, criticisms, can’t understand my accent, or spot any spelling mistakes during this talk, feel free to put up a hand at any point. Apologies in advance for my voice, Stephen and Myles had some banging beats last night. TODO(gib): Enunciate
  2. Let’s start with my favourite part of the talk, talking about me. My name is Gibson Fahnestock. I work for IBM in the Runtimes Node team. We do a lot of work in the community, and we also ship our own build of Node.js. We recently released a build of Node that runs on z/OS, and we’re working on getting that upstreamed into the community. So if any of you happen to have a mainframe at home, feel free to try running Node on it! On the community side I’m a core collaborator, and I’m also involved in several of the working groups. If you’re not familiar with Node.js Working Groups, they’re basically specialised task forces that focus on key areas. I’m in Build, Release, Moderation, and CitGM. If you want to learn more about any of these, or anything , feel free to find me online, or even in real life.
  3. The talk is split into three easy-to-digest sections, and I’ve put little numbers at the top, in case you’re counting down the minutes. The first is The Road so Far: how we currently operate and what we can do today. The second is the Road Ahead, what we’re progressing towards, and all the stuff we want to do. The last is how you can get involved. The world of devops can seem forbidding, but it’s actually a really great way to get involved with Open Source, and it’s easier than you think. Unless you already think it’s easy, in which case … (feel free)
  4. (in which case) … feel free to use this angry tweet template. I’ve actually included sample tweets, that could also be used as comments on the Hacker News, for easy flaming.
  5. So this rogues gallery is the current membership of the Build WG. There are two different groups of people in the team, the first … (is the oldtimers)
  6. (the first) … is the oldtimers, these people have been in the build working group for aeons, they built the Node infrastructure up with their bare hands, and they are comfortable getting into the bowels of a machine and digging around to fix problems manually.
  7. The second is the newer members. Everyone here joined the team in the last year. I’ve barely worked out where half the machines are so far. One of the key changes we want to make is to reduce the barrier to entry, and make it easier for people to get involved.
  8. The mission of the WG is to give the rest of the Node foundation everything they need to make sure Node runs everywhere. Kinda like Q branch in a Bond movie, we give you the gadgets, and you go save the world. We provide the infra which allows Node core, and other top level projects like libuv, node-gyp, and llnode, to compile, run test suites and get benchmark results on a bunch of different platforms. We also host nodejs.org, which contains some great node binaries, and there are also some docs or something. There are 570 people in the node foundation, and over 100 collaborators. When you have this many users, high availability is pretty important. Giving a wider group the power to fix issues is key to maintaining an open source build farm, and part of this talk is about how you can manage that.
  9. These are the amazing people who provide infrastructure for the foundation. Let’s just take a moment to thank everyone who helps us make sure Node runs everywhere.
  10. We also have a bunch of Raspberry Pis that were donated by generous community members. It’s great to know that if you’re willing to donate, you too could have a Pi in Rod’s basement
  11. And there they are, one day one of these could have your name on it
  12. Our sponsors allow us to rack up some pretty impressive stats, we currently have over 165 build machines! We also cover a bunch of different platforms. Every PR is tested against almost 45 platforms! Of course that sounds cooler when at least one of the builds are actually green.
  13. That’s better.
  14. All a new collaborator needs to know about running CI is that you go to a URL and fill in a form. However they can also dive into the individual jobs for more control.
  15. There are three things we rely on for high availability. Jenkins You know what, there’s actually a problem with this slide. Jenkins is just not inspiring enough.
  16. Okay, that’s scary
  17. Even worse
  18. Cute, but not crazy enough
  19. Okay, getting good
  20. There we are, that’s what Jenkins should look like. So we use Jenkins for job management, Cloud provisioning for super-fast machine creation,
  21. and Ansible for machine configuration.
  22. The first part is Jenkins. I’m just going to leave that guy there. If you maintain an open-source project you probably use Travis, and Travis is great. But when you need more manual control, and when you want to support a wider range of machines, sometimes you need the raw power and Java heap space errors that only Jenkins can offer. We have two Jenkins instances, a public one anyone can go see, and a private one where we do all the top-secret stuff I’m not allowed to talk about. Oh, and naturally the most important feature is the UI, so no expense was spared on the theme.
  23. Keeping lists of people co-ordinated is a pain, so we just use the Github teams we already have to give each Node group access to their own jobs.
  24. When you’re running build and test for each PR 45 times, and you’re getting 30-50 builds a day, that’s around 2,000, it’s pretty important to be quick. If a machine goes down and we don’t have a spare, everything stops, leading to complaints.
  25. One thing that really makes a difference is to cache everything you can. Cache your downloads and git clones, and use this great tool called ccache to cache compilation results, so if you compile something that is 99% the same, you only have to recompile what you changed. The other thing we do … (is fanning).
  26. (The other thing we do) … is fanning, cause computers get hot too. Okay, mandatory GIF out the way, it is pronounced JIF by the way, I’m happy to debate that with anyone afterwards.
  27. So fanning is when you split out a build and test to run on multiple machines in parallel. So yes, your CI runs may finish really quickly on your mainframes, but on your 1st generation Raspberry Pis they can take a bit longer. But hey, Pis are cheap, and Rod’s basement is large, so we can have plenty of them.
  28. We also want to make the onboarding easier for new Build team members (beards are not required by the way). And one of the key ways we do this is with Infrastructure as Code. If you haven’t used Ansible before, it’s a way of automating machine setup and configuration. Basically it’s like the set of bash scripts you have to set up your machines, but much much more complicated and full-featured. The other great thing about this is that anyone can set up their own machines to build and run Node with the same scripts. I mentioned that we do our own builds of Node at IBM, well we’re working on making our machine configuration use the community one.
  29. And now we come to the second part of our talk, the quest. We want to reduce the barrier to entry, and increase the pool of people who can fix Node infra issues.
  30. So, this is the job that builds Node releases. I'll give you time to read through this. Editing this file is a bit like coding in the dark, you’re wandering around a job that goes on … (and on)
  31. (goes on) … and on . Another problem with Jenkins was that you had to enter the configuration information in the job itself. Everything is stored in a giant XML file, which is pretty hard to read, and pretty much impossible to edit. As a general rule, if it’s not code stored in a Git repo with Pull Requests, it’s invisible (and it rots). Fortunately the folks at Jenkins have been working hard on a solution.
  32. It’s called pipelines. A pipeline allows you to put all the configuration in a Jenkinsfile stored in Git, basically like a travis.yml on steroids. It also allows us to open up our jobs for anyone to contribute to.
  33. Visibility is important, take this code for example. Can you spot the issue with it? I’ll give you a hint, it works fine now, but it’s going to start to cause problems around April next year.
  34. The issue is that the NODE_VERSION code just takes the first character from the Node version, so Node 10.0.0 will become Node 1.x The point of this isn’t to shame the person who wrote it, the point is that with enough eyeballs, all bugs are shallow. Also there’s no git blame, so I can’t find out who wrote it to shame them.
  35. So, the problem with Jenkins pipelines is that they’re new technology, no-one in the current build team has much experience with them. So this is where you come in. If you’ve used pipelines before, or you’re willing to learn, then please come and get involved. Shout-out to Jon, who magically showed up and raised this issue a week after we decided in a meeting that we should probably look at this pipeline stuff. Help with this would be really amazing, so come talk to us.
  36. Imagine that you’re a node collaborator like Brian, and you get this error when you try to run CI on your Pull Request. What do you do? If you’re an experienced sysadmin you would ssh into the machine and … (do stuff)
  37. (and) … do stuff until it’s fixed. But what if there was a better, no prior knowledge solution?
  38. Ansible scripts, especially when run through a graphical interface like Ansible Tower, allow you to simplify most problems down to “Click button to reprovision machine”
  39. Not all the stuff we do is managing machines. One of the things we want to do is have a really nice Sponsors page on the website, to properly thank our sponsors. Being in the Build WG readme is pretty great, but how many people have actually seen the build WG readme? This is something where a frontend developer could probably make something really nice in five minutes, whereas I’d flail around for half an hour and make some monstrosity.
  40. This is an example of something another open-source project did. It looks really professional, and it’d be great to have something like that. By the way, if you haven’t tried out the new superfast firefox nightly, I recommend checking it out.
  41. So, to wrap up there’s loads of really exciting stuff we’re doing at the Build working group, and we’d really like your help.
  42. Any questions?