Last active
August 29, 2015 14:16
-
-
Save ryanj/91cb96c75f814b8c0e09 to your computer and use it in GitHub Desktop.
Building Release Pipelines on the Open Web - Fluent 2015 - @ryanj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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