CI:CD Co to? Po co? Jak? - Jerzy Wickowski · SPOSOBY KONFIGURACJI - PROBLEM II NOWE ŚRODOWISKO...

Preview:

Citation preview

CI/CD - CO TO? PO CO? JAK?

JERZY WICKOWSKIPROGRAMUJĘ 10 LAT .NET I INNE CLEAN CODE REFAKTORING DEVOPS

JerzyWickowski.pl

CI/CD - CO TO? PO CO? JAK?

AGENDA

▸ WPROWADZENIE POJĘĆ

▸ SPOSOBY KONFIGURACJI CI

▸ IMPLEMENTACJA CONTINOUS DEPLOYMENT

▸ PYTANIA

JerzyWickowski.pl

WPROWADZENIE POJĘĆ

WPROWADZENIE POJĘĆ

INTEGRACJA

▸ Ręczna

▸ Build

▸ Test

▸ Automatyczna

▸ Build Scripts

JerzyWickowski.pl

BUILD SCRIPTS

BAT CAKE EXE PS1

JerzyWickowski.pl

WPROWADZENIE POJĘĆ - CONTINOUS INTEGRATION

CONTINOUS INTEGRATION

▸ Jak?

▸ Commit do repo

▸ Trigger server CI

▸ Run integration

▸ Po co?

▸ Automatyczne tworzenie paczki

JerzyWickowski.pl

PACZKA

BINARKI OBRAZKI FILMY MUZYKA + DEPLOY SCRIPT

JerzyWickowski.pl

DEPLOY SCRIPT

PRZYGOTOWUJE KOPIUJE MIGRUJE INSTALUJE

JerzyWickowski.pl

CONTINOUSDEPLOYMENT DELIVERY

JerzyWickowski.pl

WPROWADZENIE POJĘĆ - CONTINOUS DELIVERY / DEPLOYMENT

ŚRODOWISKA

PACZKA

DEV TEST STAGING PROD

JerzyWickowski.pl

WPROWADZENIE POJĘĆ - CONTINOUS DELIVERY / DEPLOYMENT

ŚRODOWISKA A DEPLOY SCRIPTS

DEV TEST STAGING PROD

DEPLOY SCRIPTS A

DEPLOY SCRIPTS BPACZKA

JerzyWickowski.pl

WPROWADZENIE POJĘĆ - CONTINOUS DELIVERY / DEPLOYMENT

RÓŻNICA POMIĘDZY CONTINOUS DELIVERY A DEPLOYMENT

DEV TEST

PROD

AUTOMATIC DEPLOYMENT

MANUAL DELIVERY

STAGING

JerzyWickowski.pl

WPROWADZENIE POJĘĆ - PODSUMOWANIE

PODSUMOWANIE

▸ Continous Integration

▸ Continous Delivery

▸ Dontinous Deployment

▸ Build Scripts

▸ Deploy Scripts

▸ Package

JerzyWickowski.pl

SPOSOBY KONFIGURACJI

REFAKTORINGPROBLEM I

SPOSOBY KONFIGURACJI - PROBLEM I

REFAKTORING

REPO CI SERVER

FOO.CSPROJ

TEST.DLL

BUILD FOO.CSPROJ TEST TEST.DLL

JerzyWickowski.pl

SPOSOBY KONFIGURACJI - PROBLEM I

REFAKTORING

REPO CI SERVER

BAR.CSPROJ

UNITTEST.DLL

BUILD BAR.CSPROJ TEST UNITTEST.DLL

ZMIANA! ZMIANA!

JerzyWickowski.pl

SPOSOBY KONFIGURACJI - PROBLEM I

REFAKTORING ROZWIĄZANIE

REPO CI SERVERBAR.CSPROJ

UNITTEST.DLL RUN BUILD

RUN TESTBUILD

SCRIPTS

BEZ ZMIAN!

JerzyWickowski.pl

SPOSOBY KONFIGURACJI - PROBLEM I

BUILD SCRIPTS

▸ Nie zmieniamy konfigracji CI

▸ Lokalne buildy

▸ Wersjonowanie

▸ Budowanie starszej wersji

JerzyWickowski.pl

NOWE ŚRODOWISKOPROBLEM II

SPOSOBY KONFIGURACJI - PROBLEM II

NOWE ŚRODOWISKO

PACZKA CDPLIKI

DEPLOY SCRIPT APP-DEV

RUN APP-DEV

JerzyWickowski.pl

SPOSOBY KONFIGURACJI - PROBLEM II

NOWE ŚRODOWISKOPACZKA

CDPLIKI

DEPLOY SCRIPT APP-DEV

RUN APP-DEV

DEPLOY SCRIPT APP-TEST

ZMIANA!ZMIANA!

RUN APP-TEST

JerzyWickowski.pl

PACZKA

SPOSOBY KONFIGURACJI - PROBLEM II

NOWE ŚRODOWISKO

CDPLIKI

DEPLOY SCRIPTS DEPLOY APP +

PARAMETRY

RUN APP -DBNAME ‘DEVDB’

BEZ ZMIAN!

RUN APP -DBNAME ‘TESTDB’

JerzyWickowski.pl

SPOSOBY KONFIGURACJI - PROBLEM II

DEPLOY SCRIPTS

▸ Nie zmieniamy kodu

▸ Lokalny deploy

▸ Wersjonowanie

▸ Budowanie starszej wersji

▸ Infrastructure as a code

JerzyWickowski.pl

NOWE APIPROBLEM III

SPOSOBY KONFIGURACJI - PROBLEM III

NOWE API

▸ Zmiany

▸ Kod źródłowy

▸ Build skrypty

▸ Deploy skrypty

▸ Server CI

▸ Rozwiązanie

▸ CI config as a code

▸ YAML

JerzyWickowski.pl

SPOSOBY KONFIGURACJI - PROBLEM III

YAML

▸ Konfiguracja CI

▸ Ograniczamy

▸ Build scripts

▸ Deploy Scripty

▸ Wersjonowanie

▸ Budowanie starszej wersji

JerzyWickowski.pl

EVERYTHING AS CODE

BUILD AS A CODE DEPLOY AS A CODE INFRASTRUCTURE AS A CODE CI CONFIG AS A CODE

SPOSOBY KONFIGURACJI - PODSUMOWANIE

SRP DLA CI

▸ Build Script - wie o kodzie i wie jak budować

▸ Deploy Script - wie o paczce i wie jak deplojować

▸ CI - wie kiedy

▸ CD - wie gdzie deplojować

JerzyWickowski.pl

CONTINUOUS DEPLOYMENT

CONTINUOUS DEPLOYMENT

CO TO?

PROD

AUTOMATIC DEPLOYMENT

MANUAL DELIVERY

STAGING

JerzyWickowski.pl

CONTINUOUS DEPLOYMENT

ZALETY

▸ Szybkie dostarczanie

▸ Stabilne release

▸ Szybki feedback

▸ Wymusza dobre praktyki

JerzyWickowski.pl

ZMIANA SPOSOBU MYŚLENIA

BRANCZE

KTÓRY DEPLOJOWAĆ? GIT FLOW? RELEASE BRANCH? TYLKO MASTER!

KOD W REPO NIE MUSI DZIAŁAĆ, ALE NIE MOŻE NIC PSUĆ!

Człowiek mądry

CONTINUOUS DEPLOYMENT - BRANCZE JerzyWickowski.pl

CONTINUOUS DEPLOYMENT - BRANCZE

ZMIANY BEZ PSUCIA

▸ Nowa funkcjonalność

▸ Zmiana istniejącego kodu

▸ if (false) { newCode(); }

▸ else { oldCode(); }

▸ A duży refaktoring?

JerzyWickowski.pl

REFAKTORING TO ZBIÓR MAŁYCH KROKÓW POPRAWIAJĄCYCH STRUKTURĘ KODU

Martin Fowler

CONTINUOUS DEPLOYMENT - BRANCZE JerzyWickowski.pl

BRANCH PER ABSTRACTION

INTERFEJS IMPLEMENTACJA STRATEGIA IOC

SWITCH CONFIG

JSON XML CSV

CONTINUOUS DEPLOYMENT - FEATURE SWITCH

FEATURE SWITCH - CYKL ŻYCIA

DODAJ SWITCH

USUŃ SWITCHPRACUJ

JerzyWickowski.pl

BIZNESOWYFEATURE SWITCH

CONTINUOUS DEPLOYMENT - FEATURE SWITCH

FEATURE SWITCH DASHBOARD

dev test prod

feature1 V V V

feature2 X V V

Feature3 V V X

JerzyWickowski.pl

CONTINUOUS DEPLOYMENT - FEATURE SWITCH

DODATKOWE ZALETY SWITCHY

▸ Wyłączanie bugów

▸ Optymalizacja świąteczna

▸ Deploy, a release

▸ Testy A/B

JerzyWickowski.pl

ROLLBACK

V1.0 V1.0

V1.1 V1.1

V1.0

V1.2 V1.2

Rollback ASAP as possible

CONTINUOUS DEPLOYMENT

BRAMKI

▸ CI - Unit testy, analiza statyczna

▸ Test - Testy integracyjne, UI testy, api test

▸ Staging - wydajność, deploy

JerzyWickowski.pl

DOWNTIMEZERO

RELEASE

RELEASE

GREEN BLUE DEPLOYMENT

JerzyWickowski.pl

MONITORING

BŁĘDY SERWERA BŁĘDY KLIENTA WYDAJNOŚĆ ZGŁOSZENIA UŻYTKOWNIKÓW

RELEASE

CANARY DEPLOYMENT

JerzyWickowski.pl

RELEASE

CANARY DEPLOYMENT

JerzyWickowski.pl

RELEASE

CANARY DEPLOYMENT

JerzyWickowski.pl

RELEASE

CANARY DEPLOYMENT

JerzyWickowski.pl

RELEASE NOTESBACKLOG

NIE CHODZI O TO BY ZŁAPAĆ KRÓLICZKA, ALE BY GONIĆ GO!

Skaldowie

CI/CD - CO TO? PO CO? JAK? JerzyWickowski.pl

PROŚBA

PROSZĘ O OPINIĘ

▸ Email: kontakt@jerzywickowski.pl

▸ Blog: jerzywickowski.pl

▸ Instagram: jerzywickowski_pl

▸ YouTube, Twitter, Facebook

JerzyWickowski.pl

JerzyWickowski.pl

PYTANIA?DZIĘKUJĘ