## Where Goombas Dare
				### Build pipelines, Release Engineering, and You
				Wes Mason  
				
				[@1stvamp](http://twitter.com/1stvamp)  
				
				
				## Who?
				- 	 
/ 
 `@1stvamp`
				- 	 
 Online services, [Canonical](http://www.canonical.com/)
				- 	 
 Open source
				
				
					###"a sub-discipline in software engineering concerned with the compilation, assembly, and delivery of source code into finished products or other software components."
				
				
				
				## Okay, so what's a build pipeline?
				
				
				{Code change} / {Release}
				↓
				Build steps
				↓
				Package
				
				
				↓
				Asset
				↓
				"Store"
				↓
				Deploy?
				
				
				
				## "Configuration Management"
				### (Agility)
				- 	 Version control
				- 	 Branching models
				- 	 Mainline merging (the almighty Pull Request)
				
				
				
				## Releases
				### (Identifiability)
				- 	 Versioning, tagging, commits etc.
				- 	 **v1.0.0 out today!**
				- 	 Dependencies
				
				
				## I don't need versions, I have revisions
				- 	 Build once with rev 42
				- 	 Build again with rev 42
				- 	 Was it the same? *Maybe*.
				
				
				## Don't trust state
				- 	 Environments change, so builds can change too
				- 	 Build artifacts are **thing**
				- 	 "Version" your build
				
				
				## but I just get the latest deps, k?
				### (Reproducibility)
				- 	 ...
				- 	 No, really?
				- 	 Pinning is essential, in any environment (sorry Go!)
				
				
				## Configuration management is about managing change
				### (Consistency)
				- 	 Tracking revisions in an SCM/VCS is great..
				- 	 .. but what about *managing* those changes?
				
				
				
				
				## Builds
				- 	 Builds don't *need* to be automated, they need to be documented.
				- 	 ..but you may as well make automation your docs.
				
				
				## Continuous integration
				- 	 Goes hand in hand with a build pipeline, but can be mutually exclusive
				- 	 Why not?
				
 
 
				
				
				## Build artifacts
				- 	 Golden image
				- 	 Rusty/silver/bronze/base etc. image
				- 	 Packages
				
				
				## Golden images
				- 	 VM images
				- 	 LXCs / Docker
				- 	  ~ Base images ~
				
				
				## Packages
				- 	 Lightweight app/process images (Docker)
				- 	 OS level packages (deb's, rpm's)
				- 	 Application packages
				
				
				## Artifact repositories
				### ..where the hell shall I put these things?!
				- 	 [Apache Archiva](http://archiva.apache.org/), [TARDIS](https://github.com/eggsby/TARDIS), ([Nexus OSS](http://www.sonatype.org/nexus/))
				- 	 Source control (e.g. Subversion)
				- 	 Blob buckets (S3, OpenStack Swift etc.)
				
				
				## Release management..
				### ..or how I learned to stop worrying and love the pipeline.
				 
				 
				#### Change → Build → Test → Release
				
				
				## But what about continuous delivery?
				- 	 If you automate, and have faith in your "process", why not?
				- 	 Or do you mean *continuous deployment*?
				
				
				
				
				## Our devs know how it's built
				
				
				
				## Our ops know how it's shipped 
				
				
				
				## Our QA dept know how it's tested 
				
				
				
				## My build broke, but why? 
				
				
				
				## Document, document, document 
				
				
				
				
				
				
				
				[
](http://theshipshow.com/)
				
				
				
				
				
				## sys.exit(0)
				- 	 Slides: [github.com/1stvamp/build-eng-talk](https://github.com/1stvamp/build-eng-talk)
				
				
				## ^D
				- 	 Jonathan "Joff" Oliver: [about.me/joffie](http://about.me/joffie)
				- 	 Grab me and say hi `:-)`