Remote Runners

This document provides complete instructions for deploying the Testifly Remote Runner on your infrastructure. The agent is distributed as a multi-arch Docker image, compatible with both x86_64 (Intel/AMD) and ARM64 (Apple Silicon/Graviton) architectures.

1. System Requirements

  • CPU: Minimum 0.5 Cores (Request), 1.0 Cores (Limit).
  • RAM: 5.8 GiB (Strict limit to ensure performance).
  • Network: Outbound access to testifly-hnapbwaxg6ddhyck.azurecr.io (Port 443).

2. Option A: Local / Single-Server Deployment (Docker Compose)

Use this method for standalone servers or local testing. No registry authentication is required as the image is public.

Step 1: Create folder

Create a local folder for the agent configuration and data, and navigate into it:

mkdir testifly-agent
cd testifly-agent

Step 2: Create a .env file

Store your credentials in a secure environment file in your project folder.

PROJECT_ID=your_project_id # take this from your Testifly dashboard url
API_KEY=your_api_key # take this from your Testifly dashboard (Settings > API Keys)
AGENT_NAME=your_agent_name # (e.g. "my-local-runner" or "our testing runners" - doesn't have be unique across your project)

Step 3: Create docker-compose.yml

Use the following configuration:

name: testifly

services:
  testifly-runner:
    image: testifly-hnapbwaxg6ddhyck.azurecr.io/testifly-remote-runner:latest
    restart: always
    env_file: .env
    volumes:
      # Persists data from the container to a 'data' folder in your current directory
      - ./data:/app/data
    extra_hosts:
      # Allows "localhost" inside the container to resolve to the host machine
      - 'localhost:host-gateway'
      # Recommended alias for cross-platform compatibility
      - 'host.docker.internal:host-gateway'
    deploy:
      resources:
        reservations:
          cpus: '0.5'
          memory: 6gb
        limits:
          cpus: '1.0'
          memory: 6gb

Step 4: Launch

To ensure you are running the latest version of the agent, always pull the latest image before starting:

docker-compose pull
docker-compose up -d

If you are switching from an old setup or changing configurations, run:

docker-compose down
docker-compose pull
docker-compose up -d

3. Option B: Enterprise Deployment (Kubernetes)

Use this method for production clusters requiring high availability and orchestration.

Step 1: Create a Namespace and Secret

First, create the namespace and a secret to securely store your API key.

# Create namespace
kubectl create namespace testifly

# Create secret for API Key
kubectl create secret generic testifly-auth \
  --from-literal=api-key=your_api_key_here \
  -n testifly

Step 2: Create the Deployment Manifest

Create a file named testifly-deployment.yaml.
For production, it is recommended to use a PersistentVolumeClaim (PVC) to store data and Secrets for sensitive keys.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testifly-remote-runner
  namespace: testifly
spec:
  replicas: 1
  selector:
    matchLabels:
      app: testifly-runner
  template:
    metadata:
      labels:
        app: testifly-runner
    spec:
      containers:
        - name: runner
          image: testifly-hnapbwaxg6ddhyck.azurecr.io/testifly-remote-runner:latest
          imagePullPolicy: Always
          env:
            - name: PROJECT_ID
              value: 'your_project_id'
            - name: AGENT_NAME
              value: 'your_agent_name'
            - name: API_KEY
              # Recommended: Pull from Secret created in Step 1
              valueFrom:
                secretKeyRef:
                  name: testifly-auth
                  key: api-key
              # Alternatively, use a plain string (less secure):
              # value: "your_api_key_here"
          volumeMounts:
            - name: runner-data
              mountPath: /app/data
          resources:
            requests:
              cpu: '500m'
              memory: '5.8Gi'
            limits:
              cpu: '1000m'
              memory: '5.8Gi'
      volumes:
        - name: runner-data
          persistentVolumeClaim:
            claimName: testifly-pvc

Step 3: Apply to Cluster

kubectl apply -f testifly-deployment.yaml

4. Operations & Troubleshooting

Viewing Logs

  • Docker Compose: docker-compose logs -f
  • Kubernetes: kubectl logs -l app=testifly-runner -n testifly -f

Support

For technical assistance, please provide the Agent Name and recent log output to your Testifly support team at [email protected]. We’re happy to assist!.