Test infrastructure on steroids
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572390/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4590845/YiTUZZH.jpg)
Sergey Pirogov
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4074900/18588664_1498814320149448_66179252139109060_o.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/2931785/3_collor.png)
http://automation-remarks.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572400/slack.png)
https://qaguild-slack.herokuapp.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572401/250px-Qa-badge.jpg)
QA Tech Lead
http://automation-remarks.com/podcast
Talk will be about?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572420/koryto_760.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573410/pasted-from-clipboard.png)
Baremetal
Container deployment
Won't cover
Project
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573435/xTuple-what-is-ERP.png)
Deployment workflow
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573442/52_blogfullsizedistr.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573448/risovach.ru__3_.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573451/too_laye.jpg)
Feature branches
Moment of truth
feature/Jira-5678
master
Bad scenario
feature/Jira-5677
feature/Jira-5679
master
feature/Jira-5680
Good scenario
Run all the tests
feature/Jira-5677
master
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4074987/meme_mr__bean_png_by_mfsyrcm-d58vvez.png)
Time for DevOps stuff
Infrastructure
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573482/12.File-512.png)
Jenkinsfile
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573482/12.File-512.png)
Dockerfile
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573482/12.File-512.png)
docker-compose.yml
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573485/main-container.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573490/rancher.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573497/use-case-graphic_full-stack-provisioning.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573497/use-case-graphic_full-stack-provisioning.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
Feature env
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
http://jira-5766.pp.host.com
http://jira-5767.pp.host.com
Local Workspace Infrastructure
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573512/pc-support-icon-450.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573515/docker_header1.png)
Selenoid + VNC + VIDEO
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4591234/sel_grid.png)
Selenium Grid with Docker
Selenoid + Windows
version: '3'
services:
selenoid:
image: "aerokube/selenoid:latest-release"
network_mode: bridge
ports:
- "4444:4444"
volumes:
- "$PWD:/etc/selenoid"
- "/var/run/docker.sock:/var/run/docker.sock"
- "$PWD/video:/opt/selenoid/video"
environment:
- DOCKER_API_VERSION=1.35
- OVERRIDE_VIDEO_OUTPUT_DIR=$PWD/video
command: ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video"]
selenoid-ui:
image: "aerokube/selenoid-ui:latest-release"
network_mode: bridge
links:
- selenoid
ports:
- "8080:8080"
command: ["--selenoid-uri", "http://172.17.0.2:4444"]
docker inspect -f '{{ .NetworkSettings.IPAddress }}' selenoid
Docker compose .env file
version: '3'
services:
selenoid:
image: "aerokube/selenoid:latest-release"
network_mode: bridge
ports:
- "4444:4444"
volumes:
- "$PWD:/etc/selenoid"
- "$PWD/video:/opt/selenoid/video"
https://docs.docker.com/compose/environment-variables/
PWD=/c/Users/user/selenoid
selenoid/
.env
docker-compose.yml
docker-compose.yml
Docker + Windows
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4586353/docker.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4586361/experimantal_docker.jpg)
Test Infrastructure
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573526/ggr-animation.gif)
Selenoid + GGR
Configuration management
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4586389/ansible.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4620944/ubuntu_windows.png)
Ansible + Selenoid + GGR
---
- hosts: all
vars:
selenoid_version: 1.4.0
selenoid_cm_version: 1.3.1
selenoid_docker_api_version: 1.24
selenoid_limit: 4
selenoid_tmpfs: 128
selenoid_config_dir: /etc/selenoid
selenoid_listen_port: 4444
selenoid_time_zone: Europe/Moscow
selenoid_browsers_last_versions: 5
selenoid_browsers:
- firefox
- opera
- chrome
roles:
- selenoid
https://github.com/iqoption/selenoid-docker
---
- hosts: all
vars:
grid_router_path: "{{ ansible_env.HOME }}/grid-router"
grid_router_qouta_path: "{{ ansible_env.HOME }}/grid-router/quota"
grid_router_port: 4445
grid_router_regions:
- name: "region-1"
hosts:
- name: 192.168.1.1
port: 4444
browser_count: 4
- name: 192.168.1.2
port: 4445
browser_count: 4
grid_router_browsers:
- name: "chrome"
defaultVersion: "62.0"
versions:
- "62.0"
- "63.0"
roles:
- gridrouter-docker
Example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4586389/ansible.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573482/12.File-512.png)
playbook
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573512/pc-support-icon-450.png)
ansible-playbook selenoid.yml -i hosts
Jenkins pipeline
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4591302/green-and-mean.png)
Results
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4590094/gitlab-stacked_wm_no_bg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573512/pc-support-icon-450.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4590101/Jenkins_8.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573485/main-container.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573490/rancher.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573497/use-case-graphic_full-stack-provisioning.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573497/use-case-graphic_full-stack-provisioning.png)
feature envs
push to feature branch
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/3212621/1024px-Chrome_Logo.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4573482/12.File-512.png)
tests
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/3212621/1024px-Chrome_Logo.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/3212621/1024px-Chrome_Logo.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/3212621/1024px-Chrome_Logo.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572108/pasted-from-clipboard.png)
GGR
Selenoids
Merge/delete feature env
Pain points
- Browser cluster monitoring
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4597093/instr18.png)
- Windows Powershell DSC
- Windows Server 2016 1709
Lessons learned
- Keep your infrastructure as a code
- Always test what your deployment
- Run all your test for merge request
- Collaborate with your team
- Ensure high availability
Useful to read
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4590834/hero.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4590835/cd.jpg)
Thank you!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/2931785/3_collor.png)
http://automation-remarks.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572400/slack.png)
https://qaguild-slack.herokuapp.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4572401/250px-Qa-badge.jpg)
http://automation-remarks.com/podcast
![](https://s3.amazonaws.com/media-p.slid.es/uploads/443868/images/4590860/qrcode.png)
Testing infrastructure on steroids
By Sergey Pirogov
Testing infrastructure on steroids
- 3,877