Ship It or It Never Happened

😰

🤮

🤬

😱

😎

DOGUHAN ULUCA

Shipping Code

Value Stream

Config. Gap

Repeat Intg.

n ➡️ n Deploys

Shipping Code

practice

🙏

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

📝

value

value

quality

Features

Time

Quality

Roy Osherove

Lean

Kanban

Scrum

LeSS

SAFe

SoS

Nexus

Spotify

, forward flow

consistent

of features

"It's not up to them

it's up to us [the developers]"

Ron Jeffries, Chet Hendrickson, deliver:Agile 2018.

repeatable value stream

  • know when and how to say no

  • create a repeatable value stream

Value Stream

GitHub Flow

Branch

Commit

Open Pull Request

Discuss and Review

Deploy

Merge

  • enforce standards

  • isolate changes

  • make it repeatable

💰

🔥

The Configuration Gap

Branch

Merge

Branch

Merge

Ship

The Configuration Gap

Dockerfile

Anatomy of a Dockerfile

FROM
SETUP
COPY
CMD

Anatomy of a Dockerfile

FROM

Dockerfile Inheritance

FROM
FROM
FROM
scratch

Anatomy of a Dockerfile

FROM
SETUP

Security

Dependencies

Docker Security

Host OS
Docker
Runtime
Container
Web Server
App

Anatomy of a Dockerfile

FROM
SETUP
COPY

Security

Dependencies

Copying Code

Host OS
Docker
Runtime
Docker Image
Web Server
App Code

Copying Code

Host OS
Docker
Runtime
minimal-node-web-server
Express.js
Angular
/dist
/usr/src/app

Anatomy of a Dockerfile

FROM
SETUP
COPY
CMD

Security

Dependencies

Anatomy of a Dockerfile

FROM
SETUP
COPY
CMD

Security

Dependencies

npm Scripts for Docker

bit.ly/npmScriptsForDocker

  • Create living documentation

  • Achieve DevOps

  • Close the configuration gap

Repeatable Integration

.circleci/config.yml

.circleci/config.yml

FROM
jobs
build
deploy

.circleci/config.yml

FROM
build
env
steps

Docker

checkout

run

store build artifacts

store test results

Multi-Stage Dockerfile

FROM
FROM
FROM
as builder
as tester
COPY
from builder
CMD

copy end result

duluca/lemon-mart

FROM
FROM
FROM
as builder
as tester
COPY
from builder
CMD

minimal-node-build-env

alpine-node-chromium

minimal-nginx-web-server

50+ Mb

200+ Mb

7 Mb

Execution

docker build -f Dockerfile.integration . -t lemon-mart

github.com/duluca/lemon-mart

  • Use declarative tools

  • Achieve Infrastructure-as-Code

  • Repeatable Integration

n ➡️ n Deployments

Local build

CI-x build

...

.circleci/config.yml

FROM
jobs
build
deploy

.circleci/config.yml

FROM
deploy
restore
steps

 Build artifact

Sign in to container repo

Publish to repo

Trigger deployment

npm Script for AWS

bit.ly/npmScriptsForAWS

npm run aws:fargate-release
heroku container:push web -a lemon-mart
now --docker --public
  • Use declarative tools

  • Achieve Infrastructure-as-Code

  • Repeatable deployments

  • n ➡️ n Flexibility

Shipping Code

Value Stream

Config. Gap

Repeat Intg.

n ➡️ n Deploys

⛴ 👈 or 👉 😣 🤷

AngularForEnterprise.com

for discount codes visit