## 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 `:-)`