Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Continuous Delivery
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
lszydlo
May 26, 2017
Technology
92
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Continuous Delivery
lszydlo
May 26, 2017
More Decks by lszydlo
See All by lszydlo
Dlaczego dowozimy wolno?
lszydlo
0
85
DDD - o jeden krok za dalego
lszydlo
0
1.6k
Architectural Anti-patterns
lszydlo
1
470
Other Decks in Technology
See All in Technology
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
450
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
170
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.8k
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
230
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
470
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
1.2k
Kiro Crewをはじめよう
kizawa2020
1
160
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
420
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
Featured
See All Featured
Done Done
chrislema
187
17k
Fireside Chat
paigeccino
43
4.1k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Exploring anti-patterns in Rails
aemeredith
4
540
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Deep Space Network (abreviated)
tonyrice
0
370
Docker and Python
trallard
47
4.2k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Faster Mobile Websites
deanohume
310
32k
Being A Developer After 40
akosma
92
590k
Transcript
Łukasz Szydło
[email protected]
Continuous Delivery
Survey Quick survey
What is CD? Our highest priority is to satisfy the
customer through early and continuous delivery of valuable software.
Technics - automated testing - continuous integration - continuous inspection
- continuous deployment
Technics - automated testing - continuous integration - continuous inspection
- continuous deployment
Definition Release = Deploy
Definition Release = Deploy Release - make feature accessible to
users
Definition Release = Deploy Release - make feature accessible to
users Deploy - put code artifact on server
Definition Release != Deploy Release - make feature accessible to
users Deploy - put code artifact on server
How to release it? Release
Branches slow you down { “Source” : “http://www.whitewolfpack.com/2012/10/hapless-lion-cubs-clumsy-bid-to-climb.html”}
Branches slow you down { “Source” : “http://nvie.com/posts/a-successful-git-branching-model/”}
Branches slow you down { “Source” : “http://www.uni-2.co.uk/latest_news/7-best-things-to-get-your-hand-stuck-in/”}
Introducing changes Branches as Code
Introducing changes Feature Switches
Release
Introducing changes Branching by abstraction
Introducing changes class DefaultPurchaseService implements PurchaseService { public Money calculateRabat(OrderNumber
orderNo){ Order order = ordersRepository.load(orderNo); RabatPolicy rabatPolicy = rabatPolicyFactory.get(); Money rabatValue = order.calculateRabat(rabatPolicy); return rabatValue; } public void addProduct(OrderNumber orderNo, ProductNumber productNo, Quantity quantity){ Product product = productsRepository.load(productNo); Order order = ordersRepository.load(orderNo); order.addProduct(product, quantity,); ordersRepo.save(order); } }
Introducing changes class DefaultRabatPolicyFactory implements RabatPolicyFactory { Map<Name, RabatPolicy> map
= newMap() .put(“default”, new DefRP()) .put(“newShiny”, new NewRP()) public RabatPolicy create(){ if(featureSwitcher.isNewRabatPolicyActive()) { return map.get(newShiny); } else { return map.get(default); } } }
Definition Safety Net Automated tests Application monitoring
Automatic testing How much coverage is enought?
Automatic testing Bugs - user can’t complete some action -
user can complete action wrong
Automatic testing Input Output Application Logic
Automatic testing Web DB Application Logic
Automatic testing Web DB Application Logic
Architecture Web DB Application Logic
Architecture Web DB Application Logic Security Config External … …
Architecture Do you remember PC? { “Source” : “https://st-julians-itgs.wikispaces.com/file/view/Ports.png/168851031/Ports.png”}
Architecture Web DB Application Logic Security Config External … …
Ports&Adapters/Hexagonal/Onion Architecture { “Source” : “http://www.natpryce.com/articles/000772.html”}
About me Programmer/Architect/Consultant Writes code mostly in Java Specializes in
DDD, CD, BDD Trainer at Bottega IT Solutions Branch free since 2010 (with small break)
[email protected]
Q&A Q&A