SlideShare a Scribd company logo
1 of 29
Download to read offline
STANDARD DEV WORKFLOWSTANDARD DEV WORKFLOW
by /Stefano Corallo @argosoftware
COSACOSA
Codice
Utilizzo di git come unico strumento di
versionamento
Ambiente di sviluppo
Utilizzo di un ambiente comune, uguale per tutti i
componenti del team e quanto più simile possibile
all'ambiente di produzione.
Automazione della build e del rilascio (CI/CD)
Utilizzo di Gitlab per l'automazione dei task
ripetitivi per il build e deploy dell'applicazione
CODICECODICE
Gestione del versionamento secondo un branching
model speci co: "Git flow"
Nessuna "paura" dei conflitti e dei merge
BRANCHING MODELBRANCHING MODEL
COS'ÈCOS'È GIT-FLOWGIT-FLOW ?!??!?
Git-Flow
Git-Flow
branch utilizzo
master codice attualmente in produzione
hotfix utilizzato per i bug- x del codice in
produzione
develop contiene lo sviluppo corrente
feature nuove funzionalità non ancora pronte
per essere integrate in develop
release utilizzato per preparare il rilascio di una
nuova versione
TOOLSTOOLS
Git e Git ow sono integrati in tutti gli IDE. Quindi la
curva di apprendimento è veramente bassa e agevolata
dai tool.
TOOLSTOOLS
Altamente Consigliati
IntelliJ IDEA Community Edition (Free)
Ant Maven
Visual Studio Code
Esempio: Risoluzione gra ca e assistita dei con itti
AMBIENTE DI SVILUPPOAMBIENTE DI SVILUPPO
(1/3) IL PROBLEMA(1/3) IL PROBLEMA HostHost
Ambienti di sviluppo diversi:
windows
linux
mac
(2/3) IL PROBLEMA(2/3) IL PROBLEMA SetupSetup
Setup molto oneroso:
da qualche ora
a qualche giorno
(3/3) IL PROBLEMA(3/3) IL PROBLEMA AggiornamentoAggiornamento
Allineamento con i server di staging/produzione:
oneroso
Librerie diverse per progetti diversi (dipendenze):
oneroso
LA SOLUZIONELA SOLUZIONE
DockerDocker
DOCKERDOCKER
Build: Tutte le dipendenze dell'applicazione sono
contenute nel Dockerfile che crea l'immagine
dell'applicazione
Ship: Le immagini create sono disponibili sul
registry che può essere privato:
registry.myargo.it
Run: L'immagine in esecuzione è chiamata
container.
DOCKERDOCKER FOR DEVELOPERFOR DEVELOPER
Nessuna competenza sistemistica per creare
l'ambiente, ambiente già con gurato .
La modi ca dell'ambiente è un'operazione semplice,
posso fare tutte le prove e customizzazioni che
voglio in maniera semplice in modo da poter
sperimentare in libertà.
DOCKERFILEDOCKERFILE FOR DEVELOPERFOR DEVELOPER
Sencha Cmd
FROM openjdk:7-jre-alpine
LABEL Author="Stefano Corallo <scorallo@argosoft.it>" 
Company="Argo Software"
RUN apk update && apk upgrade && apk --update add 
ruby build-base libstdc++ tzdata bash ttf-dejavu freetype fon
ENV SENCHA_VERSION 6.5.1.240
RUN wget http://cdn.sencha.com/cmd/${SENCHA_VERSION}/no-jre/Sench
-O senchacmd.zip 
&& unzip senchacmd.zip 
&& rm senchacmd.zip 
&& chmod +x SenchaCmd-${SENCHA_VERSION}-linux-amd64.sh
RUN ./SenchaCmd-${SENCHA_VERSION}-linux-amd64.sh -q -dir /opt/Sen
RUN rm SenchaCmd-${SENCHA VERSION}-linux-amd64 sh && chmod +x /op
docker run -v $PWD:/code registry.myargo.it/argo/dockerfiles/senc
DOCKERFILEDOCKERFILE FOR DEVELOPERFOR DEVELOPER
Cartesio
Jboss Admin: http://<DOCKER_HOST>:9990
Jboss Fronted: http://<DOCKER_HOST>:8080
docker pull registry.myargo.it/argo/dockerfiles/cartesio:latest`
docker run -p 8080:8080 
-p 9990:9990 
registry.myargo.it/argo/dockerfiles/cartesio:latest
DOCKERFILEDOCKERFILE FOR DEVELOPERFOR DEVELOPER
Wild y
Jboss Admin: http://<DOCKER_HOST>:9990
Jboss Fronted: http://<DOCKER_HOST>:8080
docker pull registry.myargo.it/argo/dockerfiles/wildfly:latest`
docker run -p 8080:8080 
-p 9990:9990 
registry.myargo.it/argo/dockerfiles/wildlfy:latest
AUTOMAZIONE BUILD E RILASCIAUTOMAZIONE BUILD E RILASCI
AUTOMAZIONEAUTOMAZIONE FOR DEVELOPERFOR DEVELOPER
Si abbatte la possibilità di errori nel rilascio
Non è necessario sapere dove sia/siano i server (no
Putty, SSH, SFTP...)
Bisogna solo pushare il codice nel repository.
Il sistema di CI/CD si occuperà di tutto il resto
AUTOMAZIONEAUTOMAZIONE FOR DEVELOPERFOR DEVELOPER
Showtime: Gecodoc
WHAT'S NEXT?!?WHAT'S NEXT?!?
DevOps Cicle Argo 2.0
KUBERNETESKUBERNETES FOR SYSADMINFOR SYSADMIN
KUBERNETESKUBERNETES FOR SYSADMINFOR SYSADMIN
Kubernetes: deployment automatico, scalabilità e
gestione di applicazioni containerizzate.
Gitlab: utilizzato per il CI
Build, test, creazione e deploy dell'immagine
Kubernetes:
Rolling Update dell'immagine
KUBERNETESKUBERNETES FOR DEVELOPERFOR DEVELOPER
Lo sviluppatore effettua il push sul repository
Gitlab: compile, test?!?, package war
Gitlab: build nuova immagine docker contenente il
war dell'applicazione
Gitlab: deploy su cluster Kubernetes
Kubernetes: effettua il rolling-update
dell'immagine nel cluster
THAT'S ALL FOLKSTHAT'S ALL FOLKS

More Related Content

Similar to Standard Dev Workflow

Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality CodeDaniele Mondello
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazioneDaniele Costarella
 
Development process
Development processDevelopment process
Development processEmidio Croci
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue jsGianfranco Castro
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Daniele Falamesca
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e PostgresqlLucio Grenzi
 
Installazione Qt/Qt Quick per target Android
Installazione Qt/Qt Quick  per target AndroidInstallazione Qt/Qt Quick  per target Android
Installazione Qt/Qt Quick per target AndroidPaolo Sereno
 
Real world Visual Studio Code
Real world Visual Studio CodeReal world Visual Studio Code
Real world Visual Studio CodeRoberto Messora
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceAndrea Dottor
 
Progettato per specialisti del web
Progettato per specialisti del webProgettato per specialisti del web
Progettato per specialisti del webEugenio Uccheddu
 
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...Codemotion
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Matteo Baccan
 

Similar to Standard Dev Workflow (20)

Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazione
 
Development process
Development processDevelopment process
Development process
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Beryl
BerylBeryl
Beryl
 
Total Testing in DevOps
Total Testing in DevOpsTotal Testing in DevOps
Total Testing in DevOps
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Installazione Qt/Qt Quick per target Android
Installazione Qt/Qt Quick  per target AndroidInstallazione Qt/Qt Quick  per target Android
Installazione Qt/Qt Quick per target Android
 
Modernizziamo IBM i con PHP
Modernizziamo IBM i con PHPModernizziamo IBM i con PHP
Modernizziamo IBM i con PHP
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 
Real world Visual Studio Code
Real world Visual Studio CodeReal world Visual Studio Code
Real world Visual Studio Code
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita felice
 
Progettato per specialisti del web
Progettato per specialisti del webProgettato per specialisti del web
Progettato per specialisti del web
 
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
 
X2 Linux Riassunti
X2 Linux RiassuntiX2 Linux Riassunti
X2 Linux Riassunti
 

Standard Dev Workflow

  • 1. STANDARD DEV WORKFLOWSTANDARD DEV WORKFLOW by /Stefano Corallo @argosoftware
  • 2. COSACOSA Codice Utilizzo di git come unico strumento di versionamento Ambiente di sviluppo Utilizzo di un ambiente comune, uguale per tutti i componenti del team e quanto più simile possibile all'ambiente di produzione. Automazione della build e del rilascio (CI/CD) Utilizzo di Gitlab per l'automazione dei task ripetitivi per il build e deploy dell'applicazione
  • 3. CODICECODICE Gestione del versionamento secondo un branching model speci co: "Git flow" Nessuna "paura" dei conflitti e dei merge
  • 6.
  • 7. Git-Flow branch utilizzo master codice attualmente in produzione hotfix utilizzato per i bug- x del codice in produzione develop contiene lo sviluppo corrente feature nuove funzionalità non ancora pronte per essere integrate in develop release utilizzato per preparare il rilascio di una nuova versione
  • 8. TOOLSTOOLS Git e Git ow sono integrati in tutti gli IDE. Quindi la curva di apprendimento è veramente bassa e agevolata dai tool.
  • 9. TOOLSTOOLS Altamente Consigliati IntelliJ IDEA Community Edition (Free) Ant Maven Visual Studio Code
  • 10. Esempio: Risoluzione gra ca e assistita dei con itti
  • 12. (1/3) IL PROBLEMA(1/3) IL PROBLEMA HostHost Ambienti di sviluppo diversi: windows linux mac
  • 13. (2/3) IL PROBLEMA(2/3) IL PROBLEMA SetupSetup Setup molto oneroso: da qualche ora a qualche giorno
  • 14. (3/3) IL PROBLEMA(3/3) IL PROBLEMA AggiornamentoAggiornamento Allineamento con i server di staging/produzione: oneroso Librerie diverse per progetti diversi (dipendenze): oneroso
  • 16. DOCKERDOCKER Build: Tutte le dipendenze dell'applicazione sono contenute nel Dockerfile che crea l'immagine dell'applicazione Ship: Le immagini create sono disponibili sul registry che può essere privato: registry.myargo.it Run: L'immagine in esecuzione è chiamata container.
  • 17. DOCKERDOCKER FOR DEVELOPERFOR DEVELOPER Nessuna competenza sistemistica per creare l'ambiente, ambiente già con gurato . La modi ca dell'ambiente è un'operazione semplice, posso fare tutte le prove e customizzazioni che voglio in maniera semplice in modo da poter sperimentare in libertà.
  • 18. DOCKERFILEDOCKERFILE FOR DEVELOPERFOR DEVELOPER Sencha Cmd FROM openjdk:7-jre-alpine LABEL Author="Stefano Corallo <scorallo@argosoft.it>" Company="Argo Software" RUN apk update && apk upgrade && apk --update add ruby build-base libstdc++ tzdata bash ttf-dejavu freetype fon ENV SENCHA_VERSION 6.5.1.240 RUN wget http://cdn.sencha.com/cmd/${SENCHA_VERSION}/no-jre/Sench -O senchacmd.zip && unzip senchacmd.zip && rm senchacmd.zip && chmod +x SenchaCmd-${SENCHA_VERSION}-linux-amd64.sh RUN ./SenchaCmd-${SENCHA_VERSION}-linux-amd64.sh -q -dir /opt/Sen RUN rm SenchaCmd-${SENCHA VERSION}-linux-amd64 sh && chmod +x /op docker run -v $PWD:/code registry.myargo.it/argo/dockerfiles/senc
  • 19. DOCKERFILEDOCKERFILE FOR DEVELOPERFOR DEVELOPER Cartesio Jboss Admin: http://<DOCKER_HOST>:9990 Jboss Fronted: http://<DOCKER_HOST>:8080 docker pull registry.myargo.it/argo/dockerfiles/cartesio:latest` docker run -p 8080:8080 -p 9990:9990 registry.myargo.it/argo/dockerfiles/cartesio:latest
  • 20. DOCKERFILEDOCKERFILE FOR DEVELOPERFOR DEVELOPER Wild y Jboss Admin: http://<DOCKER_HOST>:9990 Jboss Fronted: http://<DOCKER_HOST>:8080 docker pull registry.myargo.it/argo/dockerfiles/wildfly:latest` docker run -p 8080:8080 -p 9990:9990 registry.myargo.it/argo/dockerfiles/wildlfy:latest
  • 21. AUTOMAZIONE BUILD E RILASCIAUTOMAZIONE BUILD E RILASCI
  • 22.
  • 23. AUTOMAZIONEAUTOMAZIONE FOR DEVELOPERFOR DEVELOPER Si abbatte la possibilità di errori nel rilascio Non è necessario sapere dove sia/siano i server (no Putty, SSH, SFTP...) Bisogna solo pushare il codice nel repository. Il sistema di CI/CD si occuperà di tutto il resto
  • 24. AUTOMAZIONEAUTOMAZIONE FOR DEVELOPERFOR DEVELOPER Showtime: Gecodoc
  • 27. KUBERNETESKUBERNETES FOR SYSADMINFOR SYSADMIN Kubernetes: deployment automatico, scalabilità e gestione di applicazioni containerizzate. Gitlab: utilizzato per il CI Build, test, creazione e deploy dell'immagine Kubernetes: Rolling Update dell'immagine
  • 28. KUBERNETESKUBERNETES FOR DEVELOPERFOR DEVELOPER Lo sviluppatore effettua il push sul repository Gitlab: compile, test?!?, package war Gitlab: build nuova immagine docker contenente il war dell'applicazione Gitlab: deploy su cluster Kubernetes Kubernetes: effettua il rolling-update dell'immagine nel cluster