Skip to content
Latchkey

CodeBuild GitHub Actions Runner Troubleshooting Guide

When a CodeBuild-hosted runner does not pick up a job, the cause is usually the webhook, the label, IAM, VPC, or a build quota. Here is how to isolate each.

Most CodeBuild GitHub Actions runner failures fall into a handful of buckets: the webhook is not delivering, the runs-on label is wrong or mismatched across jobs, the IAM service role lacks a permission, the VPC blocks the runner, the runner token expires, or you hit a concurrent build quota. This guide indexes each with the AWS-documented fix. Verify against the AWS sources linked below, as behavior and docs change.

The job hangs and never starts

According to AWS docs, a hung job usually means the WORKFLOW_JOB_QUEUED webhook did not trigger a build, or the runs-on label does not match your project. Check the webhook first (see the webhook page), then confirm the codebuild-<project>-${{ github.run_id }}-${{ github.run_attempt }} label matches your project name exactly.

Multiple jobs, one gets stuck

According to AWS docs, this happens when jobs in the same run have a different number of label overrides, so GitHub can route one job to the wrong runner. The fix is to give every job the same number of overrides or a unique custom label. See the dedicated label-format page.

Build starts but fails on permissions or networking

Permission failures point at the IAM service role; networking failures (for example an EC2 UnauthorizedOperation) point at VPC configuration. According to AWS docs, both are configured by you in AWS. See the IAM and VPC pages.

Builds queue or are rejected under load

According to AWS docs, CodeBuild enforces per-account, per-Region concurrent build quotas. If you exceed them, builds cannot start. See the concurrency page for the quota-increase path.

Prefer to avoid this class of issue

If you would rather not stand up and operate CodeBuild in your own AWS account, Latchkey is a fully-managed alternative: you change one runs-on label and run your existing GitHub Actions jobs on managed, self-healing runners with no AWS account, IAM role, VPC, or webhook to configure. It is one option to weigh, not a knock on CodeBuild.

Frequently asked questions

Where does CodeBuild show the error for a webhook that did not start a build?
According to AWS docs, open the repository webhook settings on GitHub, go to Recent Deliveries, expand the workflow_job.queued event, and read the Response tab, which contains the response or error message returned from CodeBuild.
Where can I verify these CodeBuild details?
These points come from AWS CodeBuild docs and the AWS CodeBuild pricing page (reviewed 2026-07-02). AWS pricing varies by Region and compute type and changes over time, so verify current rates and free-tier terms on the AWS pricing page before you budget. Primary sources: AWS CodeBuild docs, "Configure a CodeBuild-hosted GitHub Actions runner": https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html | AWS CodeBuild docs, "Troubleshoot the webhook": https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner-troubleshoot-webhook.html | AWS CodeBuild docs, "Compute images supported with the CodeBuild-hosted GitHub Actions runner": https://docs.aws.amazon.com/codebuild/latest/userguide/sample-github-action-runners-update-yaml.images.html | AWS CodeBuild pricing: https://aws.amazon.com/codebuild/pricing/ | AWS CodeBuild docs, "Quotas for AWS CodeBuild": https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html

Related guides

See what you would save - Latchkey managed runners with self-healing. Start free →