managing modular software for your nu get, c++ and java development

158
Managing Modular Software for your NuGet, C++ and Java Development

Upload: baruch-sadogursky

Post on 19-May-2015

803 views

Category:

Technology


0 download

DESCRIPTION

Binary repository is one of the cornerstones of building modular software. In this session we will demonstrate how it can be used to support modular development in Java, C++ and the .NET platform (using NuGet). Next, we will show how to take the binary repository one step forward to support Continuous Deployment and Release Management by using build integration features which allow full traceability and automation of staging and release procedures.

TRANSCRIPT

Page 1: Managing modular software for your nu get, c++ and java development

Managing Modular Software

for your NuGet, C++ and Java Development

Page 2: Managing modular software for your nu get, c++ and java development

Agenda

• Modular software – why?• Building modular software…• … in Java• … in C++• … in .NET

Page 3: Managing modular software for your nu get, c++ and java development

3

Who’s talking?

@jbaruchgithub.com/jbaruch

Page 4: Managing modular software for your nu get, c++ and java development

WTF IS MODULE?

Page 5: Managing modular software for your nu get, c++ and java development

Module

Modular programming (also called "top-down design" and "stepwise refinement") is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.

Page 6: Managing modular software for your nu get, c++ and java development

TL;DR

Page 7: Managing modular software for your nu get, c++ and java development

Module

Page 8: Managing modular software for your nu get, c++ and java development

Module Formula

Data+

Metadata=

Module

Page 9: Managing modular software for your nu get, c++ and java development

Unit of code

Page 10: Managing modular software for your nu get, c++ and java development

Encapsulated

Page 11: Managing modular software for your nu get, c++ and java development

Encapsulated

Page 12: Managing modular software for your nu get, c++ and java development

Discrete

Page 13: Managing modular software for your nu get, c++ and java development

Discrete

Page 14: Managing modular software for your nu get, c++ and java development

Discrete

Page 15: Managing modular software for your nu get, c++ and java development

Reusable

Page 16: Managing modular software for your nu get, c++ and java development

Exposed via APIs

Page 17: Managing modular software for your nu get, c++ and java development

Packages

Page 18: Managing modular software for your nu get, c++ and java development
Page 19: Managing modular software for your nu get, c++ and java development

Modules or Packages?

Technology Package Module

Page 20: Managing modular software for your nu get, c++ and java development

Modules or Packages?

Technology Package ModuleJava package keyword semantics *.jar files, OSGi bundles

Page 21: Managing modular software for your nu get, c++ and java development

Modules or Packages?

Technology Package ModuleJava package keyword semantics *.jar files, OSGi bundlesC++ namespace keyword semantics *.dll files, *.so files

Page 22: Managing modular software for your nu get, c++ and java development

Modules or Packages?

Technology Package ModuleJava package keyword semantics *.jar files, OSGi bundlesC++ namespace keyword semantics *.dll files, *.so filesC# namespace keyword semantics *.dll files, NuGet packages

Page 23: Managing modular software for your nu get, c++ and java development

Modular Software – why?

Page 24: Managing modular software for your nu get, c++ and java development

Discrete Units Are Smaller

Page 25: Managing modular software for your nu get, c++ and java development

Modular Security Control

Page 26: Managing modular software for your nu get, c++ and java development

Multi-Team Agility

Page 27: Managing modular software for your nu get, c++ and java development

Code Sharing

Page 28: Managing modular software for your nu get, c++ and java development

Forcing API

Page 29: Managing modular software for your nu get, c++ and java development

Module Dependency

Page 30: Managing modular software for your nu get, c++ and java development

HOW STUFF PLAYS WITH MODULES

Page 31: Managing modular software for your nu get, c++ and java development

Build Tools and Dependencies

Page 32: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources

Page 33: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources – OK

Page 34: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources – OK2. Bring dependencies

Page 35: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources – OK2. Bring dependencies – where from?

Page 36: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources – OK2. Bring dependencies – where from?3. Build binaries

Page 37: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources – OK2. Bring dependencies – where from?3. Build binaries – OK

Page 38: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources – OK2. Bring dependencies – where from?3. Build binaries – OK4. …

Page 39: Managing modular software for your nu get, c++ and java development

Recipe

1. Take sources – OK2. Bring dependencies – where from?3. Build binaries – OK4. … - now what?

Page 40: Managing modular software for your nu get, c++ and java development

CI Servers and Modules

Page 41: Managing modular software for your nu get, c++ and java development

CI servers run build tools.

Page 42: Managing modular software for your nu get, c++ and java development

CI servers run build tools.

Page 43: Managing modular software for your nu get, c++ and java development

We can do better!

Page 44: Managing modular software for your nu get, c++ and java development

Cascading Builds

Page 45: Managing modular software for your nu get, c++ and java development

Per module results

Page 46: Managing modular software for your nu get, c++ and java development

Wait, while on the CI Servers…

Page 47: Managing modular software for your nu get, c++ and java development

BINARY REPOSITORY AND…

Page 48: Managing modular software for your nu get, c++ and java development

What is Binary Repository

Page 49: Managing modular software for your nu get, c++ and java development

Said who?

Page 50: Managing modular software for your nu get, c++ and java development

Binary Repository Experts

Page 51: Managing modular software for your nu get, c++ and java development

Binary Repository as Modules Source

Page 52: Managing modular software for your nu get, c++ and java development

Binary Repository as Modules Source

Page 53: Managing modular software for your nu get, c++ and java development

Binary Repository as Modules Source

Page 54: Managing modular software for your nu get, c++ and java development

Binary Repositoryas Deployment Target

Page 55: Managing modular software for your nu get, c++ and java development

Binary Repositoryas Deployment Target

Page 56: Managing modular software for your nu get, c++ and java development

Wait a Minute, What’s Wrong With My

Source Control System?!

Page 57: Managing modular software for your nu get, c++ and java development
Page 58: Managing modular software for your nu get, c++ and java development

Sources vs. BinariesSources Binaries

Page 59: Managing modular software for your nu get, c++ and java development

Sources vs. BinariesSources BinariesText Blob

Page 60: Managing modular software for your nu get, c++ and java development

Sources vs. BinariesSources BinariesText BlobDiffable Not diffable

Page 61: Managing modular software for your nu get, c++ and java development

Sources vs. BinariesSources BinariesText BlobDiffable Not diffableVersioned by content

Versioned by name

Page 62: Managing modular software for your nu get, c++ and java development

Sources vs. BinariesSources BinariesText BlobDiffable Not diffableVersioned by content

Versioned by name

Stored by override

Should never override

Page 63: Managing modular software for your nu get, c++ and java development

Versioning By Content

Text

MyPoem.txt(rev. 01)

Page 64: Managing modular software for your nu get, c++ and java development

Versioning By Content

TextMoreText

MyPoem.txt(rev. 02)

Page 65: Managing modular software for your nu get, c++ and java development

Versioning By Content

TextMore Text

MoreText

MyPoem.txt(rev. 03)

Page 66: Managing modular software for your nu get, c++ and java development

Versioning By Content

TextMore Text

More

MyPoem.txt(HEAD)

Page 67: Managing modular software for your nu get, c++ and java development

Mismatch

Text

More TextMore Text

MyPoem.txt

010011010100110110101

010011010011011011010

101001110100110110101

MyBook-1.0.zip

MyBook-1.1.zip

MyBook-2.0.zip

VS.

Page 68: Managing modular software for your nu get, c++ and java development
Page 69: Managing modular software for your nu get, c++ and java development
Page 70: Managing modular software for your nu get, c++ and java development
Page 71: Managing modular software for your nu get, c++ and java development
Page 72: Managing modular software for your nu get, c++ and java development

Git is a Distributed System

Page 73: Managing modular software for your nu get, c++ and java development

R U SURE U WANT 2 CLONE IT ALL?

Page 74: Managing modular software for your nu get, c++ and java development

OK Then, But What’s Wrong With My

File Server?!

Page 75: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Page 76: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Optimize storage size

Page 77: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Proxy other repositories

Optimize storage size

Page 78: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Proxy other repositories

Optimize storage size

Expose REST API

Page 79: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Proxy other repositories

Optimize storage size

Enforce Module Security

Expose REST API

Page 80: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Proxy other repositories

Manage artifact lifecycle

Optimize storage size

Enforce Module Security

Expose REST API

Page 81: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Proxy other repositories

Manage artifact lifecycle

Optimize storage size

Enforce Module Security

Expose REST API

Cleanup SNAPSHOTS

Page 82: Managing modular software for your nu get, c++ and java development

It’s Fine if it knows how to:

Proxy other repositories

Manage artifact lifecycle

Optimize storage size

Enforce Module Security

Expose REST API

Cleanup SNAPSHOTSSearch by name, context and content

Page 83: Managing modular software for your nu get, c++ and java development

BTW, How Many Years It Took?

Page 84: Managing modular software for your nu get, c++ and java development

Binary Repository and CI/CD

Page 85: Managing modular software for your nu get, c++ and java development

CI Server is the Single Source of Truth

Page 86: Managing modular software for your nu get, c++ and java development

Binary Repository is The Single Target of Truth

Page 87: Managing modular software for your nu get, c++ and java development

Save the Truth!

Page 88: Managing modular software for your nu get, c++ and java development

Make Strange Binary Love

Page 89: Managing modular software for your nu get, c++ and java development

Standard of Truth

Page 90: Managing modular software for your nu get, c++ and java development

How Everything Fits Together

Page 91: Managing modular software for your nu get, c++ and java development

How Everything Fits Together

Page 92: Managing modular software for your nu get, c++ and java development

How Everything Fits Together

Page 93: Managing modular software for your nu get, c++ and java development

How Everything Fits Together

Page 94: Managing modular software for your nu get, c++ and java development

How Everything Fits Together

Page 95: Managing modular software for your nu get, c++ and java development

How Everything Fits Together

Page 96: Managing modular software for your nu get, c++ and java development

How Everything Fits Together

Page 97: Managing modular software for your nu get, c++ and java development

Perfect…

Page 98: Managing modular software for your nu get, c++ and java development

You Liked it, didn’t you?

Page 99: Managing modular software for your nu get, c++ and java development

Things to Consider

Page 100: Managing modular software for your nu get, c++ and java development

Lock-in?

Page 101: Managing modular software for your nu get, c++ and java development

Technology Specific?

Page 102: Managing modular software for your nu get, c++ and java development

Features to Look For

Not only MavenNot only JavaBroad CI tools matrix

Build toolsCI Servers

Extensive REST supportEasy to extend

Most boring

slide so

far…

Page 103: Managing modular software for your nu get, c++ and java development

MODULES IN… JAVA

Page 104: Managing modular software for your nu get, c++ and java development

Java package

Page 105: Managing modular software for your nu get, c++ and java development

Fragmentation

Page 106: Managing modular software for your nu get, c++ and java development

The options are:

• OSGi• Jigsaw• Build systems managed–Maven, Gradle, Ivy

Bullets?

Really?

Page 107: Managing modular software for your nu get, c++ and java development
Page 108: Managing modular software for your nu get, c++ and java development
Page 109: Managing modular software for your nu get, c++ and java development
Page 110: Managing modular software for your nu get, c++ and java development
Page 111: Managing modular software for your nu get, c++ and java development
Page 112: Managing modular software for your nu get, c++ and java development
Page 113: Managing modular software for your nu get, c++ and java development
Page 114: Managing modular software for your nu get, c++ and java development

Project Jigsaw

First promise: Java 7 (2008)Current promise: Java 9 (2015)

Page 115: Managing modular software for your nu get, c++ and java development

Project Jigsaw

First promise: Java 7 (2008)Current promise: Java 9 (2015)

Page 116: Managing modular software for your nu get, c++ and java development

Back to plain old

Page 117: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 118: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 119: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 120: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 121: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 122: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 123: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 124: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 125: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 126: Managing modular software for your nu get, c++ and java development

Modular Build in Java

Page 127: Managing modular software for your nu get, c++ and java development

MODULES IN… C++

Page 128: Managing modular software for your nu get, c++ and java development
Page 129: Managing modular software for your nu get, c++ and java development
Page 130: Managing modular software for your nu get, c++ and java development
Page 131: Managing modular software for your nu get, c++ and java development
Page 132: Managing modular software for your nu get, c++ and java development

Module Binaries

Library OS File typeStatic Win *.lib

*nix *.aDynamic Win *.dll

*nix *.so

Page 133: Managing modular software for your nu get, c++ and java development

Managing Dependencies in C++

Page 134: Managing modular software for your nu get, c++ and java development

Managing Dependencies in C++

Page 135: Managing modular software for your nu get, c++ and java development

Make?

Page 136: Managing modular software for your nu get, c++ and java development

Make?

Page 137: Managing modular software for your nu get, c++ and java development

Make?

Page 138: Managing modular software for your nu get, c++ and java development

CMake?

Page 139: Managing modular software for your nu get, c++ and java development

Java-Like (and Java) tools?

Page 140: Managing modular software for your nu get, c++ and java development

Groovy tool!

Page 141: Managing modular software for your nu get, c++ and java development

Modular Build in C++

Page 142: Managing modular software for your nu get, c++ and java development

Modular Build in C++

Page 143: Managing modular software for your nu get, c++ and java development

Modular Build in C++

Page 144: Managing modular software for your nu get, c++ and java development

Modular Build in C++

Page 145: Managing modular software for your nu get, c++ and java development

Modular Build in C++

Page 146: Managing modular software for your nu get, c++ and java development

Modular Build in C++

Page 147: Managing modular software for your nu get, c++ and java development

MODULES IN… .NET

Page 148: Managing modular software for your nu get, c++ and java development

From C++ to C#

Library OS File typeStatic Win *.lib

*nix *.aDynamic Win *.dll

*nix *.so

Page 149: Managing modular software for your nu get, c++ and java development

From C++ to C#

Library Win File typeStatic Win *.libDynamic Win *.dll

Page 150: Managing modular software for your nu get, c++ and java development

Library Win File typeStatic Win *.libDynamic Win *.dll

But is it the Only Change?

?

Page 151: Managing modular software for your nu get, c++ and java development

, Baby!

Page 152: Managing modular software for your nu get, c++ and java development

Modular Build in .NET

Page 153: Managing modular software for your nu get, c++ and java development

Modular Build in .NET

+

Page 154: Managing modular software for your nu get, c++ and java development

Modular Build in .NET

+

Page 155: Managing modular software for your nu get, c++ and java development

Modular Build in .NET

+

Page 156: Managing modular software for your nu get, c++ and java development

DEMO TIME!

Page 157: Managing modular software for your nu get, c++ and java development

The Common Factor

+

Page 158: Managing modular software for your nu get, c++ and java development