+ All Categories
Transcript
Page 1: The 10 Commandments of Release Engineering

The 10 Commandments of Release Engineering

Dinah McNuttGoogle, Inc.

Page 2: The 10 Commandments of Release Engineering

Release Engineering

“Accelerating the path from development to operations”

Page 3: The 10 Commandments of Release Engineering

Overview

● These commandments are FROM test engineers/system administrators TO release engineers

● Concepts apply to software products for both internal and

external customers ● Ideas presented are my own, not necessarily Google's

Page 4: The 10 Commandments of Release Engineering

Background

● Release processes are usually an afterthought ● Most systems do the minimum required to "get it done"

● Release processes should be treated as products in their

own right ● There is often a big disconnect between the developer

writing the code, the person writing tests, and the system admin who installs it

Page 5: The 10 Commandments of Release Engineering

Steps in Release Process

Check out code

Compile

Test

Release

Page 6: The 10 Commandments of Release Engineering

The Real Process

Check out code

Compile

Unit Tests

Deployment

Package

System Tests

Canaries

More System Tests

Bug Fixes

Page 7: The 10 Commandments of Release Engineering

The Real, Real Process

Check out code

Compile

Unit Tests

Deployment

Package

System Tests

Canaries

More System Tests

Bug Fixes

Build Artifacts

Reports

Alerts/Monitoring

Page 8: The 10 Commandments of Release Engineering

Release Process Features

● Reproducible

● Tracking of changes and the ability to understand what is in a new version of the product or product component

● An identification mechanism (e.g. build ID) that uniquely identifies what is contained in a package or product

● Implementation and enforcement of policy and procedures

● Management of upgrades and patch releases

Page 9: The 10 Commandments of Release Engineering

I - Thou shalt use a source code control system.

●Everything needed to release should be under source control

○ source code○ build files○ build tools○ documentation

●Doesn't matter what you use, just use something!

Reproducibility is a virtue.

Page 10: The 10 Commandments of Release Engineering

Reproducible Build Environment

● Not usually checked into a SCR, but still may need to be recreated:

○ Operating System ○ Compilers ○ Build tools

● Possible solutions:○ Backups○ Installation servers

Page 11: The 10 Commandments of Release Engineering

II - Thou shalt use the right tool(s) for the job.

Complex projects may require multiple build tools

Examples:

●make for C and C++ - the dependency checking is crucial

●ant for java

● scripting languages (bash, python, etc.)

Unnecessary complexity is a sin.

Page 12: The 10 Commandments of Release Engineering

III - Thou shalt write portable and low-maintenance build files

● Plan to support multiple architectures and OS versions

● Use centralized configuration files for definitions common to build files○ Compiler options will change between architectures○ Editing hundreds of files for a single change is no fun

● Provide template files so developers can easily create new build files

Measure twice, cut once.

Page 13: The 10 Commandments of Release Engineering

IV - Thou shalt use a release process that is reproducible

And automated...And unattended...And reproducible...

● Adopt a continuous build policy

● Leverage open source tools like Jenkins and Puppet

Automation is a virtue.

Page 14: The 10 Commandments of Release Engineering

V - Thou shalt use a unique build ID

● Must provide enough information so the build can be uniquely identified and reproduced

● Examples:○ Date○ Repository revision○ Release version

● Must be easily obtainable

○ Included in packaging○ Embedded in binaries

Knowing where you came from is a virtue.

Page 15: The 10 Commandments of Release Engineering

Build IDs

● 20131008_RC05

● 164532_20131008_2_RC00

● 164532_0_RC02

Page 16: The 10 Commandments of Release Engineering

VI - Thou shalt use a package manager

● Auditing ● Leverage installation/upgrade/removal capabilities

● Package summary (who, what, when, etc.)

● Built-in version tracking and dependency checking ● Manifest (ok, tar -tf gives you that.)

● Use native package managers when possible

tar is not a package manager...

Page 17: The 10 Commandments of Release Engineering

VII - Thou shalt design an upgrade process before releasing version 1.0

● Packaging decisions can affect the ability to upgrade

● Design an upgrade process at the same time you are designing an installation process

Not thinking ahead is a sin.

Page 18: The 10 Commandments of Release Engineering

VIII - Thou shalt provide a detailed log of what thou hath done to my machine

● Installing/Patching/Upgrading/Removing software should provide a detailed log of what is happening

● Provide the ability to unpack and inspect the packages without installing

● Ideally there should be a "do nothing" option so I can see

what is going to happen first

Page 19: The 10 Commandments of Release Engineering

IX - Thou shalt provide a complete install/upgrade/patch/uninstall process● Totally automated process

● Rollback AND roll forward

● Packages should be relocatable

Playing nice with others is a virtue.

Page 20: The 10 Commandments of Release Engineering

X - Test Engineer: Thou shalt apply these laws to thyself

● All of these commandments can be applied to development and execution of tests

Page 21: The 10 Commandments of Release Engineering

Shameless Plug

The 2014 USENIX Summit on Release Engineering

June 20, 2014 Philadelphia

“From Dev to DevOps”


Top Related