SlideShare a Scribd company logo
Session
SESSION
Case Study: Creating and Managing a QA
Feature Testing Environment
LED BY
Dan Card
Dan Card
SPEAKER AT ITB2023
Dan Card is a Senior Developer at Ortus Solutions who find pictures of
people with their chin in their hands somewhat pretentious
• Lives just north of Boston
• Has been using CF since around
2004
• Has developed a love of testing
over the past several years
• Sometimes uses frozen Zoom
pictures as headshots
The Goal
We needed an actual formal testing environment
The triggering event was a module using the Adobe Generate Document PDF API. All the tests were passing locally,
everything worked in staging, it had passed QA and then blew up in production. Why?
Local was Windows. Staging was Windows. Production was Linux and the issue was in the direction of the slashes in
our file names. Easily fixed but you never know the other stupid stuff that’s going to trip you up.
The Goal
• Replicate Production as closely as possible
• Be easy to manage or no one would use it
• Pull any branch from any repo to test before things got into
Dev let alone production
• Be entirely self contained
• Rather than risk “merge issues” and ensure a clean test, we
wanted to completely delete the existing files and re-clone
• Able to be blown away and recreated
We needed something which…
The Solution
• Linux Box
• Not on our local system
• Because of the Multi Sites it seemed to be a good use
for Docker
• I didn’t know Linux ( still mostly don’t )
• Wasn’t budgeted
• I had tried to learn Docker several times and it never
“stuck”
• Not too great at git
And The Problems
The Ecosystem
• A React Front end
• A Coldbox API (with Fusion Reactor)
• MSSQL
There are a number of components to the entire system:
What are we creating: High Level
React
ColdBox API
MSSQL Server
What are we creating: Detail
Front End
(JS, React)
name: ninja_app
CommandBox
/ninjaapp
80
API
( Coldbox, Lucee,
Fusion-Reactor )
name: api
MSSQL
name: mssql
Playwright
( JS )
name: playwright
Monitoring Software
( ColdBox, Lucee )
name: siteModel
Containers:
Storage:
Ports:
/api /dataFolder /backupFolder /playwright /siteModel
8081 8082 8083 8084
1434
Apps / Files / Modules: Module:
ecoSystemTesting File: docker-compose.yml
Docker
/build
/envFiles
3 Phases
1. Create and prep the Linux Boxes
2. Create the folder / containers
3. Getting Files and databases onto the Linux box.
Steps to Create: Linux Box
Phase 1: Create the Linux Box
1. Spin up instance on AWS
2. Connect to Instance
3. System Updates
4. Set the version of Java to use
5. Install Git – if needed
6. Install Node
7. Install Yarn
8. Install Docker / Docker Compose
9. Install CommandBox
10.Install ecosystemTesting Module
11.Permissions for scripts
12.Firewall permissions in the AWS security group
At The End Of Step 1: The Linux Box
CommandBox
Apps / Files / Modules: Docker
4 Phases
1. Create and prep the Linux Boxes
2. Create the folder / containers
3. Use the ecosystemTesting module to handle the actual cloning of the sites.
4. Demo it
To the containers!
Steps
Create The Folders and Containers
• Create our folders
• Create the docker-compose file which defined our containers
• CommandBox
• Node / React
• MSSQL
• Create Dockerfiles and additional scripts for the more elaborate installs for MSSQL and JS
• Learn the difference between Start / Build / Stop / Restart / Up
At The End of Step 2: Our Containers
Front End
(JS, React)
name: ninja_app
CommandBox
/ninjaapp
80
API
( Coldbox, Lucee,
Fusion-Reactor )
name: api
MSSQL
name: mssql
Playwright
( JS )
name: playwright
Monitoring Software
( ColdBox, Lucee )
name: siteModel
Containers:
Storage:
Ports:
/api /dataFolder /backupFolder /playwright /siteModel
8081 8082 8083 8084
1434
Apps / Files / Modules: Module:
ecoSystemTesting File: docker-compose.yml
Docker
/build
4 Phases
1. Create and prep the Linux Boxes
2. Create the folder / containers
3. Use the ecosystemTesting module to handle the actual cloning of the sites.
4. Demo it
However, we have no files or content yet!
How Do We Get The Site Files onto the Server?
Create The Folders and Containers
Our Testing instance
ecosystemTesting
module
Basic Steps
Get the content!
• Configure each site 1x
• Source (github etc)
• Username and tokens (remains in the CommandBox config, not in a repo)
• URLs / Folders
• Environment Docs – i.e. .cfconfig and .env files
• At Run Time
• What branch?
• Evergreen?
How Do We Get DB / Schema onto the Server?
Create The Folders and Containers
ecosystemTesting
module
MSSQL
Container
Migrations
QB Schema
Manual Restore
Schema Schema and Data
Configuring The Ecosystem Tool: Project
Get the content!
• `ecosystemTesting configure`
• Project name
• Root Folder
• Source of repos
• Repo login name
• Repo Token
Configuring The Ecosystem Tool: Site
Get the content!
• Essential Items
• Site name
• Repo location (github / git lab)
• Parent branch
• Name of the folder (relative to root of project)
• url
• Port
• Comma delimited list of Files to copy - source:target,source:target
• Comma delimited scripts to run (from CommandBox)
• Name of the Docker container
Refreshing the Ecosystem
Get the content!
• `ecosystemTesting refreshEcoSystem ninja 1 true`
• `!docker-compose restart`  Restarts everything but the js sites will fail
• `!docker-compose up –d`  Rebuilds the JS sites and starts them
THAN K YOU
Thank s to our sponsors

More Related Content

PPTX
The challenge of application distribution - Introduction to Docker (2014 dec ...
PDF
Serverless in Production, an experience report (AWS UG South Wales)
PPT
Where and When to Docker
PDF
Serverless in production, an experience report (FullStack 2018)
PDF
Predicting Space Weather with Docker
PDF
Containerised Testing at Demonware : PyCon Ireland 2016
PDF
Rackspace::Solve NYC - The Future of Applications with Ken Cochrane, Engineer...
PDF
DevOps with Serverless
The challenge of application distribution - Introduction to Docker (2014 dec ...
Serverless in Production, an experience report (AWS UG South Wales)
Where and When to Docker
Serverless in production, an experience report (FullStack 2018)
Predicting Space Weather with Docker
Containerised Testing at Demonware : PyCon Ireland 2016
Rackspace::Solve NYC - The Future of Applications with Ken Cochrane, Engineer...
DevOps with Serverless

Similar to ITB 2023 Creating and managing a QA focused production-replicating environment for complex sites_Dan Card.pdf (20)

PPTX
Microservices pros and cons
ODP
The journey to container adoption in enterprise
PDF
Serverless in production, an experience report (microservices london)
PDF
Serverless in production, an experience report (Going Serverless)
PDF
Container Landscape in 2019
PPTX
Why we need container in Software
PDF
Rise of the machines: Continuous Delivery at SEEK - YOW! Night Summary Slides
PDF
Cloud Computing as Innovation Hub - Mohammad Fairus Khalid
PDF
Serverless in production, an experience report (JeffConf)
PPTX
The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...
PDF
Portable CI wGitLab and Github led by Gavin Pickin.pdf
PPTX
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
PPT
Docker in the Wild
PPT
Docker in the Wild
PDF
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
PDF
Microservices: How loose is loosely coupled?
PDF
Serverless in production, an experience report
PDF
Serverless in production, an experience report (CoDe-Conf)
PDF
Dockercon EU 2014
PDF
Introduction to Containers - From Docker to Kubernetes and everything in between
Microservices pros and cons
The journey to container adoption in enterprise
Serverless in production, an experience report (microservices london)
Serverless in production, an experience report (Going Serverless)
Container Landscape in 2019
Why we need container in Software
Rise of the machines: Continuous Delivery at SEEK - YOW! Night Summary Slides
Cloud Computing as Innovation Hub - Mohammad Fairus Khalid
Serverless in production, an experience report (JeffConf)
The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...
Portable CI wGitLab and Github led by Gavin Pickin.pdf
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
Docker in the Wild
Docker in the Wild
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
Microservices: How loose is loosely coupled?
Serverless in production, an experience report
Serverless in production, an experience report (CoDe-Conf)
Dockercon EU 2014
Introduction to Containers - From Docker to Kubernetes and everything in between
Ad

More from Ortus Solutions, Corp (20)

PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
PDF
June Webinar: BoxLang-Dynamic-AWS-Lambda
PDF
BoxLang-Dynamic-AWS-Lambda by Luis Majano.pdf
PDF
What's-New-with-BoxLang-Brad Wood.pptx.pdf
PDF
Getting Started with BoxLang - CFCamp 2025.pdf
PDF
CFCamp2025 - Keynote Day 1 led by Luis Majano.pdf
PDF
What's New with BoxLang Led by Brad Wood.pdf
PDF
Vector Databases and the BoxLangCFML Developer.pdf
PDF
Using cbSSO in a ColdBox App Led by Jacob Beers.pdf
PDF
Use JSON to Slash Your Database Performance.pdf
PDF
Tame the Mesh An intro to cross-platform tracing and troubleshooting.pdf
PDF
Supercharging CommandBox with Let's Encrypt.pdf
PDF
Spice up your site with cool animations using GSAP..pdf
PDF
Passkeys and cbSecurity Led by Eric Peterson.pdf
PDF
Legacy Code Nightmares , Hellscapes, and Lessons Learned.pdf
PDF
Integrating the OpenAI API in Your Coldfusion Apps.pdf
PDF
Hidden Gems in FusionReactor for BoxLang, ACF, and Lucee Users.pdf
PDF
Geting-started with BoxLang Led By Raymon Camden.pdf
PDF
From Zero to CRUD with ORM - Led by Annette Liskey.pdf
PDF
Customize your Runtime Creating your first BoxLang Module.pdf
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
June Webinar: BoxLang-Dynamic-AWS-Lambda
BoxLang-Dynamic-AWS-Lambda by Luis Majano.pdf
What's-New-with-BoxLang-Brad Wood.pptx.pdf
Getting Started with BoxLang - CFCamp 2025.pdf
CFCamp2025 - Keynote Day 1 led by Luis Majano.pdf
What's New with BoxLang Led by Brad Wood.pdf
Vector Databases and the BoxLangCFML Developer.pdf
Using cbSSO in a ColdBox App Led by Jacob Beers.pdf
Use JSON to Slash Your Database Performance.pdf
Tame the Mesh An intro to cross-platform tracing and troubleshooting.pdf
Supercharging CommandBox with Let's Encrypt.pdf
Spice up your site with cool animations using GSAP..pdf
Passkeys and cbSecurity Led by Eric Peterson.pdf
Legacy Code Nightmares , Hellscapes, and Lessons Learned.pdf
Integrating the OpenAI API in Your Coldfusion Apps.pdf
Hidden Gems in FusionReactor for BoxLang, ACF, and Lucee Users.pdf
Geting-started with BoxLang Led By Raymon Camden.pdf
From Zero to CRUD with ORM - Led by Annette Liskey.pdf
Customize your Runtime Creating your first BoxLang Module.pdf
Ad

Recently uploaded (20)

PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
Transform Your Business with a Software ERP System
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
top salesforce developer skills in 2025.pdf
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
Introduction to Artificial Intelligence
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
medical staffing services at VALiNTRY
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Softaken Excel to vCard Converter Software.pdf
Navsoft: AI-Powered Business Solutions & Custom Software Development
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Computer Software and OS of computer science of grade 11.pptx
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Wondershare Filmora 15 Crack With Activation Key [2025
Upgrade and Innovation Strategies for SAP ERP Customers
Transform Your Business with a Software ERP System
wealthsignaloriginal-com-DS-text-... (1).pdf
How to Choose the Right IT Partner for Your Business in Malaysia
2025 Textile ERP Trends: SAP, Odoo & Oracle
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
top salesforce developer skills in 2025.pdf
Which alternative to Crystal Reports is best for small or large businesses.pdf
Introduction to Artificial Intelligence
PTS Company Brochure 2025 (1).pdf.......
medical staffing services at VALiNTRY
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf

ITB 2023 Creating and managing a QA focused production-replicating environment for complex sites_Dan Card.pdf

  • 1. Session SESSION Case Study: Creating and Managing a QA Feature Testing Environment LED BY Dan Card
  • 2. Dan Card SPEAKER AT ITB2023 Dan Card is a Senior Developer at Ortus Solutions who find pictures of people with their chin in their hands somewhat pretentious • Lives just north of Boston • Has been using CF since around 2004 • Has developed a love of testing over the past several years • Sometimes uses frozen Zoom pictures as headshots
  • 3. The Goal We needed an actual formal testing environment The triggering event was a module using the Adobe Generate Document PDF API. All the tests were passing locally, everything worked in staging, it had passed QA and then blew up in production. Why? Local was Windows. Staging was Windows. Production was Linux and the issue was in the direction of the slashes in our file names. Easily fixed but you never know the other stupid stuff that’s going to trip you up.
  • 4. The Goal • Replicate Production as closely as possible • Be easy to manage or no one would use it • Pull any branch from any repo to test before things got into Dev let alone production • Be entirely self contained • Rather than risk “merge issues” and ensure a clean test, we wanted to completely delete the existing files and re-clone • Able to be blown away and recreated We needed something which…
  • 5. The Solution • Linux Box • Not on our local system • Because of the Multi Sites it seemed to be a good use for Docker • I didn’t know Linux ( still mostly don’t ) • Wasn’t budgeted • I had tried to learn Docker several times and it never “stuck” • Not too great at git And The Problems
  • 6. The Ecosystem • A React Front end • A Coldbox API (with Fusion Reactor) • MSSQL There are a number of components to the entire system:
  • 7. What are we creating: High Level React ColdBox API MSSQL Server
  • 8. What are we creating: Detail Front End (JS, React) name: ninja_app CommandBox /ninjaapp 80 API ( Coldbox, Lucee, Fusion-Reactor ) name: api MSSQL name: mssql Playwright ( JS ) name: playwright Monitoring Software ( ColdBox, Lucee ) name: siteModel Containers: Storage: Ports: /api /dataFolder /backupFolder /playwright /siteModel 8081 8082 8083 8084 1434 Apps / Files / Modules: Module: ecoSystemTesting File: docker-compose.yml Docker /build /envFiles
  • 9. 3 Phases 1. Create and prep the Linux Boxes 2. Create the folder / containers 3. Getting Files and databases onto the Linux box.
  • 10. Steps to Create: Linux Box Phase 1: Create the Linux Box 1. Spin up instance on AWS 2. Connect to Instance 3. System Updates 4. Set the version of Java to use 5. Install Git – if needed 6. Install Node 7. Install Yarn 8. Install Docker / Docker Compose 9. Install CommandBox 10.Install ecosystemTesting Module 11.Permissions for scripts 12.Firewall permissions in the AWS security group
  • 11. At The End Of Step 1: The Linux Box CommandBox Apps / Files / Modules: Docker
  • 12. 4 Phases 1. Create and prep the Linux Boxes 2. Create the folder / containers 3. Use the ecosystemTesting module to handle the actual cloning of the sites. 4. Demo it To the containers!
  • 13. Steps Create The Folders and Containers • Create our folders • Create the docker-compose file which defined our containers • CommandBox • Node / React • MSSQL • Create Dockerfiles and additional scripts for the more elaborate installs for MSSQL and JS • Learn the difference between Start / Build / Stop / Restart / Up
  • 14. At The End of Step 2: Our Containers Front End (JS, React) name: ninja_app CommandBox /ninjaapp 80 API ( Coldbox, Lucee, Fusion-Reactor ) name: api MSSQL name: mssql Playwright ( JS ) name: playwright Monitoring Software ( ColdBox, Lucee ) name: siteModel Containers: Storage: Ports: /api /dataFolder /backupFolder /playwright /siteModel 8081 8082 8083 8084 1434 Apps / Files / Modules: Module: ecoSystemTesting File: docker-compose.yml Docker /build
  • 15. 4 Phases 1. Create and prep the Linux Boxes 2. Create the folder / containers 3. Use the ecosystemTesting module to handle the actual cloning of the sites. 4. Demo it However, we have no files or content yet!
  • 16. How Do We Get The Site Files onto the Server? Create The Folders and Containers Our Testing instance ecosystemTesting module
  • 17. Basic Steps Get the content! • Configure each site 1x • Source (github etc) • Username and tokens (remains in the CommandBox config, not in a repo) • URLs / Folders • Environment Docs – i.e. .cfconfig and .env files • At Run Time • What branch? • Evergreen?
  • 18. How Do We Get DB / Schema onto the Server? Create The Folders and Containers ecosystemTesting module MSSQL Container Migrations QB Schema Manual Restore Schema Schema and Data
  • 19. Configuring The Ecosystem Tool: Project Get the content! • `ecosystemTesting configure` • Project name • Root Folder • Source of repos • Repo login name • Repo Token
  • 20. Configuring The Ecosystem Tool: Site Get the content! • Essential Items • Site name • Repo location (github / git lab) • Parent branch • Name of the folder (relative to root of project) • url • Port • Comma delimited list of Files to copy - source:target,source:target • Comma delimited scripts to run (from CommandBox) • Name of the Docker container
  • 21. Refreshing the Ecosystem Get the content! • `ecosystemTesting refreshEcoSystem ninja 1 true` • `!docker-compose restart`  Restarts everything but the js sites will fail • `!docker-compose up –d`  Rebuilds the JS sites and starts them
  • 22. THAN K YOU Thank s to our sponsors