Ship It or It Never Happened
😰
🤮
🤬
😱
😎
DOGUHAN ULUCA
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868294/Excella_Horizontal_white.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868303/seal-csp-sm.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868302/seal-csp-po.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4208238/GitHub-Mark-Light-120px-plus.png)
Shipping Code
Value Stream
Config. Gap
Repeat Intg.
n ➡️ n Deploys
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936488/ShipItOrItNeverHappened.png)
Shipping Code
practice
🙏
❌
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
📝
![](https://media.giphy.com/media/l41lY9ZwYrgevgWsw/giphy.gif)
![](https://media.giphy.com/media/1hrRDfXTUw2pa/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868421/kisspng-is-the-glass-half-empty-or-half-full-water-shot-g-water-glass-5abbf6afe44e26.0039658815222678239351.png)
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.
![](https://media.giphy.com/media/sZn9IDozfRlGo/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936034/IMG_370B97EE1876-1.jpeg)
repeatable value stream
![](https://media.giphy.com/media/sZn9IDozfRlGo/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936032/IMG_5B7636D949E4-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936033/IMG_DE34CDCFEF8C-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936030/IMG_FF495EC96338-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936028/IMG_BAF429EB2A34-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936027/IMG_15B13A5A2E76-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936026/IMG_3A5D6E5A0FFA-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936025/IMG_F035A3AFEA17-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936022/IMG_DB80D340733A-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936023/IMG_B6E76EF7867A-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936021/IMG_9D197EDC6C1C-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868445/IMG_172FF926D5E7-1.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936017/IMG_1E13A115736B-1.jpeg)
-
know when and how to say no
-
create a repeatable value stream
Value Stream
GitHub Flow
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868476/github1.png)
Branch
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868475/github2.png)
Commit
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868474/github3.png)
Open Pull Request
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868473/github4.png)
Discuss and Review
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868472/github5.png)
Deploy
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4868471/github6.png)
Merge
-
enforce standards
-
isolate changes
-
make it repeatable
💰
🔥
The Configuration Gap
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936221/github7.png)
Branch
Merge
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936179/github8.png)
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
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/2840995/web.png)
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
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936549/circle_ci_signup.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936551/circle_ci_add_project.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936550/circle_ci_passing_build.png)
.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
...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936535/1_o_bekXjEb8aHFzEA0y5b4Q.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936538/CircleCI.png)
.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
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4953729/white-bg-text-logo-1200_copy.png)
-
Use declarative tools
-
Achieve Infrastructure-as-Code
-
Repeatable deployments
-
n ➡️ n Flexibility
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4941134/aws-fargate-cluster-detail.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4941136/exc-cluster-aws.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4941135/aws-fargate-cluster.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936562/aws_repository_created.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936557/aws_task_definition.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936559/aws_service.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936553/aws_metrics.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4941134/aws-fargate-cluster-detail.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4941117/bluegreen-deployment.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4208238/GitHub-Mark-Light-120px-plus.png)
Shipping Code
Value Stream
Config. Gap
Repeat Intg.
n ➡️ n Deploys
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4936488/ShipItOrItNeverHappened.png)
⛴ 👈 or 👉 😣 🤷
![](https://s3.amazonaws.com/media-p.slid.es/uploads/144930/images/4935939/Angular6EnterpriseWebApps.png)
AngularForEnterprise.com
for discount codes visit