Skip to content

Instantly share code, notes, and snippets.

@ryanj
Last active August 29, 2015 14:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryanj/91cb96c75f814b8c0e09 to your computer and use it in GitHub Desktop.
Save ryanj/91cb96c75f814b8c0e09 to your computer and use it in GitHub Desktop.
Building Release Pipelines on the Open Web - Fluent 2015 - @ryanj
<section>
<section id='Open-Web-Release-Pipelines' data-markdown>
##Building
# Release
# Pipelines
for the
## Open Web
http://bit.ly/web-pipelines-fluent
</section>
<section id='by-ryanj' data-state="blackout">
<p>presented by</p>
<p><a href='http://ryanjarvinen.com/'>ryan jarvinen</a> / <a href='http://twitter.com/ryanj/'>@ryanj</a></p>
<p><a href="http://ryanjarvinen.com"><img src="http://ryanjarvinen.com/presentations/shared/img/moo_openshift_horizontal.png"/></a></p>
</section>
<section data-markdown>
#### Building Release Pipelines for the Open Web
4:30pm-5:00pm Tuesday, 04/21/2015
Location: Salon 8
http://fluentconf.com/javascript-html-2015/public/schedule/detail/39485
</section>
</section>
<section>
<section>
<h2>Define:</h2>
<p class='fragment'>the</p>
<h2 class='fragment'>"Open Web"</h2>
<p class='fragment'>or, <span class='fragment'>the</span></p>
<h2 class='fragment'>"Web Platform"</h2>
</section>
<section id='classification'>
<p>Generally, one or more of the following:</p>
<ol>
<li class='fragment'>Open Source projects and standards (self-hosted options)</li>
<li class='fragment'>SaaS solutions that support open standards</li>
<li class='fragment'>SaaS solutions that offer a freemium plan (open access)</li>
<li class='fragment'>Publicly hosted platforms and service integrations</li>
</ol>
</section>
<section id='agenda'>
<p>My focus areas:</p>
<ol>
<li class='fragment'><a href='#/onboarding'>User Experience</a> <span class='fragment'>(time savings)</a></li>
<li class='fragment'><a href='#/containerization'>Containerization</a> <span class='fragment'>(deploy anywhere, portability)</a></li>
<li class='fragment'><a href='#/components'>Web Platform Components</a> <span class='fragment'>(building blocks, interoperability)</a></li>
<li class='fragment'><a href='#/release-management'>Release Management and Automation</a> <span class='fragment'>(webHooks, devOps, maintainability)</a></li>
<li class='fragment'><a href='#/feedback-loop'>Metrics, Monitoring, and Scaling</a> <span class='fragment'>(integrated feedback, sustainability)</a></li>
</ol>
</section>
</section>
<section>
<section id='onboarding'>
<h1>Onboarding</h1>
<p class='fragment'>old: <code>git clone</code></p>
<p class='fragment'>new: click to Launch</p>
</section>
<section>
<h3>Start in a better place:</h3>
<ol>
<li>on the Web</li>
<li>from the CLI</li>
</ol>
<div style='clear:both;'>
<br/>
<p style='text-align:left'>Proceed directly to:</p>
<ul style='float:left;'>
<li>Hosted Dev</li>
<li>Staging</li>
<li>Production*</li>
</ul>
<ul style='float:right;'>
<li>local Dev + Staging</li>
<li>local Dev + Prod*</li>
<li>local Dev + Prod* + Jenkins*</li>
</ul>
<div style='clear:both;'>
<br/>
<p>*(scaling concurrency limitations)</p>
</div>
</section>
<section data-markdown>
### Onboarding Services
* [OpenShift Hub](https://hub.openshift.com/)
* [Heroku Buttons](https://buttons.heroku.com/)
* [launch-shifter](http://launch-shifter.rhcloud.com/)
#### Web Launch
* https://blog.openshift.com/launching-applications-with-openshifts-web-based-workflow/
* https://blog.openshift.com/customizing-openshifts-web-based-app-creation-workflow/
</section>
<section data-markdown>
## Follow-up Steps:
1. Document your Onboarding process in your <code>README</code>
* Include a license and contributor guidelines
* Enable (GitHub) Issues
2. For Production:
* Bring your own Hostnames and SSL
* Set Scaling Policies
</section>
<section id='how'>
<h2 class='fragment'>But,</h2>
<h3 class='fragment'>Why doesn't my app work?</h3>
</section>
</section>
<section>
<section id='containerization' data-markdown>
## Containerization
Writing code that will run "Anywhere"
</section>
<section id='configuration' data-markdown>
## Configuration-free Code
* ["twelve-factor" app design](http://12factor.net/)
* Configuration solutions:
* [config-chain](https://github.com/dominictarr/config-chain#configchain-lives-to-serve-only-you)
* [cloud-env](https://github.com/ryanj/cloud-env#listen-up)
* [config-multipaas](https://github.com/ryanj/config-multipaas/#config-multipaas--)
[Run your nodejs app on OpenShift in two simple steps](https://blog.openshift.com/run-your-nodejs-projects-on-openshift-in-two-simple-steps/)
</section>
<section>
<p class='fragment'>onboarding new contributors</p>
<p class='fragment'>should be like </p>
<p class='fragment'>playing a game of</p>
<h2 class='fragment'>Tower Defense</h2>
</section>
<section data-markdown>
### CLI build tools
* npm
* browserify
* grunt
* gulp
* gasket
* jslint
* tap / tape
</section>
<section data-markdown>
### Your first line of defense
Enable potential contributors with automated quality review services:
npm install && npm test
TDD is dead
</section>
</section>
<section>
<section id='components' data-markdown>
## Web Platform Components
SaaS build tools:
* filters and validation (reject bad code)
* feedback (status reports, quality indicators, automated PR comments)
CI & CD solutions:
* Jenkins
* TravisCI
* hubot (and other bots)
Container security validation
</section>
<section id='a-series-of-tubes' data-markdown>
## A Series of Tubes
On to the next stage:
1. git push (from Dev)
2. webhooks (everywhere else)
3. ssh / scp / rsync (oldschool)
Multiple deployment targets w/ git+ssh: https://blog.openshift.com/release-management-in-the-cloud/
</section>
</section>
<section>
<section id='release-management' data-markdown>
## Release
## Management
CI vs CD
* [Jenkins](https://build-shifter.rhcloud.com/)
* [TravisCI](https://travis-ci.org/ryanj/restify-base)
* [DockerHub](https://registry.hub.docker.com/u/ryanj/restify-base/)
* Shippable
* Wercker
* TeamCity?
[Docker Automated Builds](https://docs.docker.com/docker-hub/builds/)
[travisCI to OpenShift](docs.travis-ci.com/user/deployment/openshift/)
</section>
<section id='jenkins' data-markdown>
## Jenkins
Top Plugins:
* GitHub plugin (status indicator)
* Github Authentication plugin
* GitHub Pull Request Builder
</section>
<section data-markdown>
## Deployment Targets
Hosting platforms:
* Heroku
* OpenShift V2
* Engineyard
* OpenShift V3 (Docker-based)
* mesosphere
* marathon
* flynn
</section>
<section data-markdown>
### System validation
container compliance checking
[OpenSCAP](https://fedorahosted.org/scap-security-guide/)
</section>
</section>
<section>
<section id='feedback-loop' data-markdown>
## Continuous Feedback
Monitoring, Health, and Scaling
</section>
<section data-markdown>
## Status indicators
* [Shields.io (status all the things)](http://shields.io/)
* [DavidDM (npm dependency checker)](https://david-dm.org/)
* [Nodei.co (npm package stats)](https://nodei.co/)
</section>
</section>
<section id='thank-you' data-markdown>
# Thank You!
@ryanj
http://bit.ly/web-pipelines-fluent
</section>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment