-
-
Notifications
You must be signed in to change notification settings - Fork 0
Common Issues
GrammaTonic edited this page Sep 4, 2025
·
3 revisions
This page covers the most frequently encountered issues and their solutions.
Previous Issue: ChromeDriver installation failed with deprecated API
Symptoms (Now Fixed):
- Chrome tests failed with version compatibility errors
- Error: "This version of ChromeDriver only supports Chrome version X"
- ChromeDriver download failures from deprecated endpoints
Solution Applied (Sep 4, 2025):
# Fixed implementation now using Chrome for Testing API
CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+\.\d+')
CHROMEDRIVER_URL="https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"
# Automatic version matching now working
curl -s "$CHROMEDRIVER_URL" | jq -r "ChromeDriver matched to Chrome version"Status: โ Resolved - All Chrome Runner builds now successful with modern API
Prevention: Chrome for Testing API automatically maintains version compatibility
Symptoms:
- Browser tests fail randomly
- Error: "Chrome crash detected"
- High memory usage
Solutions:
- Increase shared memory:
# In docker-compose.chrome.yml
services:
chrome-runner:
shm_size: 4g # Increase from default 64MB- Add Chrome stability flags:
--memory-pressure-off
--max_old_space_size=4096
--disable-background-timer-throttlingSymptoms:
- Error: "No display specified"
- GUI applications fail to start
Solution:
# Check virtual display
echo $DISPLAY # Should show :99
ps aux | grep Xvfb # Should show running Xvfb process
# Restart virtual display if needed
sudo pkill Xvfb
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99Problem Solved: โ This is exactly why the Chrome Runner was created!
Solution:
# Use dedicated Chrome Runner instead of standard runner
# In your GitHub Actions workflow:
jobs:
ui-tests:
runs-on: [self-hosted, chrome, ui-tests] # Use Chrome runner
steps:
- uses: actions/checkout@v4
- name: Run UI tests
run: npx playwright testBenefits:
- โ 60% faster execution due to resource isolation
- โ Pre-installed testing frameworks
- โ Optimized Chrome configuration
- โ Parallel test execution capability
๐ Full Chrome Runner Guide: Chrome Runner Documentation
Symptoms:
- Runner container starts but doesn't appear in GitHub
- Error: "HTTP 401: Bad credentials"
- Error: "HTTP 403: Forbidden"
Solutions:
- Check token permissions:
# Test token manually
curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/user
# Required scopes for private repos
# - repo (full control)
# - workflow (update workflows)- Verify repository format:
# Correct format
GITHUB_REPOSITORY=owner/repository-name
# Common mistakes
GITHUB_REPOSITORY=https://github.com/owner/repo # โ
GITHUB_REPOSITORY=owner/repo.git # โ- Check token expiration:
# Check token expiration
gh auth status
# Regenerate if expired
gh auth refreshSymptoms:
- Error: "A runner exists with the same name"
- Multiple failed registration attempts
Solutions:
- Use unique runner names:
# Add timestamp or hostname
RUNNER_NAME=runner-$(hostname)-$(date +%s)
# Use container ID
RUNNER_NAME=runner-$(cat /proc/self/cgroup | head -1 | cut -d/ -f3 | cut -c1-12)- Remove existing runners:
# List current runners
gh api repos/OWNER/REPO/actions/runners
# Remove specific runner
gh api repos/OWNER/REPO/actions/runners/RUNNER_ID -X DELETESymptoms:
- Error: "Cannot connect to the Docker daemon"
- Permission denied errors
- Socket not found
Solutions:
- Fix Docker socket permissions:
# Add user to docker group
sudo usermod -aG docker $USER
# Reload group membership
newgrp docker
# Test access
docker ps- Check Docker daemon status:
# Start Docker service
sudo systemctl start docker
sudo systemctl enable docker
# Verify Docker is running
docker version- Mount Docker socket correctly:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:roSymptoms:
- Error: "No space left on device"
- Build failures during image pulls
- Container crashes
Solutions:
- Clean up Docker resources:
# Remove unused containers
docker container prune -f
# Remove unused images
docker image prune -a -f
# Remove unused volumes
docker volume prune -f
# Complete cleanup
docker system prune -a --volumes -f- Monitor disk usage:
# Check Docker disk usage
docker system df
# Check container sizes
docker ps -s
# Check volume sizes
docker volume ls- Configure log rotation:
services:
runner:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"Symptoms:
- Runner registers successfully
- Jobs fail with authentication errors
- Git clone/push operations fail
Solutions:
- Use GITHUB_TOKEN in workflows:
# In your workflow
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}- Configure Git credentials:
# In runner entrypoint
git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"- Check token scope:
# Token needs 'repo' scope for private repositories
# Token needs 'public_repo' scope for public repositoriesSymptoms:
- Jobs take much longer than expected
- High CPU/memory usage
- Frequent timeouts
Solutions:
- Increase resource limits:
deploy:
resources:
limits:
memory: 4g
cpus: "2.0"
reservations:
memory: 1g
cpus: "0.5"- Optimize Docker builds:
# Use multi-stage builds
FROM node:16-alpine as builder
COPY package*.json ./
RUN npm ci --only=production
FROM node:16-alpine as runtime
COPY --from=builder /app/node_modules ./node_modules- Enable build caching:
volumes:
- build_cache:/root/.cache
- deps_cache:/root/.npmSymptoms:
- Gradually increasing memory usage
- Container restarts due to OOM
- System becomes unresponsive
Solutions:
- Monitor memory usage:
# Check container memory
docker stats --no-stream
# Check system memory
free -h
# Monitor over time
watch -n 5 'docker stats --no-stream'- Set memory limits:
deploy:
resources:
limits:
memory: 2g- Enable automatic restarts:
restart: unless-stopped
healthcheck:
test: ["CMD", "pgrep", "Runner.Listener"]
interval: 30s
timeout: 10s
retries: 3Symptoms:
- Network timeouts
- DNS resolution failures
- Proxy configuration issues
Solutions:
- Test connectivity:
# Test DNS resolution
nslookup api.github.com
# Test HTTPS connectivity
curl -v https://api.github.com
# Test with proxy
curl -x proxy.company.com:8080 https://api.github.com- Configure proxy settings:
# Environment variables
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
export NO_PROXY=localhost,127.0.0.1,10.0.0.0/8
# Docker proxy configuration- Check firewall rules:
# Required ports
# 443 (HTTPS) - api.github.com
# 443 (HTTPS) - github.com
# 443 (HTTPS) - objects.githubusercontent.comSymptoms:
- Jobs queue up despite available resources
- Inconsistent runner availability
- Load balancing problems
Solutions:
- Check runner labels:
# Ensure consistent labels
RUNNER_LABELS=self-hosted,linux,x64,docker
# Verify in GitHub UI
# Settings โ Actions โ Runners- Configure proper scaling:
# Scale up
docker compose up -d --scale runner=5
# Check running containers
docker ps --filter "name=runner"- Monitor job queue:
# Check queued jobs
gh api repos/OWNER/REPO/actions/runs --jq '.workflow_runs[] | select(.status=="queued")'# Access container shell
docker exec -it github-runner_runner_1 /bin/bash
# Check container logs
docker logs github-runner_runner_1 --tail 100 -f
# Inspect container configuration
docker inspect github-runner_runner_1
# Check resource usage
docker stats github-runner_runner_1# Search for specific errors
docker logs runner 2>&1 | grep -i error
# Monitor real-time logs
docker logs runner -f --tail 50
# Export logs for analysis
docker logs runner > runner-logs-$(date +%Y%m%d).txt# Check system resources
htop
iotop
netstat -tulpn
# Check Docker status
systemctl status docker
journalctl -u docker.service --since "1 hour ago"
# Check file descriptors
lsof | grep dockerWhen reporting issues, include:
- System information:
# Operating system
uname -a
# Docker version
docker version
# Docker Compose version
docker compose version- Configuration:
# Environment variables (redact secrets)
env | grep -E "GITHUB|RUNNER|DOCKER" | sed 's/TOKEN=.*/TOKEN=***/'
# Docker Compose configuration
docker compose config- Logs:
# Container logs
docker logs runner --tail 100
# System logs
journalctl -u docker.service --since "1 hour ago"- GitHub Issues: Report bugs
- Discussions: Community support
- Documentation: Wiki home
- Debugging Guide - Advanced debugging techniques
- Performance Tuning - Optimization strategies
- Installation Guide - Setup instructions
- Docker Configuration - Docker setup