Large-Scale Software Development. Tools and Methods

Similar documents
Large-Scale Software Development. Tools and Methods

Introduction to Docker. Antonis Kalipetis Docker Athens Meetup

Midterm Presentation Schedule

利用 Mesos 打造高延展性 Container 環境. Frank, Microsoft MTC

Circle IT: Microsoft Update 2016

Welcome to Docker Birthday # Docker Birthday events (list available at Docker.Party) RSVPs 600 mentors Big thanks to our global partners:

Who is Docker and how he can help us? Heino Talvik

Pritam Pabla Technology Solutions Specialist Hybrid Cloud

Continuous integration & continuous delivery. COSC345 Software Engineering

UP! TO DOCKER PAAS. Ming

Deployment Patterns using Docker and Chef

Introduction to containers

Leveraging Docker and CoreOS to provide always available Cassandra at Instaclustr

ovirt and Docker Integration

Travis Cardwell Technical Meeting

[Docker] Containerization

Important DevOps Technologies (3+2+3days) for Deployment

Running Splunk Enterprise within Docker

INFRASTRUCTURE AS CODE

Getting Started With Containers

Developing and Testing Java Microservices on Docker. Todd Fasullo Dir. Engineering

Advanced Continuous Delivery Strategies for Containerized Applications Using DC/OS

An introduction to Docker

SQL Server inside a docker container. Christophe LAPORTE SQL Server MVP/MCM SQL Saturday 735 Helsinki 2018

Accelerate at DevOps Speed With Openshift v3. Alessandro Vozza & Samuel Terburg Red Hat

USING DOCKER FOR MXCUBE DEVELOPMENT AT MAX IV

CONTINUOUS INTEGRATION CONTINUOUS DELIVERY

There's More to Docker than the Container The Docker Platform

Topics covered. Introduction to Maven Maven for Dependency Management Maven Lifecycles and Plugins Hands on session. Maven 2

Microservice Deployment. Software Engineering II Sharif University of Technology MohammadAmin Fazli

CONTINUOUS INTEGRATION; TIPS & TRICKS

Kuber-what?! Learn about Kubernetes

Index. Bessel function, 51 Big data, 1. Cloud-based version-control system, 226 Containerization, 30 application, 32 virtualize processes, 30 31

DevOps Course Content

Azure DevOps. Randy Pagels Intelligent Cloud Technical Specialist Great Lakes Region

Using NGiNX for release automation at The Atlantic

Sunil Shah SECURE, FLEXIBLE CONTINUOUS DELIVERY PIPELINES WITH GITLAB AND DC/OS Mesosphere, Inc. All Rights Reserved.

DEPLOYMENT MADE EASY!

Introduction to Containers

Ruby in the Sky with Diamonds. August, 2014 Sao Paulo, Brazil

TangeloHub Documentation

An Introduction to Eclipse Che Lets build a custom cloud IDE. October 2015 Tyler Jewell, Eclipse Che Project

Jenkins: A complete solution. From Continuous Integration to Continuous Delivery For HSBC

Harbor Registry. VMware VMware Inc. All rights reserved.

LSST software stack and deployment on other architectures. William O Mullane for Andy Connolly with material from Owen Boberg

Container-based virtualization: Docker

Containers, Serverless and Functions in a nutshell. Eugene Fedorenko

Developing Kubernetes Services

Docker at Lyft Speeding up development Matthew #dockercon

Be smart. Think open source.

DevOps Technologies. for Deployment

Arup Nanda VP, Data Services Priceline.com

Unable To The Artifact From Any Repository Maven-clean-plugin

Best Practices for Developing & Deploying Java Applications with Docker

Mandi Walls. Technical Community #habitatsh

What is git? Distributed Version Control System (VCS); Created by Linus Torvalds, to help with Linux development;

Building A Better Test Platform:

Git. all meaningful operations can be expressed in terms of the rebase command. -Linus Torvalds, 2015

A Hands on Introduction to Docker

containerization: more than the new virtualization

Full Stack boot camp

Creating pipelines that build, test and deploy containerized artifacts Slides: Tom Adams

TM DevOps Use Case TechMinfy All Rights Reserved

Fixing the "It works on my machine!" Problem with Docker

A DEVOPS STATE OF MIND WITH DOCKER AND KUBERNETES. Chris Van Tuin Chief Technologist, West

DevOps Online Training

70-532: Developing Microsoft Azure Solutions

TM DevOps Use Case. 2017TechMinfy All Rights Reserved

Implementing the Twelve-Factor App Methodology for Developing Cloud- Native Applications

The Post-Cloud. Where Google, DevOps, and Docker Converge

Con$nuous Deployment with Docker Andrew Aslinger. Oct

There Should be One Obvious Way to Bring Python into Production. Sebastian Neubauer

The Long Road from Capistrano to Kubernetes

Docker A FRAMEWORK FOR DATA INTENSIVE COMPUTING

Continuous Delivery for Cloud Native Applications

DEVOPS TRAINING COURSE CONTENT

Think Small to Scale Big

DEVOPS COURSE CONTENT

SBB. Java User Group 27.9 & Tobias Denzler, Philipp Oser

Firefox Crash Reporting.

Jenkins User Conference Israel. #jenkinsconf. CI / Liveperson. Gidi Samuels. July 16, #jenkinsconf

Niv Mizrahi. VP github.com/nivm

Docker All The Things

개발자와운영자를위한 DevOps 플랫폼 OpenShift Container Platform. Hyunsoo Senior Solution Architect 07.Feb.2017

SUSE Linux Enterprise Server 12 Modules

Submitting your Work using GIT

Android meets Docker. Jing Li

Openshift: Key to modern DevOps

Docker 101 Workshop. Eric Smalling - Solution Architect, Docker

ROBIN SYSTEMS. Containerizing Oracle: Not Thinking About It Yet? You Should Be!!!

agenda PAE Docker Docker PAE

9 Reasons To Use a Binary Repository for Front-End Development with Bower

Containerized Cloud Scheduling Environment

OPENSTACK BEIJING CONFERENCE. by: Steven Hallett Head of Cloud Infrastructure Engineering and Operations

Amir Zipory Senior Solutions Architect, Redhat Israel, Greece & Cyprus

We are ready to serve Latest Testing Trends, Are you ready to learn?? New Batches Info

JetBrains TeamCity Comparison

INDIGO PAAS TUTORIAL. ! Marica Antonacci RIA INFN-Bari

Installing and Using Docker Toolbox for Mac OSX and Windows

SECURE PRIVATE VAGRANT BOXES AND MORE WITH A BINARY REPOSITORY MANAGER. White Paper

Transcription:

Large-Scale Software Development Tools and Methods

2 Scenarios - actions 1. Single developer, multiple changes Version control system 2. Many developers, multiple changes Distributed version control system 3. Many groups of developers, multiple changes Package management system 4. Building artefacts based on multiple files with dependencies build scripts 5. Conducting multiple actions with inter-dependencies on multiple files Flexible build system 6. Automatically sensing changes and conducting such actions based on changes Continuous integration tools

3 Scenarios - configuration Configuration files Setup scripts Container environments Virtual Machines

Version control Git 4

5 Scenarios - actions 1. Single developer, multiple changes Version control system 2. Many developers, multiple changes Distributed version control system 3. Many groups of developers, multiple changes Package management system 4. Building artefacts based on multiple files with dependencies build scripts 5. Conducting multiple actions with inter-dependencies on multiple files Flexible build system 6. Automatically sensing changes and conducting such actions based on changes Continuous integration tools

Version control - GIT 6

7 Sample Disorganized Project Hey, Anders, could you send me a copy of those changes you made last Tuesday? Ola, this function doesn t work anymore. Did you change something? Sorry, I can t seem to find those old classes. I guess you ll just have to re-implement them. OK, we ve all been working hard for the last week. Now let s integrate everyone s work together.

8 What is version control? Basic functionality: keep track of changes made to files (allows roll-backs) merge the contributions of multiple developers Benefits: facilitates backups increased productivity (vs manual version control) encourages experimentation helps to identify/fix conflicts makes source readily available less duplicated effort

9 Additional benefits Accountability who wrote the code? do we have the rights to it? Support software engineering hooks for peer reviews Software branches different versions of software need to be maintained, ensure bug fixes shared Record Keeping Commit logs may tie to issue tracking system or be used to enforce guidelines

10 More Benefits Support Distribution of Work Remote work, outsourcing, open-source projects Use in conjunction with good communication habits via email etc. Rapid Development (XP/Agile) Supports frequent refactoring Helps automate frequent system builds

The Big Picture http://blog.mikepearce.net/2010/05/18/the-difference-between-git-pull-git-fetch-and-git-clone-and-git-rebase/

Branching Git sees commit this way Branch annotates which commit we are working on 12

Branching 13

14

15

16

17

18

19

20

21

Merging What do we do with this mess? Merge them 22

Merging Steps to merge two branch Checkout the branch you want to merge onto Merge the branch you want to merge 23

24

25

26

27

28

29

30 Scenarios - actions 1. Single developer, multiple changes Version control system 2. Many developers, multiple changes Distributed version control system 3. Many groups of developers, multiple changes Package management system 4. Building artefacts based on multiple files with dependencies build scripts 5. Conducting multiple actions with inter-dependencies on multiple files Flexible build system 6. Automatically sensing changes and conducting such actions based on changes Continuous integration tools

Package management systems 31

32 Dependency management

33 Dependency management issues Is a request to modify the current software component graph satisfiable? Are additions compatible with other components? Are deletions safe with respect to other dependencies? Given a component, determine versions of other components we can safely rely on

34 Dependency management as satisfiability (a b c) & (d e f)... = TRUE (a b c) & (-c) & (-b -a)... = TRUE Rules A requires B provided by B1, B2, B3 Rule: (-A B1 B2 B3) A conflicts with B provided by B1, B2, B3 3 Rules: (-A -B1), (-A -B2), (-A -B3)

35 Dependency management issues Y depends on X >= 1.8. X makes binary incompatible changes from v. 1.9 to v. 2.0... Can components be installed from local sources as well as from remote? Should OS-specific dependency management or language-specific be used?

36 Software package management systems Name Environment Format NuGet.Net CLR XML Gradle JVM XML dpkg/apt Linux Ar archive Rubygems Ruby Ruby MSI Windows In-file DB BSD Ports OS X/Linux/BSD Makefile...

37 Maven mvn -h Life cycles Clean Default Site validate compile test package verify install deploy

Maven example 38 Olas-MacBook-Pro:java-petclinic olale$ mvn graphwalker:test [INFO] Scanning for projects... [ ] [INFO] >>> graphwalker-maven-plugin:3.4.2:test (default-cli) > [graphwalker]test-compile @ java-petclinic >>> [INFO] [INFO] --- graphwalker-maven-plugin:3.4.2:generate-sources (generate-sources) @ java-petclinic --- [INFO] [INFO] --- graphwalker-maven-plugin:3.4.2:validate-models (default-cli) @ java-petclinic --- [INFO] [INFO] --- graphwalker-maven-plugin:3.4.2:generate-sources (default-cli) @ java-petclinic --- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ java-petclinic --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 10 resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ java-petclinic --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- graphwalker-maven-plugin:3.4.2:validate-test-models (default-cli) @ java-petclinic ---

39 Maven structure mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app - DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

40 Maven Configuration <parent> <groupid>org.graphwalker.example</groupid> <artifactid>graphwalker-example</artifactid> <version>3.4.2</version> </parent> <artifactid>java-petclinic</artifactid> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupid>org.graphwalker</groupid> <artifactid>graphwalker-maven-plugin</artifactid> <version>${project.version}</version> <!-- Bind goals to the default lifecycle --> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <goals> <goal>generate-sources</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

Automation and languages for development 41 Multiple developers/ languages/ components CI work automation Test automation, packaging, Java Build tools JVM C ASM Compiler OS

42 Scenarios - actions 1. Single developer, multiple changes Version control system 2. Many developers, multiple changes Distributed version control system 3. Many groups of developers, multiple changes Package management system 4. Building artefacts based on multiple files with dependencies build scripts 5. Conducting multiple actions with inter-dependencies on multiple files Flexible build system 6. Automatically sensing changes and conducting such actions based on changes Continuous integration tools

Jenkins 43

Jenkins 44 Workflow automation tool

Jenkins 45 Workflow automation tool - pipelines node { // <1> stage('build') { // <2> sh 'make' // <3> } stage('test') { sh 'make check' junit 'reports/**/*.xml' // <4> } Groovy (JVM-based language) } stage('deploy') { sh 'make publish' }

Travis CI 46

47 Automation and languages for deployment Chef/Puppet/Ansible/Salt/Terraform Xen/Solaris Zones, Docker/Chroot Programming language Automation of setup Isolation of components Single file, structured non-programming language. Requirements installed, updated, started manually. Deployment through manual scripts

48 Chef/Puppet/Ansible/Salt/Terraform/ Automates setup of environments for development/deployment Introduces programming languages for your infrastructures Declarative (Terraform/Puppet) - What is the desired end-state? Imperative (Chef/Ansible) - How do you achieve it?

49

Deployment 50

Market View: Evolution of IT Thick, client-server app on thick client 1995 2015 Thin app on mobile, tablet Well-defined stack: - O/S - Runtime - Middleware Assembled by developers using best available services Monolithic Physical Infrastructure Running on any available set of physical resources (public/private/ virtualized)

Challenges Thin app on mobile, tablet 2015 Assembled by developers using best available services Running on any available set of physical resources (public/private/ virtualized) How to ensure services interact consistently, avoid dependency hell How to migrate & scale quickly, ensure compatibility How to avoid n X n different configs

The Challenge Multiplicity of Stacks Static website User DB postgresql + pgv8 + v8 Web frontend Background workers Queue nginx 1.5 + modsecurity + openssl + bootstrap 2 Redis + redis-sentinel Ruby + Rails + sass + Unicorn Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv + nodejs + phantomjs Analytics DB hadoop + hive + thrift + OpenJDK API endpoint Do services and apps interact appropriately? Python 2.7 + Flask + pyredis + celery + psycopg + postgresql-client Multiplicity of hardware environments Development VM Customer Data Center QA server Public Cloud Disaster recovery Production Servers Production Cluster Contributor s laptop Can I migrate smoothly and quickly?

Results in NxN compatibility nightmare Static website??????? Web frontend??????? Background workers??????? User DB??????? Analytics DB??????? Queue??????? Developme nt VM QA Server Single Prod Server Onsite Cluster Public Cloud Contributor s laptop Customer Servers

Placing code in movable boxes Multiplicity of Stacks Static website An engine that enables any payload to be encapsulated as a lightweight, portable, self-sufficient container User DB Web frontend Queue Analytics DB Do services and apps interact appropriately? Multiplicity of hardware environments Development VM that can be manipulated using standard operations and run consistently on virtually any hardware platform QA server Customer Data Public Cloud Production Contributor s Center Cluster laptop Can I migrate smoothly and quickly

Or put more simply Multiplicity of Stacks Static website Developer: Build Once, Run Anywhere (Finally) User DB Web frontend Queue Analytics DB Do services and apps interact appropriately? Multiplicity of hardware environments Development VM Operator: Configure Once, Run Anything QA server Customer Data Public Cloud Production Contributor s Center Cluster laptop Can I migrate smoothly and quickly

Containers tries solves the NxN problem Static website Web frontend Background workers User DB Analytics DB Queue Developme nt VM QA Server Single Prod Server Onsite Cluster Public Cloud Contributor s laptop Customer Servers

Two types of boxes Virtualization (Virtual machines) Xen KVM QEMU Virtual Box UML. Containers Docker (LXC) LXD CoreOS (rkt)

What is Docker? Docker is an open-source project that automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of operating system level virtualization on Linux. [Source: en.wikipedia.org] 59

Docker: Name [www.docker.com] docker [naut.]: der Dockarbeiter, der Hafenarbeiter Source: leo.org Provide a uniformed wrapper around a software package: «Build, Ship and Run Any App, Anywhere» [www.docker.com] Similar to shipping containers: The container is always the same, regardless of the contents and thus fits on all trucks, cranes, ships,... 60

Docker vs. Virtual Machine Source: https://www.docker.com/whatisdocker/ 61

Docker Technology libvirt: Platform Virtualization LXC (LinuX Containers): Multiple isolated Linux systems (containers) on a single host Layered File System [Source: https://docs.docker.com/terms/layer/] 62

Run Platforms Various Linux distributions (Ubuntu, Fedora, RHEL, Centos, opensuse,...) Cloud (Amazon EC2, Google Compute Engine, Rackspace, Azure ) Mac Windows 63

Hello World Simple Command - Ad-Hoc Container docker run ubuntu echo Hello World docker images [-a] docker ps a 64

Terminology - Image Persisted snapshot that can be run images: List all local images run: Create a container from an image and execute a command in it tag: Tag an image pull: Download image from repository rmi: Delete a local image This will also remove intermediate images if no longer used 65

Terminology - Container Runnable instance of an image ps: List all running containers ps a: List all containers (incl. stopped) top: Display processes of a container start: Start a stopped container stop: Stop a running container pause: Pause all processes within a container rm: Delete a container commit: Create an image from a container 66

Image vs. Container Base Image ubuntu:latest New Image iid1 base image run commit run Container cid1 Container cid1 cmd à new state Container Container cid2 Container cid3 cid4 67

Dockerfile Create images automatically using a build script: «Dockerfile» Can be versioned in a version control system like Git or SVN, along with all dependencies Docker Hub can automatically build images based on dockerfiles on Github 68

Dockerfile Example Dockerfile: FROM ubuntu ENV DOCK_MESSAGE Hello My World ADD dir /files CMD ["bash", "somescript"] docker build [DockerFileDir] docker inspect [imageid] 69

FROM ubuntu MAINTAINER Anders RUN apt-get install -y python-software-properties python python-setuptools ruby rubygems RUN add-apt-repository ppa:chris-lea/node.js RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nodejs RUN apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 RUN echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" tee -a /etc/apt/sources.list.d/10gen.list RUN apt-get -y update RUN apt-get -y install mongodb-10gen RUN easy_install supervisor RUN echo_supervisord_conf > /etc/supervisord.conf RUN printf "[include]\nfiles = /var/www/supervisorfile\n" >> /etc/supervisord.conf ADD. /var/www RUN cd /var/www ; npm install CMD ["/usr/local/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"] 70

Mount Volumes docker run ti v /hostlog:/log ubuntu Run second container: Volume can be shared docker run ti --volumes-from firstcontainername ubuntu 71

Publish Port docker run t p 8080:80 ubuntu nc l 80 Map container port 80 to host port 8080 Check on host: nc localhost 8080 Link with other docker container docker run -ti --link containername:alias ubuntu See link info with set 72

Around Docker Docker Images: Docker Hub Vagrant (Also for VMs) Automated Setup Puppet, Chef, Ansible,... 73

Docker Hub Public repository of Docker images https://hub.docker.com/ docker search [term] Automated: Has been automatically built from Dockerfile Source for build is available on GitHub 74