Feedback en continu
grâce au TDD
et au As Code
-@hrambelo @gcollic
#AgileLaval17 @gcollic - @hrambelo
TDD
From Growing Object-Oriented Software by Nat Pryce and Steve Freeman.
#AgileLaval17 @gcollic - @hrambelo
Démo
#AgileLaval17 @gcollic - @hrambelo
TDD
From Growing Object-Oriented Software by Nat Pryce and Steve Freeman.
#AgileLaval17 @gcollic - @hrambelo
ATDD
From Growing Object-Oriented Software by Nat Pryce and Steve Freeman.
#AgileLaval17 @gcollic - @hrambelo
Feedback
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Intégration Continue
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Intégration Continue
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Intégration Continue
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Le test automatique
Ne coûte pas plus cher à être exécuté
plus souvent
Communique et documente comment
les choses fonctionnent
Correspond vraiment à ce qui est fait
(obsolescence de l'écrit)
Est plus déterministe qu'un humain
Est versionnable !
#AgileLaval17 @gcollic - @hrambelo
Le build automatique
Ne coûte pas plus cher à être exécuté
plus souvent
Communique et documente comment
les choses fonctionnent
Correspond vraiment à ce qui est fait
(obsolescence de l'écrit)
Est plus déterministe qu'un humain
Est versionnable !
#AgileLaval17 @gcollic - @hrambelo
Le code !
Ne coûte pas plus cher à être exécuté
plus souvent
Communique et documente comment
les choses fonctionnent
Correspond vraiment à ce qui est fait
(obsolescence de l'écrit)
Est plus déterministe qu'un humain
Est versionnable !
#AgileLaval17 @gcollic - @hrambelo
"As Code"
eats the World
#AgileLaval17 @gcollic - @hrambelo
Speci cation As Code (BDD/ATDD)
Documentation As Code
Build Pipeline As Code
Infrastructure As Code
...
#AgileLaval17 @gcollic - @hrambelo
Biz Dev Ops (*)
* From yesterday's #devopsnight
#AgileLaval17 @gcollic - @hrambelo
ALL THE THINGS As Code
#AgileLaval17 @gcollic - @hrambelo
Specification As Code
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
From Speci cation By Example by Gojko Adzic.
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Documentation as code
Living Documentation
Markdown
Asciidoc
Swagger
#AgileLaval17 @gcollic - @hrambelo
Living Documentation
From by Cyrille Martrairehttps://leanpub.com/livingdocumentation
#AgileLaval17 @gcollic - @hrambelo
Living Documentation
From by Cyrille Martrairehttps://leanpub.com/livingdocumentation
#AgileLaval17 @gcollic - @hrambelo
Markdown
From https://mastercaweb.u-strasbg.fr/rediger-web-markdown/
#AgileLaval17 @gcollic - @hrambelo
Asciidoc
#AgileLaval17 @gcollic - @hrambelo
Swagger
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Build pipeline As Code
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Infrastructure as code
Puppet recipe
Playbook ansible
Docker le
Docker compose le
#AgileLaval17 @gcollic - @hrambelo
Puppet
package { 'ssh' :
ensure => latest
}
file { 'sshd_config' :
path => '/etc/ssh/sshd_config',
owner => root,
group => root,
require => Package[ssh],
notify => Service[ssh],
...
}
service { 'ssh' :
ensure => running
}
From https://github.com/aestasit.
#AgileLaval17 @gcollic - @hrambelo
Puppet
package { 'ssh' :
ensure => latest
}
file { 'sshd_config' :
path => '/etc/ssh/sshd_config',
owner => root,
group => root,
require => Package[ssh],
notify => Service[ssh],
...
}
service { 'ssh' :
ensure => running
}
From https://github.com/aestasit.
#AgileLaval17 @gcollic - @hrambelo
Playbook ansible
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
#AgileLaval17 @gcollic - @hrambelo
Playbook ansible
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
#AgileLaval17 @gcollic - @hrambelo
Dockerfile
FROM java:8
ADD spring-petclinic /app
ENV M2_HOME /app
EXPOSE 8080
WORKDIR /app
RUN chmod a+x /app/mvnw
RUN ls /app/mvnw
RUN /bin/bash -c '/app/mvnw -e clean install spring-boot:repackage -DskipTests'
CMD /app/mvnw -e spring-boot:run -DskipTests
From https://github.com/aestasit.
#AgileLaval17 @gcollic - @hrambelo
Dockerfile
FROM java:8
ADD spring-petclinic /app
ENV M2_HOME /app
EXPOSE 8080
WORKDIR /app
RUN chmod a+x /app/mvnw
RUN ls /app/mvnw
RUN /bin/bash -c '/app/mvnw -e clean install spring-boot:repackage -DskipTests'
CMD /app/mvnw -e spring-boot:run -DskipTests
From https://github.com/aestasit.
#AgileLaval17 @gcollic - @hrambelo
Dockerfile
FROM java:8
ADD spring-petclinic /app
ENV M2_HOME /app
EXPOSE 8080
WORKDIR /app
RUN chmod a+x /app/mvnw
RUN ls /app/mvnw
RUN /bin/bash -c '/app/mvnw -e clean install spring-boot:repackage -DskipTests'
CMD /app/mvnw -e spring-boot:run -DskipTests
From https://github.com/aestasit.
docker run -d my_bootiful_petclinic
#AgileLaval17 @gcollic - @hrambelo
Docker compose file
version: '2'
services:
elasticsearch:
build: elasticsearch/
...
ports:
- "9200:9200"
- "9300:9300"
logstash:
build: logstash/
...
ports:
- "5000:5000"
depends_on:
- elasticsearch
kibana:
build: kibana/
...
ports:
- "5601:5601"
depends_on:
- elasticsearch
#AgileLaval17 @gcollic - @hrambelo
Docker compose file
version: '2'
services:
elasticsearch:
build: elasticsearch/
...
ports:
- "9200:9200"
- "9300:9300"
logstash:
build: logstash/
...
ports:
- "5000:5000"
depends_on:
- elasticsearch
kibana:
build: kibana/
...
ports:
- "5601:5601"
depends_on:
- elasticsearch
#AgileLaval17 @gcollic - @hrambelo
Docker compose file
version: '2'
services:
elasticsearch:
build: elasticsearch/
...
ports:
- "9200:9200"
- "9300:9300"
logstash:
build: logstash/
...
ports:
- "5000:5000"
depends_on:
- elasticsearch
kibana:
build: kibana/
...
ports:
- "5601:5601"
depends_on:
- elasticsearch
#AgileLaval17 @gcollic - @hrambelo
Biz Dev Ops
#AgileLaval17 @gcollic - @hrambelo
What DevOps ?
CULTURE MEASUREMENT
AUTOMATION SHARING
TDD
* as Code
* as Code
#AgileLaval17 @gcollic - @hrambelo
Questions ?
Hello Slides As Code
<section style="display: block;">
<h1>Titre</h1>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
<div class="slide-background "></div></section>
https://github.com/hrambelo/AgileLaval2017
Merci !
#AgileLaval17 @gcollic - @hrambelo
#AgileLaval17 @gcollic - @hrambelo
Démo
#AgileLaval17 @gcollic - @hrambelo

Feedback en continu grâce au TDD et au AsCode

  • 1.
    Feedback en continu grâceau TDD et au As Code -@hrambelo @gcollic #AgileLaval17 @gcollic - @hrambelo
  • 2.
    TDD From Growing Object-OrientedSoftware by Nat Pryce and Steve Freeman. #AgileLaval17 @gcollic - @hrambelo
  • 3.
  • 4.
    TDD From Growing Object-OrientedSoftware by Nat Pryce and Steve Freeman. #AgileLaval17 @gcollic - @hrambelo
  • 5.
    ATDD From Growing Object-OrientedSoftware by Nat Pryce and Steve Freeman. #AgileLaval17 @gcollic - @hrambelo
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
    Le test automatique Necoûte pas plus cher à être exécuté plus souvent Communique et documente comment les choses fonctionnent Correspond vraiment à ce qui est fait (obsolescence de l'écrit) Est plus déterministe qu'un humain Est versionnable ! #AgileLaval17 @gcollic - @hrambelo
  • 15.
    Le build automatique Necoûte pas plus cher à être exécuté plus souvent Communique et documente comment les choses fonctionnent Correspond vraiment à ce qui est fait (obsolescence de l'écrit) Est plus déterministe qu'un humain Est versionnable ! #AgileLaval17 @gcollic - @hrambelo
  • 16.
    Le code ! Necoûte pas plus cher à être exécuté plus souvent Communique et documente comment les choses fonctionnent Correspond vraiment à ce qui est fait (obsolescence de l'écrit) Est plus déterministe qu'un humain Est versionnable ! #AgileLaval17 @gcollic - @hrambelo
  • 17.
    "As Code" eats theWorld #AgileLaval17 @gcollic - @hrambelo
  • 18.
    Speci cation AsCode (BDD/ATDD) Documentation As Code Build Pipeline As Code Infrastructure As Code ... #AgileLaval17 @gcollic - @hrambelo
  • 19.
    Biz Dev Ops(*) * From yesterday's #devopsnight #AgileLaval17 @gcollic - @hrambelo
  • 20.
    ALL THE THINGSAs Code #AgileLaval17 @gcollic - @hrambelo
  • 21.
  • 22.
  • 23.
    From Speci cationBy Example by Gojko Adzic. #AgileLaval17 @gcollic - @hrambelo
  • 24.
  • 25.
    Documentation as code LivingDocumentation Markdown Asciidoc Swagger #AgileLaval17 @gcollic - @hrambelo
  • 26.
    Living Documentation From byCyrille Martrairehttps://leanpub.com/livingdocumentation #AgileLaval17 @gcollic - @hrambelo
  • 27.
    Living Documentation From byCyrille Martrairehttps://leanpub.com/livingdocumentation #AgileLaval17 @gcollic - @hrambelo
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
    Build pipeline AsCode #AgileLaval17 @gcollic - @hrambelo
  • 33.
  • 34.
    Infrastructure as code Puppetrecipe Playbook ansible Docker le Docker compose le #AgileLaval17 @gcollic - @hrambelo
  • 35.
    Puppet package { 'ssh': ensure => latest } file { 'sshd_config' : path => '/etc/ssh/sshd_config', owner => root, group => root, require => Package[ssh], notify => Service[ssh], ... } service { 'ssh' : ensure => running } From https://github.com/aestasit. #AgileLaval17 @gcollic - @hrambelo
  • 36.
    Puppet package { 'ssh': ensure => latest } file { 'sshd_config' : path => '/etc/ssh/sshd_config', owner => root, group => root, require => Package[ssh], notify => Service[ssh], ... } service { 'ssh' : ensure => running } From https://github.com/aestasit. #AgileLaval17 @gcollic - @hrambelo
  • 37.
    Playbook ansible --- - hosts:webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version yum: name=httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name=httpd state=started enabled=yes handlers: - name: restart apache service: name=httpd state=restarted #AgileLaval17 @gcollic - @hrambelo
  • 38.
    Playbook ansible --- - hosts:webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version yum: name=httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name=httpd state=started enabled=yes handlers: - name: restart apache service: name=httpd state=restarted #AgileLaval17 @gcollic - @hrambelo
  • 39.
    Dockerfile FROM java:8 ADD spring-petclinic/app ENV M2_HOME /app EXPOSE 8080 WORKDIR /app RUN chmod a+x /app/mvnw RUN ls /app/mvnw RUN /bin/bash -c '/app/mvnw -e clean install spring-boot:repackage -DskipTests' CMD /app/mvnw -e spring-boot:run -DskipTests From https://github.com/aestasit. #AgileLaval17 @gcollic - @hrambelo
  • 40.
    Dockerfile FROM java:8 ADD spring-petclinic/app ENV M2_HOME /app EXPOSE 8080 WORKDIR /app RUN chmod a+x /app/mvnw RUN ls /app/mvnw RUN /bin/bash -c '/app/mvnw -e clean install spring-boot:repackage -DskipTests' CMD /app/mvnw -e spring-boot:run -DskipTests From https://github.com/aestasit. #AgileLaval17 @gcollic - @hrambelo
  • 41.
    Dockerfile FROM java:8 ADD spring-petclinic/app ENV M2_HOME /app EXPOSE 8080 WORKDIR /app RUN chmod a+x /app/mvnw RUN ls /app/mvnw RUN /bin/bash -c '/app/mvnw -e clean install spring-boot:repackage -DskipTests' CMD /app/mvnw -e spring-boot:run -DskipTests From https://github.com/aestasit. docker run -d my_bootiful_petclinic #AgileLaval17 @gcollic - @hrambelo
  • 42.
    Docker compose file version:'2' services: elasticsearch: build: elasticsearch/ ... ports: - "9200:9200" - "9300:9300" logstash: build: logstash/ ... ports: - "5000:5000" depends_on: - elasticsearch kibana: build: kibana/ ... ports: - "5601:5601" depends_on: - elasticsearch #AgileLaval17 @gcollic - @hrambelo
  • 43.
    Docker compose file version:'2' services: elasticsearch: build: elasticsearch/ ... ports: - "9200:9200" - "9300:9300" logstash: build: logstash/ ... ports: - "5000:5000" depends_on: - elasticsearch kibana: build: kibana/ ... ports: - "5601:5601" depends_on: - elasticsearch #AgileLaval17 @gcollic - @hrambelo
  • 44.
    Docker compose file version:'2' services: elasticsearch: build: elasticsearch/ ... ports: - "9200:9200" - "9300:9300" logstash: build: logstash/ ... ports: - "5000:5000" depends_on: - elasticsearch kibana: build: kibana/ ... ports: - "5601:5601" depends_on: - elasticsearch #AgileLaval17 @gcollic - @hrambelo
  • 45.
    Biz Dev Ops #AgileLaval17@gcollic - @hrambelo
  • 46.
    What DevOps ? CULTUREMEASUREMENT AUTOMATION SHARING TDD * as Code * as Code #AgileLaval17 @gcollic - @hrambelo
  • 47.
    Questions ? Hello SlidesAs Code <section style="display: block;"> <h1>Titre</h1> <ul> <li>Item 1</li> <li>Item 2</li> </ul> <div class="slide-background "></div></section> https://github.com/hrambelo/AgileLaval2017 Merci ! #AgileLaval17 @gcollic - @hrambelo
  • 48.
  • 49.