turbocharge your continuous delivery pipeline with containers - pop-up loft

41
TurboCharge Your Continuous Delivery Pipeline with Containers Yaniv Donenfeld, Solutions Architect Amazon Web Services

Upload: amazon-web-services

Post on 14-Apr-2017

400 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

TurboCharge Your Continuous Delivery Pipeline with ContainersYaniv Donenfeld, Solutions ArchitectAmazon Web Services

Page 2: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

What to expect from the session

• Best practices for containers in continuous delivery solutions

• Toolset to implement such solutions• Demos

Page 3: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Why use containers?

• Process isolation• Portable• Fast• Efficient

Page 4: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Why use containers for continuous delivery?

• Roll out features as quickly as possible• Predictable and reproducible environment• Fast feedback

Page 5: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Demo application architecture

Nginx Proxy Ruby on Rails web app

PostgreSQL on RDS

Page 6: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Amazon EC2 Container Service

• Highly scalable container management service• Easily manage clusters for any scale• Flexible container placement• Integrated with other AWS services• Extensible

• Amazon ECS concepts• Cluster and container instances• Task definition and task

Page 7: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Development and deployment workflow

Orchestration layer

Code repository Build environment

Test environment

Deployment environment

Source

Page 8: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Stage 1 - Source

Page 9: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Development environment

Code repository

Source

Page 10: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

AWS CodeCommit

• Private Git repository• Fully managed• Secure• Highly available and scalable

• Alternatives• GitHub• Bitbucket

Page 11: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Docker and Docker Toolbox

• Docker (Linux > 3.10) or Docker Toolbox (OS X, Windows)

• Define app environment with Dockerfile

Page 12: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Dockerfile

FROM ruby:2.2.2RUN apt-get update -qq && apt-get install -y build-essential libpq-devRUN mkdir -p /opt/webWORKDIR /tmpADD Gemfile /tmp/ADD Gemfile.lock /tmp/RUN bundle installADD . /opt/webWORKDIR /opt/web

Page 13: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Docker Compose

Define and run multi-container applications:1. Define app environment with Dockerfile2. Define services that make up your app in

docker-compose.yml3. Run docker-compose up to start and run

entire app

Page 14: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

docker-compose.yml

proxy: build: ./proxy ports: - "80:80" links: - webweb: build: ./web command: bundle exec rails server -b 0.0.0.0 environment: - SECRET_KEY_BASE=secretkey expose: - "3000"

Page 15: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Amazon ECS CLI

• Easily create Amazon ECS clusters & supporting resources such as EC2 instances

• Run Docker Compose configuration files on Amazon ECS

New

Page 16: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Amazon ECS CLI

> ecs-cli configure> ecs-cli compose build> ecs-cli compose up --local

New

Page 17: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

It’s Dem-o-clock!

Page 18: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Stage 2 - Build

Page 19: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Build environment

Build environment

Page 20: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Partners

Page 21: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Jenkins

• Extensible• Flexible builds

• Ant or Maven based projects• Docker images

• Optionally runs in Docker container

Page 22: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

CloudBees Docker Build and Publish plugin

Page 23: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Amazon EC2 Container Registry

• Private Docker Repository• v2 Docker Registry• AWS Identity and Access Management (IAM)

and AWS Auth integration• Low latency push, pulls, and inspection

• Alternatives: • DockerHub• Docker Trusted Registry

New

Page 24: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Stage 3 - Test

Page 25: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Test environment

Test environment

Page 26: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

rspec and capybara-webkit

require 'rails_helper.rb'

feature 'Signing in' do scenario 'can sign in' do visit '/users/sign_in' within("#new_user") do fill_in 'Email', :with => '[email protected]' fill_in 'Password', :with => 'password' end click_button 'Log in' expect(page).to have_content('Signed in successfully.') endend

Page 27: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Jenkins

• Run tests directly via Docker run• Run tests in a Docker slave on Amazon ECS

Page 28: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

CloudBees Jenkins ECS plugin

Page 29: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Jenkins slave Dockerfile

FROM jenkinsci/jnlp-slaveUSER rootRUN apt-get update -qq && \ apt-get install -y -qq git curl wget build-essential […]RUN apt-get install -y qt5-default libqt5webkit5-devRUN apt-get install -y xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-appsENV RUBY_VERSION 2.2.2RUN echo 'gem: --no-document' >> /usr/local/etc/gemrc &&\ mkdir /src && cd /src && git clone https://github.com/sstephenson/ruby-build.git &&\ cd /src/ruby-build && ./install.sh &&\ cd / && rm -rf /src/ruby-build && ruby-build $RUBY_VERSION /usr/local

Page 30: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Jenkins slave Dockerfile

RUN gem update --system && gem install bundler

# Install GemsWORKDIR /tmpADD Gemfile /tmp/ADD Gemfile.lock /tmp/RUN bundle install

USER jenkins

Page 31: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

It’s Dem-o-clock!

Page 32: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Stage 4 - Deploy

Page 33: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Deployment environment

Deployment environment

Page 34: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Amazon ECS CLI

> ecs-cli up > ecs-cli compose up> ecs-cli ps

Page 35: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

AWS Elastic Beanstalk

• Deploy and manage applications without worrying about the infrastructure

• AWS Elastic Beanstalk manages your database, Elastic Load Balancing (ELB), Amazon ECS cluster, monitoring, and logging

• Docker support• Single container (on Amazon EC2)• Multi container (on Amazon ECS)

Page 36: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Putting it all together

Page 37: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Putting it all together

Orchestration layer

Page 38: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

AWS CodePipeline

Model and automate your software release processes• Rapid delivery• Configurable workflow• Customizable• Highly integrated

Page 39: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

It’s Dem-o-clock!

Page 40: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Takeaways

• Use Amazon ECS CLI to run application• Run Jenkins jobs in containers• Let AWS CodePipeline orchestrate your pipeline

Page 41: TurboCharge Your Continuous Delivery Pipeline with Containers - Pop-up Loft

Yaniv DonenfeldTurboCharge Your Continuous Delivery Pipeline with Containers

[email protected]