Developer Tools Azure

CDash on Ubuntu 24.04 on Azure User Guide

| Product: CDash on Ubuntu 24.04 LTS on Azure

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, and 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 cloudimg 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, so a complete testing dashboard is running within minutes of launch. Backed by 24/7 cloudimg 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 cloudimg's provisioning and support.

What is included:

  • CDash 5.2.0 (BSD-3-Clause), served from /var/www/cdash/public
  • PHP 8.3 (php8.3-fpm) + 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.service and postgresql.service as systemd units, enabled and active
  • 24/7 cloudimg support

CDash sign-in page served on first boot

Prerequisites

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 point; scale up for larger teams or high submission volumes. NSG inbound: allow 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 cloudimg, and select Create. On Basics 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 Review + create and Create.

Step 2 — Deploy from the Azure CLI

az vm create \
  --resource-group <your-rg> \
  --name cdash \
  --image <marketplace-image-urn> \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open HTTP to reach the web UI:

az vm open-port --resource-group <your-rg> --name cdash --port 80 --priority 900

Step 3 — Connect to your VM

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, writing everything to a root-only file. Read it with:

sudo cat /root/cdash-credentials.txt

You will see 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.

Per-VM credentials generated on first boot, in a root-only file

Step 5 — Confirm the service is healthy

The web stack and database are managed by systemd and come up on boot. Confirm they are active:

systemctl is-active nginx php8.3-fpm postgresql

Check 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/VERSION

CDash service health: nginx, php-fpm and PostgreSQL active

CDash web UI health check reaching the Laravel application

Step 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.

The CDash dashboard after signing in as the per-VM administrator

Step 7 — Create a project

Click Create Project on the dashboard. Give the project a name and description, choose its visibility (Public, Protected or Private), and decide whether submissions must present a valid authentication token. Save it, and the project is ready to receive dashboards.

The CDash Create Project page

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:

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 Experimental

Your 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, and 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; only the generated per-VM password authenticates:

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 $cj

A wrong password returns HTTP 401; the correct per-VM password returns HTTP 302 and lands on the dashboard.

No default login: a wrong password is rejected, the per-VM admin is accepted

Enable HTTPS with a custom domain

Point a DNS A record at your VM's public IP, 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.com

After changing .env, rebuild the config cache:

sudo -u www-data php /var/www/cdash/artisan config:cache

Maintenance

  • Logs: application logs are at /var/www/cdash/storage/logs/cdash.log; nginx logs are under /var/log/nginx/.
  • Database backups: back up the cdash PostgreSQL database with sudo -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

cloudimg provides 24/7 technical support for this CDash image by email (support@cloudimg.co.uk) 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 support@cloudimg.co.uk.