The Promotion Pyramid Prod
Build/Deploy time
Pre-Prod
Staging
Integr. tests Dev Integration tests Development builds
Amount of builds
Amount of binaries
Slide 11
Pipeline: quality gates and visibility If quality requirments are hit
CI SERVER
1
If quality requirments are hit
2
Integration
If quality requirments are hit
3
System Testing
4
Staging
Production
*
@jbaruch
http://jfrog.com/shownotes
Quality gates -
Slide 12
$docker build
@jbaruch
http://jfrog.com/shownotes
Slide 13
Slide 14
Letâs docker build in every env!
@jbaruch
http://jfrog.com/shownotes
Slide 15
Slide 16
Thatâs why. FROM ubuntu
Latest version
RUN apt-get install -y software-properties-common python RUN apt-get install -y nodejs RUN mkdir /var/www Latest version ADD app.js /var/www/app.js
Latest version Latest version
CMD [â/usr/bin/nodeâ, â/var/www/app.jsâ] @jbaruch
http://jfrog.com/shownotes
Slide 17
Thatâs why. FROM ubuntu:19.04
Better now?
RUN apt-get install -y software-properties-common python RUN apt-get install -y nodejs RUN mkdir /var/www ADD app.js /var/www/app.js CMD [â/usr/bin/nodeâ, â/var/www/app.jsâ] @jbaruch
http://jfrog.com/shownotes
Slide 18
Thatâs why. FROM ubuntu:4033353383af19ec179c01dda7f355a246c6adcafaf93c8f98 And now? RUN apt-get install -y software-properties-common python RUN apt-get install -y nodejs RUN mkdir /var/www ADD app.js /var/www/app.js CMD [â/usr/bin/nodeâ, â/var/www/app.jsâ] @jbaruch
http://jfrog.com/shownotes
Slide 19
Thatâs why. FROM ubuntu:4033353383af19ec179c01dda7f355a246c6adcafaf93c8f98 RUN apt-get install -y software-properties-common python RUN apt-get install -y nodejs RUN mkdir /var/www What about those? ADD app.js /var/www/app.js CMD [â/usr/bin/nodeâ, â/var/www/app.jsâ] @jbaruch
http://jfrog.com/shownotes
Slide 20
Thatâs why. FROM ubuntu:4033353383af19ec179c01dda7f355a246c6adcafaf93c8f98 RUN mvn clean install
What about this?
CMD âjava âjar Main.classâ @jbaruch
http://jfrog.com/shownotes
Slide 21
Thatâs why. FROM ubuntu:4033353383af19ec179c01dda7f355a246c6adcafaf93c8f98 RUN download_random_sh*t_from_the_internet.sh
And how about this?
CMD [â/usr/bin/nodeâ, â/var/www/app.jsâ] @jbaruch
http://jfrog.com/shownotes
Slide 22
Thatâs why you donât trust Docker
@jbaruch
http://jfrog.com/shownotes
Slide 23
Slide 24
Slide 25
Whatâs up with the gates?! - QA shouldnât test dev images - non-tested images shouldnât be staged - non-staged, non-tested or dev images shouldnât end up in production!!! @jbaruch
http://jfrog.com/shownotes
Slide 26
Letâs build Rock-solid pipeline!
Slide 27
How do I separate dev from prod?!
@jbaruch
http://jfrog.com/shownotes
Separate registries per environment If quality requirments are hit
CI SERVER
1
If quality requirments are hit
2
Integration
If quality requirments are hit
3
System Testing
4
Staging
Production
*
@jbaruch
http://jfrog.com/shownotes
The Anatomy of Docker Tag
@jbaruch
http://jfrog.com/shownotes
Slide 36
Wait a second, how can I have more than one registry per host now?!
@jbaruch
http://jfrog.com/shownotes
Slide 37
How can we support this?
https://host:8081/registry/docker-dev/busybox https://host:8081/registry/docker-qa/busybox https://host:8081/registry/docker-staging/busybox https://host:8081/registry/docker-prod/busybox
@jbaruch
http://jfrog.com/shownotes
Slide 38
âONE REGISTRY PER HOST OUGHT TO BE ENOUGH FOR ANYBODY.â
Slide 39
Panic!
@jbaruch
http://jfrog.com/shownotes
Slide 40
Virtual hosts/ports to the rescue docker tag host:port/busybox
Registry host
Tag name
https://host:port/v2/busybox https://host:8081/registry/docker-dev/busybox
Context name
Registry name
Tag name
Slide 41
server { listen 5001;
}
server_name 192.168.99.100; if ($http_x_forwarded_proto = â) { set $http_x_forwarded_proto $scheme; } rewrite ^/(v1|v2)/(.*) /artifactory/api/docker/docker-dev/$1/$2; ⊠}
@jbaruch
http://jfrog.com/shownotes