CDash
Overview
CDash is Kitware's free, open source, web-based software testing server: the companion dashboard to CMake and CTest. Your build machines submit their configure, build, test, coverage and dynamic analysis results. CDash aggregates them into a single sortable dashboard, so your whole team can see the health of every branch and platform, spot regressions the moment they land, and drill into the exact failing test or compiler warning.
The SecureAnyCloud image delivers CDash fully installed and configured on Ubuntu 24.04 as a PHP 8.3 Laravel 12 application, with its Vue frontend compiled into the image and a PostgreSQL 16 database. A complete testing dashboard is running within minutes of launch. It is backed by 24/7 SecureAnyCloud support.
CDash is licensed under the BSD 3-Clause License (Copyright Kitware, Inc. and the Insight Software Consortium). All product and company names are trademarks or registered trademarks of their respective holders. This image repackages the upstream open source release with SecureAnyCloud's provisioning and support.
What you get:
- CDash 5.2.0 (BSD-3-Clause), served from
/var/www/cdash/public - PHP 8.3 (
php8.3-fpm) and nginx, with the web UI on port 80 - PostgreSQL 16 as the application database, listening on localhost only
- The Vue 3 frontend compiled into the image at build time, so nothing is fetched at runtime
- A per-VM administrator password, a fresh application encryption key and a rotated database password, all generated on first boot and written to a root-only file, so no default or shared login ships in the image
nginx.service,php8.3-fpm.serviceandpostgresql.serviceas systemd units, enabled and active- 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region.
Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting size. Scale up for larger teams or high submission volumes.
Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp (HTTP) from your users. Add 443/tcp if you enable HTTPS. The PostgreSQL database listens on localhost only, so no database port is exposed.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure portal, choose Create a resource, search the Marketplace for CDash by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80). Then select Review + create and Create.
Step 2 - Deploy from the Azure CLI
Accept the Marketplace terms once per subscription, then create the VM:
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:cdash-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name cdash \
--image sac1647283583153:cdash-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku StandardOpen port 80 to reach the web UI:
az vm open-port --resource-group <your-rg> --name cdash --port 80 --priority 900Step 3 - Connect to your VM
Connect over SSH as azureuser:
ssh azureuser@<vm-public-ip>Step 4 - Retrieve the first-boot administrator credentials
On the first boot of your instance, cdash-firstboot.service generates a fresh application encryption key, rotates the PostgreSQL password and creates a unique administrator account. It writes everything to a root-only file. Read the file:
sudo cat /root/cdash-credentials.txtThe file shows the generated administrator email and password, plus the database name and user. The password is unique to this VM and is not stored anywhere else.
Step 5 - Confirm the service is healthy
The web stack and database are managed by systemd and come up on boot. Confirm that they are active:
systemctl is-active nginx php8.3-fpm postgresqlCheck that the web UI answers and reports the CDash version:
curl -s -o /dev/null -w "GET /login -> HTTP %{http_code}\n" http://127.0.0.1/login cat /var/www/cdash/public/VERSIONStep 6 - Sign in to the dashboard
Browse to http://<vm-public-ip>/ and sign in at /login with the generated administrator email and password from Step 4.
You arrive at the CDash dashboard, which lists the projects you are a member of. A fresh instance has no projects yet.
Step 7 - Create a project
Click Create Project on the dashboard. Give the project a name and description, and choose its visibility (Public, Protected or Private). Decide whether submissions must present a valid authentication token. Save the project, and it is ready to receive dashboards.
Step 8 - Submit dashboards from CTest
In your project's CTest script, point ctest_submit at this server by setting the CDash drop location. A minimal CTestConfig.cmake looks like this:
set(CTEST_PROJECT_NAME "MyProject") set(CTEST_SUBMIT_URL "http://<vm-public-ip>/submit.php?project=MyProject") set(CTEST_DROP_METHOD "http")Then run a dashboard build, for example:
ctest -D ExperimentalYour configure, build and test results appear on the project's dashboard in CDash within seconds. CDash parses submissions synchronously, so no separate queue worker is required.
Security model
This image ships with no default login and no data. The database is created empty at build time. The web server is held offline until first boot completes, so the dashboard is never reachable with a build-time secret.
On first boot, a one-shot service regenerates the Laravel APP_KEY, rotates the PostgreSQL password in lock-step with the application configuration, and creates a single administrator with a random password. A wrong password is rejected, and only the generated per-VM password authenticates. Verify this:
U=$(sudo grep '^cdash.admin.user=' /root/cdash-credentials.txt | cut -d= -f2-) cj=$(mktemp); tok=$(curl -s -c $cj http://127.0.0.1/login | grep -oE 'name="_token"[^>]*value="[^"]+"' | head -1 | sed -E 's/.*value="([^"]+)".*/\1/')
curl -s -o /dev/null -w "wrong password -> HTTP %{http_code}\n" -b $cj -c $cj --data-urlencode "_token=$tok" --data-urlencode "email=$U" --data-urlencode "password=WrongGuess-123" http://127.0.0.1/login rm -f $cjA wrong password returns HTTP 401. The correct per-VM password returns HTTP 302 and lands on the dashboard.
Enable HTTPS with a custom domain
Point a DNS A record at your VM's public IP and allow 443/tcp in the NSG. Then install a certificate with Certbot, and set APP_URL to your https:// domain in /var/www/cdash/.env:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.comAfter changing .env, rebuild the config cache:
sudo -u www-data php /var/www/cdash/artisan config:cacheMaintenance
- Logs. Application logs are at
/var/www/cdash/storage/logs/cdash.log. nginx logs are under/var/log/nginx/. - Database backups. Back up the
cdashPostgreSQL database withsudo -u postgres pg_dump cdash > cdash-backup.sql. - OS updates. Unattended security upgrades are enabled, so the base OS keeps patching itself.
- Admin CLI. Manage users and projects with
sudo -u www-data php /var/www/cdash/artisan <command>.
Support
SecureAnyCloud provides 24/7 technical support for this CDash image by email (sales@secureanycloud.com) and live chat, covering deployment, first-boot credentials, creating projects and submitting dashboards, notifications, LDAP authentication, HTTPS setup, database administration and upgrades.
For billing or subscription questions, contact sales@secureanycloud.com.
Deploy on Azure
Launch CDash on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com