diff --git a/docs/CACHE_TROUBLESHOOTING.md b/docs/CACHE_TROUBLESHOOTING.md index f913490..c5d3143 100644 --- a/docs/CACHE_TROUBLESHOOTING.md +++ b/docs/CACHE_TROUBLESHOOTING.md @@ -31,11 +31,17 @@ This ensures that cache failures don't cause the entire pipeline to fail. ### 2. Runner Configuration Fixes -Created `runners/config_cache_fixed.yaml` with: +Updated all existing runner configuration files with: - **Fixed Host**: `host.docker.internal` (allows containers to access host) - **Fixed Port**: `44029` (instead of random port 0) - **Host Network**: Uses host networking for better connectivity +Updated files: +- `runners/config_docker.yaml` +- `runners/config_heavy.yaml` +- `runners/config_light.yaml` +- `runners/config_security.yaml` + ### 3. Troubleshooting Tools Created diagnostic scripts: @@ -46,16 +52,22 @@ These scripts help diagnose and fix cache issues. ## How to Apply the Fixes -### Option 1: Use the Fixed Configuration +### Option 1: Use the Updated Configuration 1. Stop your current runner: ```bash pkill -f act_runner ``` -2. Start with the fixed configuration: +2. Start with an updated configuration: ```bash - ./act_runner daemon --config config_cache_fixed.yaml + ./act_runner daemon --config config_docker.yaml + # or + ./act_runner daemon --config config_heavy.yaml + # or + ./act_runner daemon --config config_light.yaml + # or + ./act_runner daemon --config config_security.yaml ``` ### Option 2: Run the Troubleshooting Script diff --git a/runners/config_cache_fixed.yaml b/runners/config_cache_fixed.yaml deleted file mode 100644 index 093a551..0000000 --- a/runners/config_cache_fixed.yaml +++ /dev/null @@ -1,109 +0,0 @@ -# Improved configuration file with cache networking fixes -# This configuration addresses common cache timeout issues in self-hosted runners - -log: - # The level of logging, can be trace, debug, info, warn, error, fatal - level: info - -runner: - # Where to store the registration result. - file: .runner - # Execute how many tasks concurrently at the same time. - capacity: 1 - # Extra environment variables to run jobs. - envs: - A_TEST_ENV_NAME_1: a_test_env_value_1 - A_TEST_ENV_NAME_2: a_test_env_value_2 - # Extra environment variables to run jobs from a file. - # It will be ignored if it's empty or the file doesn't exist. - env_file: .env - # The timeout for a job to be finished. - # Please note that the Gitea instance also has a timeout (3h by default) for the job. - # So the job could be stopped by the Gitea instance if it's timeout is shorter than this. - timeout: 3h - # The timeout for the runner to wait for running jobs to finish when shutting down. - # Any running jobs that haven't finished after this timeout will be cancelled. - shutdown_timeout: 0s - # Whether skip verifying the TLS certificate of the Gitea instance. - insecure: false - # The timeout for fetching the job from the Gitea instance. - fetch_timeout: 5s - # The interval for fetching the job from the Gitea instance. - fetch_interval: 2s - # The github_mirror of a runner is used to specify the mirror address of the github that pulls the action repository. - # It works when something like `uses: actions/checkout@v4` is used and DEFAULT_ACTIONS_URL is set to github, - # and github_mirror is not empty. In this case, - # it replaces https://github.com with the value here, which is useful for some special network environments. - github_mirror: '' - # The labels of a runner are used to determine which jobs the runner can run, and how to run them. - # Like: "macos-arm64:host" or "ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest" - # Find more images provided by Gitea at https://gitea.com/docker.gitea.com/runner-images . - # If it's empty when registering, it will ask for inputting labels. - # If it's empty when execute `daemon`, will use labels in `.runner` file. - labels: - # Fallback images (checked last) - - "ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest" - - "self-hosted:docker://docker.gitea.com/runner-images:ubuntu-latest" - -cache: - # Enable cache server to use actions/cache. - enabled: true - # The directory to store the cache data. - # If it's empty, the cache data will be stored in $HOME/.cache/actcache. - dir: "" - # The host of the cache server. - # Use host.docker.internal to allow containers to access the host - # This fixes the common networking issue where containers can't reach the cache server - host: "host.docker.internal" - # Use a fixed port instead of random to avoid connection issues - port: 44029 - # The external cache server URL. Valid only when enable is true. - # If it's specified, act_runner will use this URL as the ACTIONS_CACHE_URL rather than start a server by itself. - # The URL should generally end with "/". - external_server: "" - -container: - # Use host network to avoid Docker networking issues with cache - # This ensures containers can access the cache server on the host - network: "host" - # Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker). - privileged: false - # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway). - options: - # The parent directory of a job's working directory. - # NOTE: There is no need to add the first '/' of the path as act_runner will add it automatically. - # If the path starts with '/', the '/' will be trimmed. - # For example, if the parent directory is /path/to/my/dir, workdir_parent should be path/to/my/dir - # If it's empty, /workspace will be used. - workdir_parent: - # Volumes (including bind mounts) can be mounted to containers. Glob syntax is supported, see https://github.com/gobwas/glob - # You can specify multiple volumes. If the sequence is empty, no volumes can be mounted. - # For example, if you only allow containers to mount the `data` volume and all the json files in `/src`, you should change the config to: - # valid_volumes: - # - data - # - /src/*.json - # If you want to allow any volume, please use the following configuration: - # valid_volumes: - # - '**' - valid_volumes: [] - # overrides the docker client host with the specified one. - # If it's empty, act_runner will find an available docker host automatically. - # If it's "-", act_runner will find an available docker host automatically, but the docker host won't be mounted to the job containers and service containers. - # If it's not empty or "-", the specified docker host will be used. An error will be returned if it doesn't work. - docker_host: "" - # Docker registry authentication to avoid rate limits - docker_username: gschrooyen - docker_password: ${DOCKER_PASSWORD} - # Pull docker image(s) even if already present - force_pull: false - # Rebuild docker image(s) even if already present - force_rebuild: false - # Always require a reachable docker daemon, even if not required by act_runner - require_docker: false - # Timeout to wait for the docker daemon to be reachable, if docker is required by require_docker or act_runner - docker_timeout: 0s - -host: - # The parent directory of a job's working directory. - # If it's empty, $HOME/.cache/act/ will be used. - workdir_parent: diff --git a/runners/config_docker.yaml b/runners/config_docker.yaml index dd63d40..1e1b4ac 100644 --- a/runners/config_docker.yaml +++ b/runners/config_docker.yaml @@ -54,22 +54,20 @@ cache: # If it's empty, the cache data will be stored in $HOME/.cache/actcache. dir: "" # The host of the cache server. - # It's not for the address to listen, but the address to connect from job containers. - # So 0.0.0.0 is a bad choice, leave it empty to detect automatically. - host: "" - # The port of the cache server. - # 0 means to use a random available port. - port: 0 + # Use host.docker.internal to allow containers to access the host + # This fixes the common networking issue where containers can't reach the cache server + host: "host.docker.internal" + # Use a fixed port instead of random to avoid connection issues + port: 44029 # The external cache server URL. Valid only when enable is true. # If it's specified, act_runner will use this URL as the ACTIONS_CACHE_URL rather than start a server by itself. # The URL should generally end with "/". external_server: "" container: - # Specifies the network to which the container will connect. - # Could be host, bridge or the name of a custom network. - # If it's empty, act_runner will create a network automatically. - network: "" + # Use host network to avoid Docker networking issues with cache + # This ensures containers can access the cache server on the host + network: "host" # Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker). privileged: false # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway). diff --git a/runners/config_heavy.yaml b/runners/config_heavy.yaml index dd63d40..1e1b4ac 100644 --- a/runners/config_heavy.yaml +++ b/runners/config_heavy.yaml @@ -54,22 +54,20 @@ cache: # If it's empty, the cache data will be stored in $HOME/.cache/actcache. dir: "" # The host of the cache server. - # It's not for the address to listen, but the address to connect from job containers. - # So 0.0.0.0 is a bad choice, leave it empty to detect automatically. - host: "" - # The port of the cache server. - # 0 means to use a random available port. - port: 0 + # Use host.docker.internal to allow containers to access the host + # This fixes the common networking issue where containers can't reach the cache server + host: "host.docker.internal" + # Use a fixed port instead of random to avoid connection issues + port: 44029 # The external cache server URL. Valid only when enable is true. # If it's specified, act_runner will use this URL as the ACTIONS_CACHE_URL rather than start a server by itself. # The URL should generally end with "/". external_server: "" container: - # Specifies the network to which the container will connect. - # Could be host, bridge or the name of a custom network. - # If it's empty, act_runner will create a network automatically. - network: "" + # Use host network to avoid Docker networking issues with cache + # This ensures containers can access the cache server on the host + network: "host" # Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker). privileged: false # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway). diff --git a/runners/config_light.yaml b/runners/config_light.yaml index dd63d40..1e1b4ac 100644 --- a/runners/config_light.yaml +++ b/runners/config_light.yaml @@ -54,22 +54,20 @@ cache: # If it's empty, the cache data will be stored in $HOME/.cache/actcache. dir: "" # The host of the cache server. - # It's not for the address to listen, but the address to connect from job containers. - # So 0.0.0.0 is a bad choice, leave it empty to detect automatically. - host: "" - # The port of the cache server. - # 0 means to use a random available port. - port: 0 + # Use host.docker.internal to allow containers to access the host + # This fixes the common networking issue where containers can't reach the cache server + host: "host.docker.internal" + # Use a fixed port instead of random to avoid connection issues + port: 44029 # The external cache server URL. Valid only when enable is true. # If it's specified, act_runner will use this URL as the ACTIONS_CACHE_URL rather than start a server by itself. # The URL should generally end with "/". external_server: "" container: - # Specifies the network to which the container will connect. - # Could be host, bridge or the name of a custom network. - # If it's empty, act_runner will create a network automatically. - network: "" + # Use host network to avoid Docker networking issues with cache + # This ensures containers can access the cache server on the host + network: "host" # Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker). privileged: false # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway). diff --git a/runners/config_security.yaml b/runners/config_security.yaml index dd63d40..1e1b4ac 100644 --- a/runners/config_security.yaml +++ b/runners/config_security.yaml @@ -54,22 +54,20 @@ cache: # If it's empty, the cache data will be stored in $HOME/.cache/actcache. dir: "" # The host of the cache server. - # It's not for the address to listen, but the address to connect from job containers. - # So 0.0.0.0 is a bad choice, leave it empty to detect automatically. - host: "" - # The port of the cache server. - # 0 means to use a random available port. - port: 0 + # Use host.docker.internal to allow containers to access the host + # This fixes the common networking issue where containers can't reach the cache server + host: "host.docker.internal" + # Use a fixed port instead of random to avoid connection issues + port: 44029 # The external cache server URL. Valid only when enable is true. # If it's specified, act_runner will use this URL as the ACTIONS_CACHE_URL rather than start a server by itself. # The URL should generally end with "/". external_server: "" container: - # Specifies the network to which the container will connect. - # Could be host, bridge or the name of a custom network. - # If it's empty, act_runner will create a network automatically. - network: "" + # Use host network to avoid Docker networking issues with cache + # This ensures containers can access the cache server on the host + network: "host" # Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker). privileged: false # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway). diff --git a/runners/fix-cache-issues.ps1 b/runners/fix-cache-issues.ps1 index d14fe49..ee9dd7e 100644 --- a/runners/fix-cache-issues.ps1 +++ b/runners/fix-cache-issues.ps1 @@ -92,12 +92,15 @@ function Restart-CacheService { Get-Process -Name "act_runner" -ErrorAction SilentlyContinue | Stop-Process -Force Start-Sleep -Seconds 2 - # Start with fixed configuration - if (Test-Path "config_cache_fixed.yaml") { - Write-Host "✅ Using fixed configuration" -ForegroundColor Green - Start-Process -FilePath ".\act_runner.exe" -ArgumentList "daemon", "--config", "config_cache_fixed.yaml" -WindowStyle Hidden + # Start with updated configuration + if (Test-Path "config_docker.yaml") { + Write-Host "✅ Using updated Docker configuration" -ForegroundColor Green + Start-Process -FilePath ".\act_runner.exe" -ArgumentList "daemon", "--config", "config_docker.yaml" -WindowStyle Hidden + } elseif (Test-Path "config_heavy.yaml") { + Write-Host "✅ Using updated heavy configuration" -ForegroundColor Green + Start-Process -FilePath ".\act_runner.exe" -ArgumentList "daemon", "--config", "config_heavy.yaml" -WindowStyle Hidden } else { - Write-Host "⚠️ Fixed configuration not found, using default" -ForegroundColor Yellow + Write-Host "⚠️ Updated configuration not found, using default" -ForegroundColor Yellow Start-Process -FilePath ".\act_runner.exe" -ArgumentList "daemon" -WindowStyle Hidden } diff --git a/runners/fix-cache-issues.sh b/runners/fix-cache-issues.sh index 17cd1b5..a3ed1ca 100644 --- a/runners/fix-cache-issues.sh +++ b/runners/fix-cache-issues.sh @@ -87,12 +87,15 @@ restart_cache_service() { pkill -f "act_runner" || true sleep 2 - # Start with fixed configuration - if [ -f "config_cache_fixed.yaml" ]; then - echo "✅ Using fixed configuration" - nohup ./act_runner daemon --config config_cache_fixed.yaml > runner.log 2>&1 & + # Start with updated configuration + if [ -f "config_docker.yaml" ]; then + echo "✅ Using updated Docker configuration" + nohup ./act_runner daemon --config config_docker.yaml > runner.log 2>&1 & + elif [ -f "config_heavy.yaml" ]; then + echo "✅ Using updated heavy configuration" + nohup ./act_runner daemon --config config_heavy.yaml > runner.log 2>&1 & else - echo "⚠️ Fixed configuration not found, using default" + echo "⚠️ Updated configuration not found, using default" nohup ./act_runner daemon > runner.log 2>&1 & fi