continuous integration & continuous deploymentfiles.meetup.com/8763012/hollman_cicd...

49
Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect October 17 th , 2013

Upload: others

Post on 27-May-2020

41 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Continuous Integration & Continuous Deployment

Brett Hollman – Solutions Architect October 17th, 2013

Page 2: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Con$nuous    Integra$on  

Cloud-powered Continuous Integration

Goal: to have a working state of the code at any given time Benefit: Fix bugs earlier when they are cheaper to fix Metric: New guy can check out and compile at first day at job

Page 3: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Cloud-powered Continuous Deployment

Goal: 1-click deploy and 1-click rollback Benefit: Release early, release often and iterate quickly Metric: fast feedback of your feature

Con$nuous    Deployment  

Page 4: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Let’s start by taking a look at a traditional IT Software Development Model…

Page 5: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Operations Release QA Dev

Feedback Loop

SCM & CI Testing Deploy Manage

Ticketing Ticketing

Page 6: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Now let’s contrast this with a more modern software development model using Continuous

Integration and Continuous Deployment…

Page 7: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Testing SCM Deploy Manage

Operations

Feedback Loop

Dev Release QA

Ticketing

Common Automation Platform

Ticketing Ticketing

Page 8: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Tenets for Continuous Integration & Deployment

Treat infrastructure as code Automate the testing/deploy process end to end Make sure environments mimic each other as closely as possible Use repeatable patterns between environments at a different scale Simplify and streamline the deploy process

Page 9: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Since Infrastructure is code, let’s treat it like code!

§  Not JUST Revision control! §  Make use of bug tracking/ticketing systems §  Peer reviews of changes before they happen §  Establish infrastructure code patterns/designs §  Test infrastructure changes like code changes

Page 10: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Let’s talk about the journey our code is

going to take to production

Page 11: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

First stop on our journey: Continuous Integration / Automation Tools

•  Help improve code quality and function repeatedly with predefined results

•  Lots of options; self hosted, open source, closed source, and SaaS

Page 12: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Version Control

CI Server

Package Builder

Deploy Server Commit to

Git/master Dev

Get / Pull Code

AMIs

Send Build Report to Dev Stop everything if build failed

Distributed Builds Run Tests in parallel

Staging Env

Test Env Code Config Tests

Prod Env

Push

Config Install Create

Repo

CloudFormation Templates for Env

Generate

Cloud Continuous Integration – AMI Deployment Model

Page 13: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

This all seems like a lot of work,

and potentially costly.

Page 14: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

But it doesn’t need to be!

Page 15: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Infrastructure Automation

We want to be able to use tools to rapidly stand up environments as we need to. What are some automation tools we might use?

§  CloudFormation §  Elastic Beanstalk §  OpsWorks §  Chef §  Puppet

Page 16: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AWS Application Management Services

Elastic Beanstalk OpsWorks CloudFormation

Application Container Application & Resource Management

Provision and manage AWS Resources

You want to quickly get code running scalable and reliable manner without worrying about the underlying resources

You want to run an application with the ability to customize and control software or resources

You want a simple, yet finely controllable way to model and version collections of AWS resources

Page 17: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AWS CloudFormation "WebServer" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, "64" ]}, "SpotPrice" : { "Ref" : "SpotPrice" }, "InstanceType" : m1.large", "SecurityGroups" : [{ "Ref" : "InstanceSecurityGroup" }], "KeyName" : { "Ref" : "KeyName" }, "UserData": { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -v\n", "yum update -y aws-cfn-bootstrap\n”,

"curl -L http://www.opscode.com/chef/install.sh | bash\n", "cd /etc/chef\n", "/usr/bin/wget http://",{ "Ref" : "ChefServerIP" },"/chef/validation.pem\n", "/usr/bin/wget http://",{ "Ref" : "ChefServerIP" },"/chef/client.rb\n", "/bin/chown -R chef:chef /etc/chef\n",

Page 18: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AWS Elastic Beanstalk

Application container framework similar to a PaaS Deploy your application into Elastic Beanstalk and it takes care of building a self healing, auto-scaling, multi-AZ infrastructure Allows you to turn some of the knobs under the hood to tweak Considered one of the easiest places to start with hosting an application on AWS No additional cost

Page 19: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

What is Elastic Beanstalk?

Instance

Amazon  RDSElastic  LoadBalancer

Instance

Auto  scaling  GroupCloudWatch

deploy! WAR

•  Automatically prepares scalable and highly available environments •  Deploy your web app and it runs on AWS best practice architecture

Page 20: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Logical View of an Application

Application

 Environment Version

WAR/ZIP URL Environment Configuration

Configuration Template

 Environment URL Environment Configuration

WAR/ZIP

WAR/ZIP

WAR/ZIP

WAR/ZIP  Environment

URL Environment Configuration

Page 21: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AWS OpsWorks •  Integrated application management solution for

ops-minded developers and IT admins

•  Model, control and automate applications of nearly any scale and complexity

•  Management Console, SDKs, or CLI

•  No additional cost

Page 22: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

OpsWorks Benefits

Simple. Start with built-in templates for common technologies or build your own using Chef. Flexible. Model and control your entire application, from load balancers to databases. Productive. Specify how to deploy, scale, and maintain your application and automate common tasks.

Page 23: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AWS OpsWorks Primer

A stack represents your application. One stack might be used for staging and another for production.

A layer defines how to setup and configure a set of instances and related resources such as volumes and software.

Simply tell OpsWorks where it can find your code and define any additional deployment tasks. Then OpsWorks will take care of deploying your app in your desired configuration.

Scale your stack based on time or load. Clone your production stack to a different region. Set up user permissions and access. Automate workflows for common tasks.

Page 24: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

What is Chef and how does OpsWorks use it

•  Chef is an open-source framework that automates software deployment and configuration.

•  Whenever a change happens on your stack, or upon request, all instances are notified and recipes are run.

Recipes Lifecycle Events

Metadata

Page 25: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Already said this, but all of these tools can be called via APIs to trigger resource creation and

deployment…

Page 26: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Region

Amazon Route 53

Amazon CloudFront

Customer Traffic

Amazon S3

Availability Zone

Availability Zone

Availability Zone

Internet Gateway

VPC Subnet VPC Subnet VPC Subnet VPC Subnet

VPC Subnet VPC Subnet VPC Subnet VPC Subnet

VPC Subnet VPC Subnet VPC Subnet VPC Subnet

Instance Instance

Instance

NAT

Bastion/Chef

ELB ELB

RDS DB Instance

RDS DB Instance Standby (Multi-

AZ) Instance

AWS CloudFormation

Amazon CloudWatch

Amazon SNS

Potential RDS DB Instance

Read Replica

Instance Instance

Page 27: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Our Development &Test Infrastructure

Developers &

Operations

Internal Git CI

Server

Pre-commit Hook

Testing Environment Subnet

CI Workers

Dev Environment VPC Subnet

DEV WEB ELB Dev Stack

Tier 1 Dev Stack

Tier 2

Dev MySQL

DB Instance

DEV APP ELB

VPN TUNNEL

VPN facing VPC Subnet

Internet Gateway

VPN Endpoint

Dev Admin Instance

NAT Instance

Amazon S3

Amazon DynamoD

B

Amazon SQS

Amazon CloudFro

nt

Amazon Route

53

Page 28: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Our Development/Test Infrastructure

Developers &

Operations

Internal Git CI

Server

Pre-commit Hook

Testing Environment Subnet

CI Workers

Dev Environment VPC Subnet

DEV WEB ELB Dev Stack

Tier 1 Dev Stack

Tier 2

Dev MySQL

DB Instance

DEV APP ELB

VPN TUNNEL

VPN facing VPC Subnet

Internet Gateway

VPN Endpoint

Dev Admin Instance

NAT Instance

Amazon S3

Amazon DynamoD

B

Amazon SQS

Amazon CloudFro

nt

Amazon Route

53

CloudFormation

Stacks

Page 29: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Region

Amazon Route 53

Amazon CloudFront

Customer

Traffic

Amazon S3

Availability Zone

Availability Zone

Availability Zone

Internet Gatewa

y

VPC Subnet VPC Subnet VPC Subnet VPC Subnet

VPC Subnet VPC Subnet VPC Subnet VPC Subnet

VPC Subnet VPC Subnet VPC Subnet VPC Subnet

Instance

Instance

Instance

NAT

Bastion/Chef

ELB ELB

RDS DB Instance

RDS DB Instance Standby (Multi-

AZ) Instanc

e

AWS CloudFormation

Amazon CloudWatch

Amazon SNS

Potential RDS DB Instance

Read Replica

Instance

Instance

Elastic Beanstalk or OpsWorks

CloudFormation Stacks

Page 30: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Example

Deploy Code Build Test Provision Monitor

OpsWorks Git Automation Tools

Check in – Build & Test Tests pass – Deploy to Staging

Page 31: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Now that we know where our code is going,

how is it getting there?

Page 32: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Ship that code! How are we going to deploy our code?

§  File shipping: •  Just text files •  Binaries

§  As an AMI: •  Package bundling into a

Tarball / RPM •  Bundle one of the above into

an AMI How fast do we need to do this? Across how many instances? How do we roll back (or forward)?

Yes, you can technically ship your code to AWS in a box. See AWS Import/Export. Probably not for CI&CD though…

Page 33: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

File Shipping Deploy Method

Leave existing hosts in place Push new code to the instances Rolling restarts for web/application servers Have to worry about tracking what version is live for building new hosts Can be easier to work with than AMI method and package bundling

Page 34: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

File Shipping Deploy Method

Elastic Beanstalk and Opsworks use the File Shipping methodology Code is deployed on all live servers in a layer in a parallel directory structure Symlink is moved for “current” directory structure to point to new deployed code Nginx / Apache services are restarted

Page 35: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method

Code gets bundled into an AMI, we then deploy that AMI

§  Pluses •  New shouldn’t effect older versions •  Can deploy alongside current prod env •  Easy tools to automate (Automation and AMI baking tools i.e. Netflix

Aminator) §  Cons

•  Bit more work involved

Leverage configuration management tools in automation process

Page 36: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Building

Page 37: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Building

Fully Functional AMI OS-Only AMI

Partially Configured AMI

Page 38: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Building

Fully Functional AMI OS-Only AMI

Partially Configured AMI

Least flexible to maintain

Page 39: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Building

Fully Functional AMI OS-Only AMI

Partially Configured AMI

Most amount of post-boot

work

Least flexible to maintain

Page 40: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Building

Fully Functional AMI OS-Only AMI

Partially Configured AMI

Most amount of post-boot

work

Least flexible to maintain

Try and find a happy medium

here

Page 41: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Deploying Blue/Green Deploys

§  We stand up a duplicate part of our infrastructure and slowly cut traffic over to it

•  Shift load via DNS •  Makes it easy to do testing

of new features •  Makes it easy to roll back

§  As we shift more traffic over, let auto-scaling grow/shrink our instances of the new or old application

•  Shut down the old when no traffic there

Amazon Route

53

EC2 Instances

ELB

100%

DynamoDB MySQL RDS

Instance

ElastiCache Cache Node

Page 42: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Deploying

Amazon Route

53

EC2 Instances

ELB

EC2 Instances

ELB

90%

10%

DynamoDB MySQL RDS

Instance

ElastiCache Cache Node

Blue/Green Deploys §  We stand up a duplicate part

of our infrastructure and slowly cut traffic over to it

•  Shift load via DNS •  Makes it easy to do testing

of new features •  Makes it easy to roll back

§  As we shift more traffic over, let auto-scaling grow/shrink our instances of the new or old application

•  Shut down the old when no traffic there

Page 43: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Deploying

Amazon Route

53

EC2 Instances

ELB

EC2 Instances

ELB

50%

50%

DynamoDB MySQL RDS

Instance

ElastiCache Cache Node

Blue/Green Deploys §  We stand up a duplicate part

of our infrastructure and slowly cut traffic over to it

•  Shift load via DNS •  Makes it easy to do testing

of new features •  Makes it easy to roll back

§  As we shift more traffic over, let auto-scaling grow/shrink our instances of the new or old application

•  Shut down the old when no traffic there

Page 44: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Deploying

Amazon Route

53

EC2 Instances

ELB

EC2 Instances

ELB

0% 100%

DynamoDB MySQL RDS

Instance

ElastiCache Cache Node

Blue/Green Deploys §  We stand up a duplicate part

of our infrastructure and slowly cut traffic over to it

•  Shift load via DNS •  Makes it easy to do testing

of new features •  Makes it easy to roll back

§  As we shift more traffic over, let auto-scaling grow/shrink our instances of the new or old application

•  Shut down the old when no traffic there

Page 45: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Deploying

Amazon Route

53

EC2 Instances

ELB

EC2 Instances

ELB

0% 100%

DynamoDB MySQL RDS

Instance

ElastiCache Cache Node

Blue/Green Deploys §  We stand up a duplicate part

of our infrastructure and slowly cut traffic over to it

•  Shift load via DNS •  Makes it easy to do testing

of new features •  Makes it easy to roll back

§  As we shift more traffic over, let auto-scaling grow/shrink our instances of the new or old application

•  Shut down the old when no traffic there

Page 46: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Deploying

Amazon Route

53

EC2 Instances

ELB

100%

DynamoDB MySQL RDS

Instance

ElastiCache Cache Node

Blue/Green Deploys §  We stand up a duplicate part

of our infrastructure and slowly cut traffic over to it

•  Shift load via DNS •  Makes it easy to do testing

of new features •  Makes it easy to roll back

§  As we shift more traffic over, let auto-scaling grow/shrink our instances of the new or old application

•  Shut down the old when no traffic there

Page 47: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

AMI Deployment Method - Deploying

Amazon Route

53

EC2 Instances

ELB

100%

DynamoDB MySQL RDS

Instance

ElastiCache Cache Node

Blue/Green Deploys §  We stand up a duplicate part

of our infrastructure and slowly cut traffic over to it

•  Shift load via DNS •  Makes it easy to do testing

of new features •  Makes it easy to roll back

§  As we shift more traffic over, let auto-scaling grow/shrink our instances of the new or old application

•  Shut down the old when no traffic there

Page 48: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Our code has arrived at its destination

Page 49: Continuous Integration & Continuous Deploymentfiles.meetup.com/8763012/Hollman_CICD Event_101713_v3...Continuous Integration & Continuous Deployment Brett Hollman – Solutions Architect

Thanks