<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Passing Curiosity: Posts tagged continuous delivery</title>
    <link href="https://passingcuriosity.com/tags/continuous-delivery/continuous-delivery.xml" rel="self" />
    <link href="https://passingcuriosity.com" />
    <id>https://passingcuriosity.com/tags/continuous-delivery/continuous-delivery.xml</id>
    <author>
        <name>Thomas Sutton</name>
        
        <email>me@thomas-sutton.id.au</email>
        
    </author>
    <updated>2013-10-30T00:00:00Z</updated>
    <entry>
    <title>Sydney Continuous Delivery Meetup</title>
    <link href="https://passingcuriosity.com/2013/continuous-delivery-sydney-meetup/" />
    <id>https://passingcuriosity.com/2013/continuous-delivery-sydney-meetup/</id>
    <published>2013-10-30T00:00:00Z</published>
    <updated>2013-10-30T00:00:00Z</updated>
    <summary type="html"><![CDATA[<h2 id="atlassian-stash">Atlassian Stash</h2>
<p>Matthew Watson leads the Stash team at Atlassian. Released a minimum viable
product <em>really</em> early, then very short delivery cycles; provide incremental
improvements to both deliver features to customers but also to validate the
product (“we <em>will</em> catch up”).</p>
<p>Agile with git. Use feature branching to allow for isolated development with
functional and performance testing of <em>your</em> code as you develop it. Isolate
stable code from work-in-progress.</p>
<p>Code reviews (aka pull requests) to help ensure higher quality. Needed to
inculcate a respect for quality in the team; absolutely required for continuous
deployment.</p>
<p>Every commit in master results in two builds and pushes the result to the
“dog-fooding” deployment. Also runs a bunch of other checks against these
successful builds.</p>
<p>Whenever a feature branch is created, CI server creates a new “CI plan” for
that branch. These feature branch jobs are quite highly optimised compared to
the master.</p>
<p>Several build styles:</p>
<ul>
<li><p>“Checks” builds use checkstyle, findbugs, API compatibility, licensing, link
check docs. This is pretty fast; 4-5 minutes.</p></li>
<li><p>“Master” builds, every green build is deployed to dog-fooding instance.
Parallel; distribution, functional tests (40 minutes), jsunit, jshint, DB
migration, REST and hosting testing, first run, unit tests. Major gatekeeper
(~11 workers)</p></li>
<li><p>“Dependent” builds: database matrix (12 versions of 5 DBs), git version
matrix (12 versions), plugins, source, git on Windows, hosting and REST on
Windows. Triggered when “master” succeeds; so, e.g., Windows errors don’t
prevent getting code into master.</p></li>
<li><p>“Feature branch” builds include “checks”, Stash distribution, unit tests,
jshint; these are all pretty fast (~4 agents, 3-4 minutes; fast feedback to
developers). Developers can trigger second stage with all the other test from
“master” if they think they’re required.</p></li>
</ul>
<h3 id="release-branching">Release branching</h3>
<p>Stash needs to support multiple releases:</p>
<ul>
<li><p>master</p></li>
<li><p>release branches (2.5, 2.6); lives on with bug fixes, etc.</p></li>
<li><p>merge bug-fixes back toward and into master (in 2.5, merge into 2.6, then into
master). Plugin to do this sort of stuff automatically, create pull requests
for merge conflicts.</p></li>
</ul>
<p>Master and release branches all get full build plans.</p>
<h3 id="release-build">Release build</h3>
<p>Fair number of builds made internally.</p>
<ul>
<li><p>Stash team have internal dog-fooding instance.</p></li>
<li><p>Atlassian has a corporate instance used by other teams.</p></li>
</ul>
<p>Use a release job, parameterised by a specific commit (not necessarily the head
of a branch). Pass in version and next-version for Maven. The build job runs
<code>maven release:prepare release:perform</code>. Not much testing because it’s already
been through all the testing.</p>
<p>Create a temporary branch for the process of the release build.</p>
<h3 id="automated-deployments">Automated deployments</h3>
<p>Release artefacts for customers:</p>
<ul>
<li>www.atlassian.com, developers.atlassian.com</li>
<li>marketplace</li>
<li>Checkup (for third-parties to test their plugins)</li>
<li>Go live</li>
</ul>
<p>Internal deployments:</p>
<ul>
<li><p>Dev staging</p></li>
<li><p>Staging (same data as stash.atlassian.com) for smoke tests, etc.</p></li>
<li><p>Production</p></li>
</ul>
<h3 id="performance-testing">Performance testing</h3>
<p>Six-thousand seat licenses with lots of CI running against it. Performance is
pretty important.</p>
<p>Daily monitoring of performance of operations. Check results in stand ups.
Notice regressions in performance.</p>
<h3 id="techniques">Techniques</h3>
<p>Try to always be ready for release - quality code.</p>
<p>Automate testing as much as possible.</p>
<p>Automate processes:</p>
<ul>
<li><p>Releases</p></li>
<li><p>Deployment</p></li>
</ul>
<h2 id="automated-environment-provisioning">Automated environment provisioning</h2>
<p>David Cheal is Chief Engineer at <a href="http://krunchtime.it">Krunchtime IT</a>. They do
AWS solution design, build and delivery; devops approach; agile; etc.</p>
<p>Life cycles are changing</p>
<ul>
<li><p>Traditional ops environments</p></li>
<li><p>Virtualisation for cost efficiencies</p></li>
<li><p>Cloud</p></li>
</ul>
<p>None of the problems we had at (1) are still there at (3), we’ve just given
that problem to Amazon.</p>
<h3 id="continuous-delivery-infrastructure">Continuous delivery infrastructure</h3>
<p>Deploy infrastructure often, automation, etc. Help to detect and prevent
configuration drift between environments, etc.</p>
<h3 id="options-for-infrastructure-agility">Options for infrastructure agility</h3>
<ul>
<li><p>CloudFormation with baked AMIs</p></li>
<li><p>Automation tools like Puppet or Chef to automate configuration and deployment.</p></li>
</ul>
<h3 id="separation-of-concerns">Separation of concerns</h3>
<p>Code deployments are not infrastructure deployments. Leave application and
dependencies to infrastructure deployment.</p>
<h3 id="continuous-challenges">Continuous challenges</h3>
<p>Technological challenges: Windows, anything from MS, learning curves</p>
<p>Cultural change: change, resistance, etc.</p>
<h3 id="example">Example</h3>
<p>Communities can be a guide; Puppet Forge is a guide but they <em>must</em> be reviewed.</p>
<h3 id="pragmatism">Pragmatism</h3>
<blockquote>
<p>Infrastructure is code.</p>
</blockquote>
<p>This is not true; infrastructure is infrastructure.</p>
<h3 id="opportunity">Opportunity</h3>
<p>Embrace new methods.</p>
<p>Incredible opportunity to deliver what business, operations, and developers
need more quickly, reliably, cost effectively, etc.</p>
<h3 id="demonstration">Demonstration</h3>
<p>Simple Ruby on Rails application using AWS CloudFormation to spin up EC2
instances, RDS database, ELB, etc. Use an existing Puppet master.</p>
<p>Most organisations use a naming convention which allow Puppet to determine
which classes should be applied to each server, with the right environment.</p>
<p>Using ELB, most organisations will include a specific “health check” page in
their application. Makes it very easy to have ELB.</p>
<p>Continuous infrastructure delivery is – when done right – really, really
boring.</p>
<h3 id="cloudiness">Cloudiness</h3>
<p>Elasticity lets you scale according to demand. “Deal of the day” sites 2-15-2
machines. Development infrastructure shutdown overnight and weekends.</p>
<p>Immutable, disposable infrastructure. Cows vs dogs.</p>]]></summary>
</entry>

</feed>
