Mais conteúdo relacionado Semelhante a TDD e Continuous Delivery sull'infrastruttura (20) TDD e Continuous Delivery sull'infrastruttura4. agile + IT operations?
photo credit: https://www.flickr.com/photos/kalexanderson/6354182139/
7. le 3 leggi del TDD
photo credit: https://www.flickr.
com/photos/oldpatterns/5837733407/
8. 1
Non scriverai codice di
produzione finché non avrai
scritto un test che fallisce
9. 2
Non scriverai più di un test che sia
sufficiente a provocare un
fallimento, e la non compilazione è
un fallimento
10. 3
Non scriverai più codice di
produzione di quanto ne serva per
passare il test corrente
12. perchè?
abbatte la complessità
soluzione di un problema complesso
→ soluzione di problemi più semplici
13. i benefici
criterio di accettazione implicito
specifica eseguibile
suite di regressione completa
feedback immediato e continuo
14. le difficoltà?
richiede disciplina
cambiare le abitudini è difficile
il management non capisce la qualità interna
16. benefici
si vede se abbiamo costruito la cosa giusta
release frequenti -> meno rischi per release
indicatore reale di avanzamento
17. obiettivi
aumentare la qualità
diminuire il cycle time
CYCLE TIME = tempo per portare una
modifica di una linea di codice in
produzione
19. il problema
il costo per l'integrazione aumenta con:
numero di bug
numero di componenti
tempo trascorso dall'ultima integrazione
21. i benefici
i problemi si trovano subito
si trovano facilmente
meno rischi
feedback rapido
nessun punto cieco nel processo
predizioni più accurate
22. le 10 pratiche
photo credit: https://www.flickr.com/photos/edenpictures/3813227079/
23. 1
un solo rep ository
tutto quello che serve deve essere versionato
25. 3
test automatici
dai sorgenti ai test che girano
nessun intervento manuale
nessuna modifica dell'ambiente
27. 5
integrazione a ogni commit
build di riferimento
monitor dello stato del repository
massima priorità alla build funzionante
28. 6
build veloce
<10min
feedback immediato
divisione in stage (pipeline)
29. 7
su un clone di produzione
stessi problemi che si verificherebbero in produzione
ambiente identico
sistema operativo
librerie
hardware
rete
30. 8
ultimo artefatto accessibile
demo e test sempre disponibili
chiaramente identificabile da tutti
31. 9
tutti vedono cosa succede
comunicazione immediata dello stato
pubblicamente accessibile
37. struttura
sequenza di stage
se uno stage fallisce la pipeline si blocca
ogni commit genera una nuova pipeline
41. la potenza del testo
collaborazione + automazione
trasferimento della conoscenza
tooling
48. source code
repository
CI server
production
image
commit
test image
dev box
checkout
provision
provision run tests
54. ---
driver:
name: vagrant
provisioner:
name: chef_solo
platforms:
- name: ubuntu-14.04
suites:
- name: default
run_list:
- recipe[git::default]
git-cookbook/.kitchen.yml
58. ======================================
Recipe Compile Error
========================================
Chef::Exceptions::RecipeNotFound
--------------------------------
could not find recipe default for cookbook git
>>>>>> Converge failed on instance <default-ubuntu-
1404>.
63. Package "git"
should be installed
Finished in 0.21441 seconds (files took 0.36317
seconds to load)
1 example, 0 failures
Finished verifying <default-ubuntu-1404> (0m33.
52s).
-----> Kitchen is finished. (1m31.77s)
65. {
"variables": {
"aws_access_key": null,
"aws_secret_key": null
},
...
packer.json - 1
66. ...
"builders": [{
packer.json - 2
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "eu-west-1",
"ami_virtualization_type": "hvm",
"source_ami": "ami-28ff505f",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "git"
}]
...
67. ...
"provisioners": [
packer.json - 3
{
"type": "chef-solo",
"cookbook_paths": ["berks-cookbooks"],
"run_list": ["git::default"]
}
]
}
70. $ packer build
-var 'aws_access_key=YOUR ACCESS KEY'
-var 'aws_secret_key=YOUR SECRET KEY'
packer.json
71. ==> Builds finished. The artifacts of successful
builds are:
--> amazon-ebs: AMIs were created:
eu-west-1: ami-ac3199db
73. {
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "Git box",
"Parameters" : {
"AmiId" : {
"Type" : "String"
}
},
...
cloudformation.json - 1
74. ...
"Resources" : {
cloudformation.json - 2
"Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : { "Ref" : "AmiId" },
"KeyName" : "git-box-key",
"InstanceType" : "t2.micro"
}
}
}
}
75. $ aws cloudformation create-stack
--stack-name git-box
--region eu-west-1
--template-body file://./cloudformation.json
--parameters ParameterKey=AmiId,
ParameterValue=ami-ac3199db